Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Table of Contents
Copyright...........................................................................................................................17
shared.properties.............................................................................................................926
PAS command line reference.............................................................................................................940
The tcman command...............................................................................................................940
Manager actions.......................................................................................................................942
Server actions..........................................................................................................................953
General actions........................................................................................................................973
Field Manipulation..................................................................................................................1091
Data Formatting.....................................................................................................................1095
Grid Control Examples and API.............................................................................................1099
Miscellaneous........................................................................................................................1122
Display Functions...................................................................................................................1133
User session data..................................................................................................................1144
Client-side JavaScript.......................................................................................................................1150
Objects...................................................................................................................................1151
Functions................................................................................................................................1158
Properties...............................................................................................................................1161
Custom events.......................................................................................................................1169
Code Generator................................................................................................................................1171
Using the Code Generator.....................................................................................................1172
Metadata API and XML Reference...................................................................................................1173
Metadata XML reference........................................................................................................1173
SOAP Metadata Methods......................................................................................................1190
REST Metadata Methods.......................................................................................................1203
Rollbase REST Methods...................................................................................................................1216
appXML .................................................................................................................................1217
bulkCreate .............................................................................................................................1217
bulkCreateOrUpdate .............................................................................................................1218
bulkDelete .............................................................................................................................1220
bulkUpdate ............................................................................................................................1221
clearDataObjectCache...........................................................................................................1222
create ....................................................................................................................................1223
createArr................................................................................................................................1224
createCustomer .....................................................................................................................1226
create2 ..................................................................................................................................1227
createRecord..........................................................................................................................1228
delete ....................................................................................................................................1230
deleteArr ................................................................................................................................1230
deleteRecord..........................................................................................................................1231
getApplicationIds....................................................................................................................1232
getAuthentication...................................................................................................................1233
getBinaryData........................................................................................................................1234
getBuildStatus........................................................................................................................1235
getCodeById .........................................................................................................................1236
getCount ................................................................................................................................1237
getDataField ..........................................................................................................................1238
getDataObj ............................................................................................................................1239
getIdByCode .........................................................................................................................1241
getIdByOriginalId....................................................................................................................1242
getLDFIDs..............................................................................................................................1243
getPage .................................................................................................................................1244
getPermissionsByRole...........................................................................................................1246
getPermissionsByUser...........................................................................................................1247
getPicklist...............................................................................................................................1249
getRecord...............................................................................................................................1250
getRelationships ....................................................................................................................1251
getRoleById............................................................................................................................1253
getRoles.................................................................................................................................1254
getUpdated ............................................................................................................................1255
header ...................................................................................................................................1256
install .....................................................................................................................................1256
installByAppId .......................................................................................................................1257
licenseUpdate........................................................................................................................1258
login........................................................................................................................................1259
logout.....................................................................................................................................1260
resetPassword.......................................................................................................................1261
runAction................................................................................................................................1262
runTrigger ..............................................................................................................................1263
search ...................................................................................................................................1264
selectNumber ........................................................................................................................1265
selectQuery ...........................................................................................................................1266
selectValue ............................................................................................................................1268
setAuthentication....................................................................................................................1269
setBinaryData.........................................................................................................................1275
setDataField ..........................................................................................................................1276
setPermissionsByRole...........................................................................................................1277
setPermissionsByUser...........................................................................................................1278
update ...................................................................................................................................1279
updateArr...............................................................................................................................1281
updateCustomer ....................................................................................................................1282
updateRecord.........................................................................................................................1283
update2..................................................................................................................................1284
view .......................................................................................................................................1285
Rollbase SOAP Methods..................................................................................................................1285
DataObj Container Class.......................................................................................................1286
DataField Container Class.....................................................................................................1287
SearchFilter Class .................................................................................................................1287
bulkCreate() ..........................................................................................................................1289
bulkCreateUpdate() ...............................................................................................................1289
bulkUpdate() ..........................................................................................................................1290
clearDataObjectCache().........................................................................................................1291
create() ..................................................................................................................................1292
createArr() .............................................................................................................................1293
createArr2() ...........................................................................................................................1294
createArrNoAudit() ................................................................................................................1295
createCustomer() ..................................................................................................................1296
createRecord().......................................................................................................................1297
delete() ..................................................................................................................................1297
deleteArr() .............................................................................................................................1298
deleteArrNoAudit().................................................................................................................1299
deleteRecord().......................................................................................................................1299
deleteRecords()......................................................................................................................1300
detailedSearch().....................................................................................................................1301
getBinaryData() .....................................................................................................................1302
getCodebyId() .......................................................................................................................1303
getCount() .............................................................................................................................1303
getIdByCode() .......................................................................................................................1304
getDataField() .......................................................................................................................1305
getDataField2() .....................................................................................................................1306
getDataObj() ..........................................................................................................................1307
getExchangeRate() ...............................................................................................................1308
getPage() ..............................................................................................................................1308
getRelatedIDs()......................................................................................................................1310
getRelationships() .................................................................................................................1310
getRuntimeStatus() ...............................................................................................................1311
getUpdated() .........................................................................................................................1312
getRecord()............................................................................................................................1313
login().....................................................................................................................................1314
login2()...................................................................................................................................1314
logout() ..................................................................................................................................1315
resetPassword().....................................................................................................................1316
selectNumber() ......................................................................................................................1316
selectQuery() .........................................................................................................................1317
selectValue() ..........................................................................................................................1319
setBinaryData() .....................................................................................................................1320
setDataField() ........................................................................................................................1321
setDataField2() ......................................................................................................................1322
setExchangeRate() ...............................................................................................................1323
setRelationship() ...................................................................................................................1324
setRelatedIDs() .....................................................................................................................1325
textSearch() ...........................................................................................................................1326
update() .................................................................................................................................1326
updateArr() ............................................................................................................................1327
updateArrNoAudit()................................................................................................................1328
updateCustomer() .................................................................................................................1329
updateRecord.........................................................................................................................1330
Rollbase CSS Styles for the Classic UI............................................................................................1331
Table Styles............................................................................................................................1331
Table Cell Styles.....................................................................................................................1332
Table Row Styles....................................................................................................................1335
Text Styles..............................................................................................................................1337
Page Editor Styles..................................................................................................................1338
Link Styles..............................................................................................................................1338
Sidebar Styles........................................................................................................................1339
Field types.........................................................................................................................................1339
Text field.................................................................................................................................1339
Text Area Field.......................................................................................................................1340
Checkbox Field......................................................................................................................1340
Decimal field...........................................................................................................................1340
Currency field.........................................................................................................................1340
Base Currency field................................................................................................................1341
Date Field...............................................................................................................................1341
Date/Time field.......................................................................................................................1341
Time field................................................................................................................................1342
Email Field.............................................................................................................................1342
Phone Number field...............................................................................................................1342
Password Field.......................................................................................................................1342
Integer field............................................................................................................................1343
Percent Field..........................................................................................................................1343
Picklist Field...........................................................................................................................1343
Picklist Multiselect..................................................................................................................1345
Radio Button Field..................................................................................................................1345
Group Checkbox Field...........................................................................................................1345
URL Field...............................................................................................................................1346
Auto-Number Field.................................................................................................................1346
File Upload field.....................................................................................................................1346
Image Upload field.................................................................................................................1347
Shared Image field.................................................................................................................1347
Formula Field.........................................................................................................................1347
Expression Field.....................................................................................................................1349
Template Field........................................................................................................................1349
Document Template Field......................................................................................................1349
Email Template Field..............................................................................................................1350
Related Field..........................................................................................................................1350
Integration Link Field..............................................................................................................1350
Dependent Picklist Field.........................................................................................................1351
Version Number Field.............................................................................................................1351
Reference Field......................................................................................................................1351
Advanced field properties.......................................................................................................1352
System Field Types................................................................................................................1352
Portal Field Types..................................................................................................................1354
© 2018 Progress Software Corporation and/or one of its subsidiaries or affiliates. All rights reserved.
These materials and all Progress® software products are copyrighted and all rights are reserved by Progress
Software Corporation. The information in these materials is subject to change without notice, and Progress
Software Corporation assumes no responsibility for any errors that may appear therein. The references in these
materials to specific platforms supported are subject to change.
Corticon, DataDirect (and design), DataDirect Cloud, DataDirect Connect, DataDirect Connect64, DataDirect
XML Converters, DataDirect XQuery, DataRPM, Deliver More Than Expected, Icenium, Kendo UI, NativeScript,
OpenEdge, Powered by Progress, Progress, Progress Software Developers Network, Rollbase, SequeLink,
Sitefinity (and Design), SpeedScript, Stylus Studio, TeamPulse, Telerik, Telerik (and Design), Test Studio, and
WebSpeed are registered trademarks of Progress Software Corporation or one of its affiliates or subsidiaries
in the U.S. and/or other countries. Analytics360, AppServer, BusinessEdge, DataDirect Spy, SupportLink,
DevCraft, Fiddler, JustAssembly, JustDecompile, JustMock, Kinvey, NativeScript Sidekick, OpenAccess,
ProDataSet, Progress Results, Progress Software, ProVision, PSE Pro, Sitefinity, SmartBrowser,
SmartComponent, SmartDataBrowser, SmartDataObjects, SmartDataView, SmartDialog, SmartFolder,
SmartFrame, SmartObjects, SmartPanel, SmartQuery, SmartViewer, SmartWindow, and WebClient are
trademarks or service marks of Progress Software Corporation and/or its subsidiaries or affiliates in the U.S.
and other countries. Java is a registered trademark of Oracle and/or its affiliates. Any other marks contained
herein may be trademarks of their respective owners.
Please refer to the Release Notes applicable to the particular Progress product release for any third-party
acknowledgements required to be provided in the documentation associated with the Progress product.
Welcome to Progress Rollbase, a web-based platform for creating, customizing and distributing applications.
Rollbase applications run in an integrated online environment and share a common security model, data model
and user interface. Rollbase exemplifies Platform-as-a-Service (PaaS). There is no hardware or software to
buy or install, both developers and end-users access Rollbase using a web browser. Rollbase allows you to
focus on creating business value for users rather than on the expensive, complex and time-consuming tasks
of managing software and infrastructure.
The Rollbase development environment supports citizen developers and business users who want to create
custom applications. Its framework of wizards and dialogs provide drag-and-drop and point-and-click
convenience. You can create sophisticated applications without writing a line of code, but you also have the
option to use standards such as JavaScript and HTML to customize the logic and user interface. To get started,
you define a foundation for your app, by creating objects, their fields, and relationships between objects.
The following image illustrates the typical process for developing Rollbase applications:
Click the thumbnail to view the typical Rollbase app development cycle.
• Platform options
Rollbase offers both hosted and Private Cloud environments. Private Cloud users install Rollbase components
on their own servers or on another cloud platform. Private Cloud users manage their own infrastructure,
while Progress manages the hosted cloud infrastructure for all hosted cloud users. For information on hosted
and Private Cloud, See www.progress.com/products/rollbase.
• Application Marketplace
The Rollbase Application Marketplace provides an online exchange where you can browse and install
ready-made applications such as a CRM system, a suite of integrated HR applications, a bug tracking
system, and others. Once a Rollbase application is installed, you can customize it to meet your specific
business needs.
The Rollbase Fast Track page contains links to the Quick Start tutorial, companion videos that demonstrate
basic Rollbase features, and links to related information in this documentation set. The tutorial helps you
exercise key Rollbase functionality and can be completed in about an hour. Check it out!
• Obtaining an account
• Sample applications
Obtaining an account
On hosted Rollbase, the first person to sign up from a particular organization becomes an administrator of the
Rollbase tenant. (A tenant is a virtual space for creating and managing apps.) On Rollbase Private Cloud, the
person whose email address is entered during installation becomes the first administrator of the Private Cloud
tenant(s). Administrators can create user accounts, install applications from the Application Directory,
customize applications for specific business needs, and create applications.
Administrators create user accounts by adding User records. Each User record has a required User Role field.
Any Rollbase user with the Administrator role has complete administrative privileges. See Role-based access
control on page 724 for information about roles.
Private Cloud and ISV Partners have the option create multiple tenants, which they do by adding Customer
records. Therefore, the documentation often refers to these as customer tenants. Typically, those with the
ability to create tenants will want to use separate tenants for development and production. See Managing
customer tenants on page 859 for more information.
Logging in
Every User record has a required Email Address field. After an administrator creates a User record, the new
user will receive a confirmation email with a temporary password and a login URL. Progress recommends
changing passwords periodically. For Rollbase Private Cloud, administrators can require that passwords for
their tenant meet certain criteria, such as length and inclusion of numbers. See Password authentication details
on page 876 for more information.
For Rollbase Private Cloud, administrators can also require users to answer security questions as part of
logging in. When security questions are enabled, users will be prompted to select security questions and provide
the answers the next time they log in. Administrators create the questions, configure how many questions each
user can choose, and set the number of questions a user must answer when logging in. For example, an
administrator might create five security questions, require users to provide answers to three of the questions
as part of their profile, and require users to answer one of the questions when logging in.
See Security questions for authentication on page 898 for information about configuring security questions.
See Selecting and modifying your security questions on page 25 for details about managing the security
questions in your user profile.
• Update Profile — Opens the My Profile page where you can manage your personal settings and change
your password. See Personal setup on page 791 for details.
• Log Out — Logs you out of the system.
Example: In the following graphic, the user has answered a single security question and checked the option
to remember this computer:
Switching tenants
On hosted Rollbase, you can switch to a different tenant if you have an account on that tenant with the same
email address. This is useful if your organization runs different applications on different tenants and you need
to access those applications.
To switch to a different tenant:
1. From the user profile, menu, select Switch Tenant. This option is only available if you have an account on
a different tenant.
Rollbase capabilities
The Rollbase application development environment allows you to:
For example, the following screen shows an application definition, including its properties and its child
components:
You can easily switch between setup and application pages to test as you build. When the application is
complete, you expose the application to end users. See Distribution options on page 266 for more information.
You can choose one of two UI blueprints for an application's pages. A UI blueprint is how the application
navigation and various menus inside the application are rendered. The page content does not change across
blueprints. The available blueprints are:
• Traditional
• Modern - Vertical Menus
See UI blueprints on page 525 for more information.
The following screen shows the resulting application interface using the Traditional UI blueprint.
The following screen shows the resulting application interface using the Modern - Vertical Menus UI blueprint.
You can control the way an application page renders a list of records on a particular type of device using cards
and card containers. The screen below shows the same application as above rendered using cards and card
containers on a smart phone.
See Cards and card containers on page 538 for more information.
The topics in this section cover functionality you will use frequently. Watch Finding your way around in Rollbase
for a short tour of the Rollbase interface.
See the following topics for details about the Rollbase interface:
The screen below shows the Rollbase menu for an application that uses the Traditional UI blueprint.
The screen below shows the Rollbase menu, also known as the sidebar, for an application that uses the Modern
- Vertical Menus UI blueprint.
• Rollbase Home — Opens the Rollbase application (administrators and users with permission to view the
Rollbase application only)
• My Theme — Opens the Theme Preview mode, allowing a user to select a theme for all applications. See
Selecting a theme for a user on page 288 for details.
• Subscription Details — Opens the About Your Account page, which displays details about your user
account. One of the important pieces of information on the page is your Customer ID.
• Rollbase Forum — Opens the Rollbase forum page in the Progress Communities site. From this page,
you can read existing forum threads, ask Rollbase questions, and access other Rollbase resources such
as customer support.
For administrative users, the Rollbase menu also contains the following controls:
The menu bar is responsive; if the screen size is too narrow to display all menu items, non-visible items are
added to an overflow menu:
Administrative users
By default, the application tab and menu bar provide the following menu items and controls to those with an
administrative role:
• Application switcher — A drop-down menu on the application tab that allows the user to navigate to different
applications and to setup pages. Select the App Settings button next to an application to navigate to the
application's setup page:
Note: The application switcher on page 38 is in a different location for applications that use the Modern -
Vertical Menus UI blueprint.
• Application menu bar —Contains each tab and menu defined in the application. Administrators can click
plus to create a new object and/or tab for the application:
Note: Application tabs and menus are in the The Rollbase menu on page 32 (sidebar) for applications that
use the Modern - Vertical Menus UI blueprint.
Non-administrative users
By default, the application tab and menu bar provide the following menu items and controls to those with a
non-administrative role:
• Application switcher — A drop-down menu on the application tab that allows the user to navigate to different
applications. Only applications the user has permission to access appear in the menu:
Note: The application switcher on page 38 is in a different location for applications that use the Modern -
Vertical Menus UI blueprint.
• Application menu bar — Contains each tab and menu defined in the application.
Note: Application tabs and menus are in the The Rollbase menu on page 32 (sidebar) for applications that
use the Modern - Vertical Menus UI blueprint.
See Application tabs and menus on page 255 for more information about tabs and menus.
The application switcher allows the user to navigate to different applications and to setup pages. Administrators
can select the App Settings button next to an application to navigate to the application's setup page.
Non-administrative users only see the applications to which they have access.
See The application tab and menu bar on page 35 for information about the application switcher for applications
that use the Traditional UI blueprint.
Administrative users have the additional option to navigate to the object definition for the displayed object type:
On tablets and smart phones, the page menu only allows users to create a new record. In addition, only
applications that use the Traditional UI blueprint have a page menu on tablets and smart phones.
You can replace this logo with your company logo for a single application or for all applications. See Editing
applications on page 274 for information about setting the logo for an application. See Account settings on page
801 for information about replacing the logo for all applications.
• Personal Setup — Preferences such as language, time zone, and Google app settings.
• Applications Setup — Definitions for applications and application components.
• Administration Setup — Global settings for the tenant and user and role management.
• Monitoring — Monitoring settings for runtime status and systems logs.
Users with an administrative role can configure personal, application, and account settings from the Setup
home page. Users without administrative privileges can only configure their personal settings using the Update
Profile option in the user profile menu.
Administrators can access the Setup home page from an application page in the following ways:
The application switcher allows you to navigate to application and setup pages in the following ways:
For information about working with the Rollbase calendar, see The Rollbase calendar on page 260.
For information about attaching a Google account, see Integrating with Google applications on page 707.
Search
The search button at the top right of the screen allows you to search your tenant. To set the scope of a search,
use the drop-down menu to select Metadata, an object type or all object types. Administrators can search all
metadata.
The simplest way to search for data is to select the scope of the search and type a single term into the search
box.
When you click the search button on an application page, the following fields open. By default, the scope of a
search is set to Metadata:
Object fields have a property that specifies whether or not to Index this Field as part of the text search
engine. If none of an object's fields has this property checked, that object will not appear in the drop-down
menu. See Advanced field properties on page 1352 for more information.
Search queries in Rollbase are broken up into terms and operators. There are two types of terms: single terms
and phrases:
Note: By default, a user will have permission to view the search button. However, if uers with a
non-administrative role are not granted the Search Box permission, they cannot view the search button. See
Roles and permissions on page 725 for more information.
Multiple wildcard character search looks for 0 or more characters. For example, to search for test, tests or
tester, you can use the search:
test*
You can also use the wildcard character search in the middle of a term:
te*t
Note: You cannot use a "*" or "?" symbol as the first character of a search.
Boolean operators
Boolean operators allow you to combine search terms. Rollbase supports AND, +, OR, NOT and -. The operators
must be entered in capital letters as shown.
AND The AND operator matches records To search for documents that
where both terms exist somewhere contain "Human Resources" and
in one or more record fields or file "Sales" use the query: "Human
attachments. This is equivalent to Resources" AND Sales
an intersection using sets. You can
use the && symbol instead of the
word AND.
NOT The NOT operator excludes records For example, to search for records
with fields or file attachments that that contain "Human Resources" but
contain the term after NOT. This is not "Sales" use the query: "Human
equivalent to a difference using Resources" NOT Sales
sets. You can use the ! symbol
instead of the word NOT. Note: The
NOT operator cannot be used with
just one term. For example, the
following search will return no
results: NOT Sales
To escape these characters, use the backslash (\) before the character. For example, to search for (1+1):2,
use the query:
\(1\+1\)\:2
Object search
To find records of a specific object type:
1. Do one of the following:
• Click Search on page 44 and select the object type from the drop-down menu.
• Select Search from the page menu:
The Search by Distance appears only on search screens for objects that have a Location attribute. Search
results display in the object's Search Results page. You can change the default view that is used to display
search results by editing this page, selecting the Search Results List component, and selecting the desired
view in the Default List View field in the Properties box.
Metadata search
Metadata stores the definition of Rollbase applications and their components, including properties and attributes.
Metadata XML reference on page 1173 lists all metadata elements.You can use Rollbase Search to find strings
in the metadata and then sort the results by type. For example, since metadata includes the integration name,
you could search for a field integration name and sort the results to locate the formulas that use that field.
The results of a metadata search include:
Note: The metadata search is not case sensitive and you can use Wildcard characters in your search string
as described in Wildcard character searches on page 46.
4. Click Search.
5. You can do the following on the search results page:
The following graphic shows sample results of a search for the string google:
Printing Screens
All editable Rollbase pages have a Print menu item in the Page Options menu that renders the current page
without the sidebar or header in a new window. Links and buttons in the window are intentionally disabled.
Sample applications
Another good way to become familiar with Rollbase is to install one or more ready-made starter applications
from the Marketplace or Application Directory.
Note: Application Directory is only available for those Rollbase Private Cloud users whose master tenant
administrator updated from a prior version to Rollbase 4.0 and did not enable Marketplace.
Hosted Rollbase Marketplace or Application Directory contains only applications approved by Rollbase.
Rollbase Private Cloud Marketplace or Application Directory is similar, but the administrator of the master
tenant decides which applications will be available in it. Administrators can install any application from the
Application Directory into their users' accounts with a single click. This enables them to immediately deploy
critical business applications to the right people in the organization.
Users can browse the Marketplace or Application Directory without being signed in. If they do not yet have
a Rollbase account, they can sign up for a free trial from an application page and that application will be installed
into their tenant automatically once it is created.
For more information about installing and updating applications from Marketplace, see Using the Progress
Rollbase Marketplace on page 766.
The topics in this section describe new features and changed behavior for Rollbase for the following releases:
• Release 4.5
• Release 4.4
• Upgrading Private Cloud to Version 4.X on page 235
• Release 4.3
• What's new in Rollbase 4.3 on page 112
• What's new in Rollbase 4.3.1 on page 109
• Release 4.2
• What's new in Rollbase 4.2 on page 134
• What's new in Rollbase 4.2.1 on page 133
• Release 4.1
• What's new in Rollbase 4.1 on page 182
• What's new in Rollbase 4.1.1 on page 181
• Release 4.0
• What's new in Rollbase 4.0 on page 227
• What's new in Rollbase 4.0.2 on page 222
Ability to create conditional formula for custom buttons and control button's position
You can now create conditional formula for custom buttons. This conditional formula is evaluated before adding
a button to the page.
Also, Rollbase now enables you to control how the buttons (custom buttons and workflow action buttons) are
positioned in relation to the overflow menu.
See Using buttons on pages on page 515 for more information.
where:
• headers is a String of name-value pairs specifying the HTTP Headers to be sent in the request.
• charset specifies the preferred encoding scheme for the HTTP response. Default value is UTF-8.
Example:
var headers = {"Content-Type": "application/xml"};
rbv_api.sendHTTPGet("http://xyz.com?abc=def",headers,"ISO-8859-1");
Added optional parameters to Client Side API rbf_runTrigger method to supply date format, and to allow
actions such as recursion and rollbackOnException to run.
rbf_runTrigger(objName, id, triggerId, checkCondition, callback, useLegacyDateFormat,
options);
where:
• useLegacyDateFormat This only applies to Date and Date/Time fields in JSON output. When set to
false, a date value is returned as a String. When set to true, a date value is returned as a Date object.
Default value is true.
• options is list of name-value pairs set in a variable in the form {name1 : value1 , name2 : value2}.
When runRecursions is set to true, configures trigger to run recursively, assuming recursive properties
are set on the trigger definition page. Default value is false.
Example:
<script>
var options = {runRecursions : true};
var callback = function callback(returnStatus) {console.log("Trigger Status:
"+returnStatus);};
var func = rbf_runTrigger("a", 1234, "abcxyz", false, callback, false, options);
</script>
When runRecursions is set to true, configures the trigger to run recursively, assuming recursive properties
are set on the trigger definition page. Default value is false.
Example:
rbv_api.runTrigger("Query", {!id}, "TaC4hpbwSDmjSPOHavRqJA", false, true);
This function fetches a set of records in a view, including (optionally) dependent records and allows you to
apply a filter to the results. It brings info back to the page using an asynchronous AJAX mechanism
rbf_getViewPage(viewId, callback, options);
where:
• viewId is the original ID of the view.
• callback is a callback function that will receive an array of fetched records as first parameter.
• options An optional JSON object that sets the values of optional arguments.
• startRow: The row to start fetching records from (0 by default).
• rowsPerPage: The maximum number of row to fetch in one call (user-specified value by default).
• composite: The option to retrieve related records.
• level: The depth of recursion of dependent records (o by default).
• objNames: The list of integration names of objects to be fetched as composites (* or all by default).
• fieldList: A comma-separated list of field names to fetch (use "*" for all fields - default value).
• useLegacyDateFormat: If true, or if not specified, a date value is returned as a Date object. If false,
a date value is returned as a String.
• filtering: The filters to be applied on the view.
• sorting: The sorting to be applied on the view.
• langCode: A valid two-letter ISO language code, for example, {"langCode":"es"}.
Example:
rbf_getViewPage("12345", my_callback, {
"useLegacyDateFormat": false,
"startRow": 0,
"rowsPerPage": 1000,
"composite": {
"level": 1,
"objNames": "order"
},
"fieldList": "amount, price,DOB",
"filtering": {
"dateFilter": [{
"field": "DOB",
"value": "WEEK-1|WEEK"
}],
"filters": [
{
"field": "amount",
"value": "1606",
"opCode": "GE"
},
{
"field": "price",
"value": "102",
"opCode": "EQ"
}
],
"joinType": "OR"
},
"sorting": [
{
"field": "amount",
"order": "asc"
},
{
"field": "price",
"order": "desc"
}
],
"langCode": "es"
});
where:
• viewId is the original ID of the view.
• callback is a callback function that will receive the record count as first parameter.
• options An optional JSON object that sets the values of optional arguments.
• filtering: The filters to be applied on the view.
Example:
rbf_getViewCount("12345", my_callback,
{
"filtering": {
"dateFilter": [{
"field": "DOB",
"value": "WEEK-1|WEEK"
}],
"filters": [
{
"field": "amount",
"value": "1606",
"opCode": "GE"
},
{
"field": "price",
"value": "102",
"opCode": "EQ"
}
],
"joinType": "OR"
}
});
Property Description
SupportDataDirectCloud Support for managing Data Direct Cloud objects in Rollbase. When
set to false, the service is not supported. Default value is true.
Property Description
SupportProgressDataCatalog Support for managing Progress Data Catalog for Telerik/Mobile app
integration. When set to false, the service is not supported. Default
value is true.
Rollbase supports encryption for text, phone, and email fields, and contents of file upload fields. All these data
are by default encrypted using AES (Advanced Encryption Standard) with 128 bit key size.
When the system restarts after upgrading to 4.4.4, a private.key file that contains the secret key unique to
your Rollbase instance is generated and saved in your Rollbase config folder on your master machine at
<ROLLBASE_HOME>/config/security.
AES-256 Encryption Algorithm Support
Rollbase now also supports encrypting data using AES with 256-bit key size. This is a system wide choice and
managed through the shared property - 'EncryptionType'.
To make use of AES-256 on a Rollbase Private Cloud:
1. Set value of shared property ‘EncryptionType’ from 0 to 1. This is a one-time setting.
Once set to 1, reverting to 0 is not recommended. If no value is specified,
‘EncryptionType’ uses its default value, 0. No additional changes are required if you
want to continue using AES-128.
2. Install Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8 to
enable the 256-bit Key Size used by AES-256. For download and usage instructions, see
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html.
Support for unique constraint validation on encrypted fields has been deprecated. Thus, unique checks on
encrypted fields will not work. Encrypted fields cannot be audited, marked unique or indexed as part of the
search engine. Once set, this option cannot be removed.
See Enhanced hashing and encryption algorithms on page 762 for more information.
• An Integration with Progress Corticon that allows you to take advantage of a sophisticated decision service
• User interface-related changes
• Smart image uploading and rendering on page 70
• Support for simplifying import procedure on page 72
• Ability to position notification messages on page 74
• Trigger screen improvements on page 77
• Text change for new record button on record List pages on page 81
• API-related changes
• Multilingual support for client-side APIs on page 102
• New client-side function rbf_addOnLoadMethod() on page 103
• New client-side API support for accessing the page toolbar on page 104
• Access to a Corticon Decision Service compiled and deployed using Corticon server version 5.6 or later.
• An understanding of the Decision Service functionality, the data it requires as input, and expected results.
See Automating business decisions with Corticon rules on page 427 for details and examples.
Note: When you set the field property or preference, it applies to images uploaded after the setting, not to
previously stored images.
To have Rollbase automatically resize images on upload, use the new Image Upload field property Maximum
Image Size and specify a value in pixels. For landscape images, Rollbase applies the maximum size to the
width. For portrait images, Rollbase applies the maximum size to the height. When Maximum Image Size is
specified, Rollbase ignores the Maximum File Size property. Rollbase resizes images only if they are larger
than the specified value.
Click the thumbnail to see the location of these two settings on the Field Properties screen.
When end users click the button, a streamlined Import page opens where the user selects a file and clicks
Next to begin the import.
Note: If users need to update or delete records from spreadsheets or CSV files, they will need to use the default
import procedure that is initiated from the Import button or menu item on record list pages. If you do not need
to support update and delete in this way, you can hide these items as follows:
• To hide the Import button, open the record list page in the page editor and deselect the property Show
Import Link from the record list component.
• To hide the Import menu item, deselect View permission for the object's Menu: Import for any role for
which you want it hidden.
High level steps for simplifying the import procedure
To enable a simplified import procedure, follow these high level steps:
1. Create the import map to specify the mappings between an object and the import source.
2. Using a mechanism that supports a URL, such as a button, trigger, or link, construct a URL to open the
object's Import page and pass in the import map ID. Use the following parameters of the
rb.newui.util.addQueryParameter() method to supply the required information for the URL:
• importMode — An integer representing the import mode. Currently, the only valid value is 0, which
creates new records.
• destId — The ID of the current page (available from the PageContext object as shown below)
• oMapId — The original ID of the import map to use to import data
window.location.href = url;
Selecting the option Bottom Corner positions notifications for that application as shown below.
• The trigger create and edit screens now present the type and name of the trigger first, and all trigger
timing-related fields are grouped together as shown below.
• The trigger view page uses screen space more efficiently, and for Object Script triggers, provides more
space for the Object Script editor. The system information and the second toolbar at the bottom of the
screen. The following shows the new trigger view layout:
• Card Editor tools for adding custom scripts and CSS styles on page 83
• Improved table tools in rich text editor for Text Area fields on page 91
Card Editor tools for adding custom scripts and CSS styles
After you create a new card template, you can edit it. In this release, the Card Tools menu of the Card Editor
allows you to add:
• Custom scripts that Rollbase executes before and/or after a card renders to customize its contents. For
example, you can insert text or add widgets, such as Kendo UI controls
• Custom CSS styles
• Script that you add in the first box runs as soon as data is fetched from the server and before rendering
the cards. It takes three arguments:
• cardData — An array of the values used to render the card
• dataSource — The Kendo Datasource used by the card
• cardListview — The KendoListView (KendoMobileListView for mobile devices ) component
that renders card items
The following example prepends Custom_ to the name of each title record:
var someData = "Custom_" + cardData["name"];
cardData["name"] = someData;
• Script that you enter in the second box runs once after rendering all cards on the page. It takes three
arguments:
• cards — A list of all cards on the page
• dataSource — The Kendo Datasource used by the card
• cardListview — The KendoListView (KendoMobileListView for mobile devices ) component
that renders card items
The following example adds a kendoSlider component to each card on the page:
if(cards){
//Iterate through all card list item
for(var i=0;i<cards.length;i++){
var card = $(cards[i]);
//Find an element where we want to render kendo slider
var tempSliderEle = card.find('.temperature');
tempSliderEle.show();
var tempSlider = tempSliderEle.data('kendoSlider');
var recUid = card.attr('data-uid');
if(recUid){
var rec = dataSource.getByUid(recUid);
var recId = rec["recordId"];
var currTempVal = rec["Set_Temperature"];
var confirmMsgEle = card.find('.confirmTempChange');
if(!tempSlider){
tempSliderEle.kendoSlider({
max:100,
min:0,
value:currTempVal,
dragHandleTitle:'Drag to change temparature',
tickPlacement:'bottomRight',
recId:recId,
currTempVal:currTempVal,
});
}
}
}
}
• Add/Edit Card Style — Lets you add custom CSS styles. By default, the styles apply to all sections on a
page. This typically works just fine. But if a page contains multiple list views, and you want different styles
for each, you can make the style specific to the page section that contains the list. To apply a style to a
specific section, use the section original ID prefixed by #rbi_S_ . You can find the section ID by opening the
page in the page designer and selecting the section. For example, to identify a section with the original ID
of ZR_XI0e5TUO5BQIVgzgeIA, use:
#rbi_S_ZR_XI0e5TUO5BQIVgzgeIA
Improved table tools in rich text editor for Text Area fields
When you create or edit a Text Area field, you can select the Use Rich Text (HTML) Editor check box to
enable the rich text editor for end users. In this release, the rich text editor has been enhanced in the following
ways:
• You can now drag the table outline to resize columns or rows.
• A new Table Wizard allows you to create table attributes while creating a new table or editing an existing
table.
You can add tabs to New, Edit, and View pages. Now, you can also select the devices on which each tab will
display. By default, all default and newly added tabs will be shown in all devices.
To select which devices you want a tab to show on, follow these steps:
1. Navigate to the page that contains the tab.
2. Open the Properties menu for the tab as shown below:
See Page tabs on page 506 for more information about page tabs.
The following graphic shows the page with the Export button:
The following graphic shows the page without the Export button:
The resulting Edit page shows the Reviews text area on a tablet:
It opens the My Security Settings screen, where users can enable or disable support access.
A new set of User Permissions is now available on the Permissions screen for roles. While they appear on
the user Permissions screen, administrators can only edit them for a role.
These permissions are all enabled by default for every role. Administrators can disable/enable each of these
permissions for a role.
User Permissions include:
• My Settings — When disabled, users with that role cannot manage the settings on their My Settings
screen. My Settings will not appear on the My Profile screen.
• My Third Party Settings — When disabled, users with that role cannot manage the settings on their My
Third Party Settings screen. My Third Party Settings will not appear on the My Profile screen.
• My Localization Settings — When disabled, users with that role cannot manage the settings on their My
Localization Settings screen. My Localization Settings will not appear on the My Profile screen.
• Recycle Bin — When disabled, users with that role cannot manage their recycle bin. Recycle Bin will not
appear in the Rollbase menu or on the My Profile screen. See New Recycle Bin option on My Profile screen
• My Security Settings — When disabled, users with that role cannot manage the settings on their My
Security Settings screen. My Security Settings will not appear on the My Profile screen.
• My Theme — When disabled, users with that role cannot set the theme on the My Preferences screen.
The My Theme area will not appear on the My Preferences screen.
• Notifications — When disabled, users with that role cannot edit Notifications on the My Preferences
screen. The Notifications area will not appear on the My Preferences screen.
• Landing Page Configuration — When disabled, users with that role cannot set the Landing Page
Configuration on the My Preferences screen. The Landing Page Configuration area will not appear on
the My Preferences screen.
If My Theme, Notifications, and Landing Page Configuration are all disabled for a role, My Preferences will
not appear on the My Profile page for users with that role.
The following screen shows the My Profile screen for a user whose role does not have permission for Recycle
Bin, My Theme, Notifications, and Landing Page Configuration:
In this release, a user can choose to fallback to the default password authentication if one of the following
applies:
• The user provides the URL parameter adminFallback. When set to true, it enables fallback behavior.
This is only available to administrative users. The following example shows the URL with this parameter:
myrbhost:8830/router/login/loginPrivate.jsp?adminFallback=true
• The tenant uses a custom authentication method and the code from that implementation throws a
FallbackException. This is not restricted to administrators; restrictions depend on the implementation
of the custom authentication method specified by the shared property CustomAuthClass. The following
code shows a custom authentication method that throws FallbackException:
The REST login method has a new URL parameter, adminFallback, that provides the same fallback
behavior for administrative users as the adminFallback URL parameter in the user interface. This parameter
defaults to false; set it to true to enable fallback behavior.
• Support for single user multi-tenant in Rollbase Private Cloud on page 101
• Java 7 and Tomcat 7 no longer supported on page 101
• Ability to store password history on page 101
• Updated third party JAR files on page 101
Note:
With Tomcat 8, you must prevent Tomcat from scanning the Rollbase JAR file by adding the following line to
the context.xml file in the conf folder of the Tomcat installation:
• rbf_setFieldValue(fieldName, value, options) — Sets the value of the specified field. For
fields that can contain values in multiple languages, use the options parameter to specify the language
in which to set the value.
See rbf_setFieldValue() on page 1093 for details.
Use the following code pattern to detect both cases. In this example, the function returns without creating a
record if the variable rbv_debugFormula is present and has a value.
function createRBRecord(rbObjectName,recordData,isAttachReq,attachData){
if(this.rbv_debugFormula !== undefined && this.rbv_debugFormula){
rbv_api.println("Skipping create record for "+ rbObjectName);
return;
}
varrecId=rbv_api.createRecord(rbObjectName,recordData);
if(isAttachReq===true && recId){
rbv_api.attach(attachData["relName"],attachData["objName1"],
'{!id}',attachData["objName2"],recId);
}
}
4.4 Miscellaneous
This topic describes the following new features and changes:
To select the option, assign a Default Value to the field and select the Assign values for all existing object
records now check box when creating the field as shown below.
Note: The setting only applies to new fields. If you update an existing field by adding a default value, existing
records will not be updated with the Default Value.
<hazelcast xsi:schemaLocation="https://hazelcast.com/schema/config
hazelcast-config-3.7.xsd"
xmlns="http://www.hazelcast.com/schema/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<network>
<port auto-increment="false">5701</port>
<reuse-address>true</reuse-address>
<join>
<multicast enabled="false"></multicast>
<tcp-ip enabled="true">
<members><!-- comma separated hostnames/ip address of the
participating cluster members --></members>
</tcp-ip>
<aws enabled="false"></aws>
</join>
</network>
<properties>
<property name="hazelcast.heartbeat.interval.seconds">5</property>
<property name="hazelcast.max.no.heartbeat.seconds">30</property>
<property name="hazelcast.master.confirmation.interval.seconds">30</property>
<property name="hazelcast.max.no.master.confirmation.seconds">120</property>
<property name="hazelcast.socket.server.bind.any">false</property>
</properties>
<listeners>
<listener>com.rb.util.cluster.hazelcast.ClusterStateListener</listener>
<listener>com.rb.util.cluster.hazelcast.NodeLifecycleListener</listener>
</listeners>
</hazelcast>
• High availability
• Enhanced support for right to left languages and multilingual user interfaces
• Support for additional languages
• RTL support in templates and reports
• Namespaces in language resource files for Rollbase Private Cloud
• Revised grid control for New UI
• Improvements to Modern - Vertical Menus UI blueprint
• Support for horizontal card container
• Enhanced card editor
• Rebranding
• Image carousels enabled by default
• New UI performance improvements
• Updated UI libraries
• Support for ADFS authentication in Rollbase Private Cloud
• Enhanced Microsoft Access import
• Support for new currency formats
• New option for Send Email workflow action supports one-click email
• Ability to set and get login permission for the Customer object in Rollbase Private Cloud using REST APIs
• PDML4 PDF converter now bundled with Rollbase Private Cloud
• The System tab of the System Console in Rollbase Private Cloud contains additional information
• New preference to turn off welcome emails
• Additional information about the latest backup file and backup history included on Backup page
• Import jobs now run on Production server
• New behavior for removeAllSessionData APIs
• New client-side API rbf_getPageTabIndexByName(name)
• New shared property EmailEncodings
• Element CustWeight from components.xml is now a shared property
• Single click login deprecated
• Rollbase Mobile App Builder deprecated
High availability
Rollbase Private Cloud 4.3 includes the first phase of support for high availability. High availability means that
the system can continue to respond to requests despite individual component failures. Besides individual
component failure, a component can stop responding to requests because its host failed, because of network
outages--or even severe latency--, or in the case of Rollbase, if the web server or the database failed.
Rollbase supports high availability with the ability to configure active and standby Rollbase components in a
cluster of machines. Only active components handle requests.
Rollbase monitors each machine on which the components are running. Each machine sends a heartbeat as
configured by properties in the shared.properties file. If the machine running active components goes
down, the components on the standby machine are promoted to be the active components. If any machine in
the cluster goes down, Rollbase sends an email to the administrator. When the machine starts up again, its
components will be the standby components.
The diagram below shows the recommended architecture for high availability in Rollbase:
In the diagram, each node is a host. This configuration requires a minimum of six nodes to run Rollbase
components, plus a minimum of two Apache nodes, Amazon Cloud Services with ELB, and whatever is required
to run a highly available database:
• Node1A and Node1B — Run the Master server, Router server, REST server, SOAP server, and Workflow
server
• Node2A and Node2B — Run the Production server. Note that if you have multiple Production servers, each
must run on a different machine.
• Node3A and Node3B — Run the Storage server and the Search server
• Apache 1 and Apache 2 — A load-balanced high availability Apache cluster. This is required for high
availability in Rollbase 4.3. See An Active/Passive Apache Web Server in a Red Hat High Availability Cluster
for more information.
• AWS — Amazon Web Services with Elastic Load Balancing. This is required for high availability in Rollbase
4.3.
For the database Rollbase uses, refer to your database vendor for their high availability features.
Note: High availability configurations are only supported in this release for Rollbase running on Tomcat. See
Using your own instance of Tomcat on page 842 for more information.
• On each node running Rollbase components, set the environment variable RB_NODE_NAME to a value
representing that node in the cluster. Each value must be unique in the cluster. If you are using a Tomcat
deployment, it is best to set environment variables using setenv.bat/sh in the tomcat/bin directory.
You will use the value of this environment variable in the components.xml file.
• Edit the components.xml file to include the following:
• Add a node attribute to each Component element that refers to the node on which it is deployed. The
value is the same as the value of the environment variable RB_NODE_NAME. For example, if
RB_NODE_NAME is set to Node1A, the corresponding Component element would look like the following:
• Add a list of Node elements representing each node in the cluster with a name attribute specifying its
node name (the value of the environment variable RB_NODE_NAME) and a role attribute specifying its
role. The value of the role attribute is arbitrary but must be the same for the two nodes that will act as
an active/standby pair – the role attribute represents the node's group in the cluster. For example, the
entries for the nodes from the above diagram would look like the following:
<Node name="Node1A" role="MASTER AND OTHERS"></Node>
<Node name="Node1B" role="MASTER AND OTHERS"></Node>
<Node name="Node2A" role="PRODUCTION"></Node>
<Node name="Node2B" role="PRODUCTION"></Node>
<Node name="Node3A" role="STORAGE AND SEARCH"></Node>
<Node name="Node3B" role="STORAGE AND SEARCH"></Node>
Enhanced support for right to left languages and multilingual user interfaces
Rollbase's multidirectional and multilingual features provide a no-code solution for building one application that
works well in multiple languages simultaneously, including languages that are written and read from right to
left (RTL) languages.
Rollbase version 4.2 included experimental support RTL text direction. Rollbase version 4.3 enhances this
feature with official support for RTL rendering. Rollbase handles RTL rendering automatically based on the
user's language. For example, if the user's language is Arabic, Hebrew, or Farsi, user interface components
and text are rendered from right to left.
Details of Rollbase's multilingual support include:
• When using the New UI, Rollbase automatically renders application pages in the expected direction based
on the user's language. This includes page components as well as text. For example, record list columns
appear in order from right to left for users with a RTL language.
• Some icons on application pages are reversed when the user's language is RTL, for example, the pencil
icon is reversed. Arrows for next, previous, and back to list are also reversed.
• Rollbase automatically renders cards in the expected direction based on the user's language. You can
override the direction at the field level using the arrow button on the toolbar. See Creating and editing cards
on page 539 for more information.
• If a field contains text in multiple languages, Rollbase automatically renders the text of each language in
the correct direction. This is useful for applications such as travel or book review sites where users might
enter their reviews in multiple languages in the same text area.
• There are a few places where LTR text is required, such as in the JavaScript and HTML editors.
• The page editor now includes multilingual features:
• You can enter text for all enabled languages for section titles and page tab titles.
• You can create multilingual versions of the same HTML component. See Translating application
component names and labels on page 821 for details.
• Rollbase renders charts LTR, but chart labels can be provided in RTL languages.
• The Rollbase calendar is localized for RTL languages. For example, in Arabic, Saturday is first day of week
and is the rightmost day.
• The application setting Right to Left Text Direction, when selected, forces RTL text rendering for all
application pages, regardless of the user's language.
• Templates and most reports render text as LTR regardless of the user's language. However, you can make
some minor changes to override this default. See RTL support in templates and reports for details.
• Email encoding needs to be set to UTF-8 for RTL languages. This is the default for new customers only;
existing customers will have to change that setting on the My Settings page.
• The Classic UI does not support RTL rendering. This includes setup pages, portal pages, and the page
editor.
• . Setup pages are translated in most languages, but because they do not support RTL, they are not translated
to Arabic. See Language support on page 815 for details.
For more information about language support, RTL languages, and translating applications, see Language
support on page 815
• The bdi element — This element isolates a part of text that might be formatted in a different direction from
other text outside it. It is helpful when the user-generated content has an unknown direction. For example,
if a parent element sets the dir attribute to rtl, and user-generated text could be in Spanish, using the
bdi element ensures that the text is rendered in the appropriate direction.
For Microsoft Word document templates (DOC/DOCX), the default alignment is left. You can use the rich text
editor to keep headings and other titles right aligned.
For XLS, XLSX, RTF, TXT, and XML document templates, you can align the text as required for the language.
Mail templates
For more information about language support, see Language support on page 815.
Note: If you have existing language resource files, please contact Progress. There is a utility available to
upgrade them to use namespaces.
See Adding support for other languages in Private Cloud on page 817 for more information.
The following screen shows the revised grid control. The user has added three devices and Rollbase will save
all three at the same time:
gridControlComponent.addEventListener(rb.newui.util.customEvents.rbs_gridControlRowCreate,
function ()
{ alert('Row Created'); }
);
When selected, if a user edits a date/time field, the native control appears to select it. For example, the
following screen shows the native date control on an iPad:
• The help menu now includes more documentation and support-related links:
• The user profile menu now includes the user name and Switch Tenant menu items:
The following screen shows records displayed in a horizontal card container on a tablet:
A new card tool, Add Text Limit, allows you to limit the amount of text displayed for text fields. You can limit
the text by specifying a line count or by specifying a character limit. The screen below shows the Add Text
Limit dialog:
A new card tool, Add Card Dimension, allows you to set the dimensions of a card to be displayed in a horizontal
card container. This tool is not available when editing a card to be displayed in a vertical card container. You
can set the card width for desktop and tablet devices, the card height, and CSS styles to apply to the card
container. The screen below shows the Add Card Dimension dialog:
Rebranding
Progress logos have been updated on various screens in version 4.3 to reflect the new branding. The following
screen shows an application page with the new logo:
Updated UI libraries
The following libraries have been updated for version 4.3:
New option for Send Email workflow action supports one-click email
A new option for the Send Email workflow action, Perform action without opening a new page, allows users
to send an email immediately by clicking the action without opening a new page. See Send Email action on
page 420 for more information.
Ability to set and get login permission for the Customer object in Rollbase Private
Cloud using REST APIs
Master administrators can now set Login permission on the Customer object definition using REST APIs. The
following APIs are affected:
• setPermissionsByRole, setPermissionsByUser — The permissions URL parameter now allows
login as an option when entityType is object and entityId evaluates to Customer.
• getPermissionsByRole, getPermissionsByUser — The response will include the Login permission
for the Customer object if it is set for the specified role or user.
See the following for details:
• setPermissionsByRole on page 1277
• setPermissionsByUser on page 1278
• getPermissionsByRole on page 1246
• getPermissionsByUser on page 1247
The System tab of the System Console in Rollbase Private Cloud includes additional
information
The System tab of the System Console now includes information about each host running a server, including
its hostname and IP address, processor, operating system, Java version, RAM, and memory consumption. It
also includes a shared.properties tab to view the values of all shared properties. See Monitoring system
components on page 857 for more information.
Additional information about the latest backup file and backup history included on
Backup page
This release includes new information on the Backup page, including:
• A Directories Included column for the latest backup
• A Backup Activity Trail table that displays information about the latest backup and previous backups,
including the Backup File, Files Included, Notes, Status, and Start Date. Earlier versions required you
to click View Backup Log to find any information about previous backups.
The screen below shows the Backup page for version 4.2:
The following screen shows the Backup page for version 4.3:
• Synchronize your Rollbase calendar to your Exchange calendar (this is a one-way synch from Rollbase
to Exchange).
Use of Microsoft Exchange for your email and/or calendar must be enabled at the tenant level. It is enabled
by default. See Third Party Settings page on page 793 for instructions on configuring user-level Microsoft
Exchange settings.
• By default, Rollbase uses its own email server when sending administrative email messages from Rollbase.
You can configure a tenant to use an Exchange email account instead. See Email server settings for
instructions on configuring Rollbase to send administrative emails from an Exchange account.
• At the instance level, you can set shared properties to send administrative emails from an Exchange account.
Set the following shared properties to use Exchange for administrative emails at the instance level:
1. MailHost=Exchange
2. MailUser= username@companyname.com
3. MailPassword=myPassword
See shared.properties on page 926 for more information.
You can also configure Rollbase to send administrative emails from an Exchange account during a Rollbase
Private Cloud installation.
The general steps for creating external objects using this feature are:
1. From an application menu, click the plus sign.
2. From the What do you want to create? dialog, select a new Object (with Tab) from External Metadata.
3. For Import From, select Remote Database.
4. On the Import from Remote Database page, select the database type and fill in the connection details:
5. On the Create Object page, select a table from the schema and define a singular and plural name.
6. On the Create Fields page, map table columns to fields in Rollbase objects.
After this step, you have successfully created an external Rollbase object from an external database schema.
You can configure whether session expiration notifications are sent at both the tenant and the user level. By
default, the user settings is the same as the tenant setting. However, after you change the setting at the user
level, that setting takes precedence for you; if an administrator changes the tenant setting, it has no effect on
the user setting.
• Tenant level — From Setup Home, click Preferences under Administration Setup. Notify before session
expiration is selected by default. Deselect this to turn off notifications at the tenant level.
• User level — From the user profile menu, select My Profile and then select My Preferences. Notify before
session expiration is selected by default. Deselect this to turn off notifications at the user level.
On Rollbase Private Cloud, the default session times are configurable for each security level by modifying the
following properties in the configuration file securityLevel.xml:
• inactiveSessionExpireMins
• loginSessionExpireMins
See securityLevel.xml on page 924 for details.
The PageContext on page 1156 method hasSessionExpired() returns true if the user session has expired
and returns false if the user session has not expired.
Note: This behavior is only available for users who are using the New UI. It is not available on setup and
administrative pages.
Note: In the logout.jsp file, the code that displays HTML content after a logout was removed in Rollbase
version 4.0.4.
• From the Fields section of the object definition page, click Copy in the field's row:
The Profile Photo: Copy page opens. From the Target drop-down, select User Profile Pic:
The images from the Source field are copied into the Target field for all User records, up to the maximum
number defined by the shared property MaxReqsInQuery (Configurable in Rollbase Private Cloud; defaults
to 20,000).
For general information about API authentication, see API authentication on page 897.
New parameter useLegacyDateFormat for client-side query APIs that return dates
A new, optional, Boolean parameter, useLegacyDateFormat, is available in client-side query APIs that return
dates in JSON format. This parameter specifies whether date values returned by the API are returned as new
Date objects or as Strings. If this parameter is true, or if it is not passed, date values are returned as new
Date objects. If this parameter is false, date values are returned as Strings. The APIs where you can use
this parameter are:
• rbf_selectQuery() on page 1084
• rbf_selectQuery2() on page 1085
• rbf_selectValue() on page 1087
• Right to Left Text Direction — If this box is checked, Rollbase will use right-to-left text direction. This is
intended for portals that use a language written from right to left, such as Arabic or Hebrew. This is an
experimental feature in this release.
The screen below shows the new options:
Setting default values from New page's onload script no longer marks the page as
dirty
Prior to this release, setting field values from a New page's onload script incorrectly marked the page as dirty.
In Rollbase 4.2, this no longer marks the page as dirty. Note that updating fields from a user action that executes
a script, such as clicking a button, does mark the page as dirty.
'version':'1','packages':['corechart','table']}]}" ></script>
<script type="text/javascript">
if (window.google.visualization)
{
drawChart();
}
else
{
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
}
function drawChart() {
//draw chart on google chart api load…
}
New bulk action Sync Subscribers in Rollbase Private Cloud master tenant
A new bulk action, Sync Subscribers, is now available on master tenants for Rollbase Private Cloud. This
action syncs subscriber records with user records. For example, it is possible for a user record to be deleted
but that user still appears in the list of subscribers.
When you execute this action:
• The message Sync subscribers process has begun appears on the page. The process runs in a
background thread.
• Existing subscriber records are updated with correct user data.
• Missing subscriber records are created using data from the related user.
• Any orphan subscriber (a subscriber with no related user record) is deleted.
The action writes its activities to the log file subscriberSync.log. To view the log, click System > Master
Zone and click Master Server Logs.
You can execute this action from the System Console application, either from the Customer List section of
the Customers tab or from the Customer View page:
OpenEdge SPA authentication on Private Cloud now supports security questions for
login
When configuring OpenEdge SPA authentication on Rollbase Private Cloud, you can now configure security
questions for users to answer when they log in. See OpenEdge authentication details on page 886 for information
about configuring OpenEdge SPA authentication. See Security questions for authentication on page 898 for
general information about security questions. See Configuring security questions on page 898 for details about
configuring security questions.
Note: Going back to the Classic UI will not cause the localization settings to be deleted. If you require deletion
of the localization settings, you will have to do it manually on the Localization Settings page.
• UI blueprints
• Custom icons for tabs in Modern - Vertical Menus blueprint
• Ability to place labels above field values
• Live Preview
• Cards and card containers
• The card editor
UI blueprints (experimental)
A new application-level setting allows you to set how the application renders in the New UI. This is called the
UI blueprint for the application. At a high level, a UI blueprint is how the application navigation and various
menus inside the application are rendered. The page content does not change across blueprints. For example,
the existing blueprint, now called Traditional, has a sidebar (collapsed by default), a header, which includes
the application switcher and the application tabs and menus, and a footer:
The new blueprint, called Modern - Vertical Menus, has a sidebar that includes the application tabs and menus
drawn vertically, a header that includes the application switcher, and no footer. The sidebar has two states:
Expanded and collapsed (see screens below). This blueprint is adaptive; it renders differently based on the
device.
The following screen shows the Modern - Vertical Menus blueprint with the application switcher selected.
The following screens show the Modern - Vertical Menus blueprint on a desktop in its two states. Open the
sidebar by clicking the hamburger menu at the top left of the screen. Expand or collapse the sidebar by clicking
the hamburger menu.
The following screen shows the Modern - Vertical Menus blueprint on a smart phone.
You can customize the tab icons for the Modern - Vertical Menus UI blueprint. See Custom icons for tabs in
Modern - Vertical Menus blueprint for more information.
To set the UI blueprint for an application:
1. Navigate to the Setup Application page for the application.
2. Click Edit.
3. In the New UI Specific Settings area, select the UI blueprint from the UI Blueprint drop-down menu:
4. Click Save.
You can also set the UI blueprint for an application using Live Preview.
The UI blueprint for each application appears in the application list on the applications setup page:
The following screen shows an expanded sidebar where the Devices tab uses a font icon:
The following screen shows a collapsed sidebar where the Devices tab uses a custom icon:
The following screen shows an application page with labels above field values on a smart phone:
Live Preview
Live Preview is a tool where you, as an administrator, can preview changes to various aspects of an application
on the fly without disturbing any users. The full live application is available to change and review. This helps
to improve your productivity when designing the application's user interface.
To open Live Preview, do one of the following:
• If you are using the Traditional blueprint, click Live Preview from the Rollbase menu:
• If you are using the Modern - Vertical Menus blueprint, expand Administration in the sidebar and click
Live Preview:
When viewing a record list page on a mobile device, it is rendered using a card container by default (see Cards
and card containers). To switch the view to the normal record list view, click the Switch to Grid button:
To switch back to the card container, click the Switch to Card button:
You can create your own cards using the card editor.
4. Select a pattern for the card. You can select an existing design in the Design tab or you can select an
existing layout or a blank card canvas from the Layout tab:
5. Select the device for which you want to create the card. you can select smart phone, tablet in portrait mode,
or tablet in landscape mode.
6. If you selected a design, click Next and map components in the card to fields. If you selected a layout, click
+ Create a New Card and edit the card in the card editor
7. Type a name for the card in the Card Name field and click Save to save the card.
Editing a card
To edit an existing card, click the edit icon next to the card:
A view component (list view) now includes card-related properties you can set in the page editor:
The properties Select Tablet Card and Select Smart Phone Card let you select the card to user for tablets
and smart phones. Click Create to create a new card. Click Edit to edit the selected card.
Mapping components to fields
When you start a card from a design, you need to map the components in the card to fields in the object. The
Image Left design, selected in the screen below, contains components for an image and a star rating, which
renders stars for a numeric field. You can edit the star rating by changing the color, size, and icon used.
In this example, Rollbase automatically populated the image component with the Photo field from a Room
object because it is the only Image field in the object definition. If there were multiple Image fields in the object
definition, you could choose from among those fields in the drop-down list. Rollbase also automatically populated
the rating component with the Rating field. Again, if there were multiple Integer fields in the object, you would
be able to select any of them from the drop-down list. For each component, either select a field or select Ignore
field.
When you are finished mapping fields, click + Create a New Card. The card opens in the card editor. You can
either save the card or you can continue to edit the card as described in Editing a card in the card editor
Editing a card in the card editor
When you start a card from a layout or from a blank screen, or after you have mapped the fields in the card,
the card editor opens. The card editor is an HTML editor that includes Card Tools for adding components and
other features to the card. In the card editor, you have the full power of HTML, CSS, and JavaScript hash
templates at your disposal to create very good looking and very powerful cards.
The screen below shows the card editor for a new card created from the 2 Column layout. When you create
a card with this layout, the card is pre-populated with an Object Name Label, an Object Name value, and an
object view link that drills down to the View page for a record. You keep, edit, or delete these as desired.
• Add Percentage Bar — Lets you add a percentage bar to the card. A percentage bar can represent an
Integer, Decimal, Currency, or Percentage field with a range of values between 0 and 100, or a Formula or
Expression field that returns an Integer or Decimal value between 0 and 100. You can select colors for the
bar, apply CSS styles to the bar container, and specify whether to display the percentage value and where
to display it. Preview Percentage Bar shows you what the resulting component will look like.
• Add Color Side Bar — Lets you add a conditional color side bar to the card based on a Boolean value. A
color side bar can represent a Formula or Expression field with a Boolean return type or a Checkbox field.
You can choose the color for the bar when value is true or false and you can choose the bar size. Preview
Color Side Bar shows you what the resulting component will look like.
At any time while editing a card, you can click the view HTML button to view the HTML source:
You can edit the HTML source in this editor or you can copy the HTML source and edit it in a different HTML
editor.
When you insert a field using the card editor, Rollbase generates the following HTML fragment (value or label):
<span data-column-id=”fieldId” data-column-type=”value”>
<span data-column-id=”fieldId” data-column-type=”label”></span>
For example, the following HTML fragment was generated for a label and value for a City field. Note that the
data-column-id attribute uses the integration name of the City field, which is city.
You can use the span element to simulate what the card editor does, especially if you want to work in your
own HTML editor.
Note: If you are planning to work in your own HTML editor, you can obtain the integration names for the fields
you want to use by creating a card from a blank canvas, adding a field label or value for each field to the card,
and viewing the HTML source. The source will contain the integration name of each field in the data-column-id
attribute. Copy the source and paste it into your HTML editor to keep the integration names available.
Using vertical responsive design on a medium device, the columns display as shown below:
Using vertical responsive design on a small device, the columns display as shown below:
Using horizontal responsive design, the columns display as shown below on a large device:
Using horizontal responsive design on a medium device, the columns display as shown below:
Using horizontal responsive design on a small device, the columns display as shown below:
When using vertical responsive design, the recommended setting for Navigation Order (a page property) is
Top to bottom, then left to right. Otherwise tab navigation through fields will not behave as the user expects
on smaller screens. For horizontal responsive design, the recommended setting for Navigation Order is Left
to right, then top to bottom to achieve the expected behavior.
See Creating and editing views on page 561 for more information about creating and editing views.
Image carousel
When an object definition contains multiple image fields, you can configure Rollbase to group the images into
an image carousel. The carousel is rendered where the first image field is located on the page. The width of
the carousel is based on the width of the cell in which the carousel is placed. By default, the height of the
carousel is based on the first image's proportions.
To control the carousel's space consumption, you can specify a maximum width for the carousel in the page
editor by setting the Max Width property (in pixels) for the first image field. A carousel is responsive to the cell
in which it is rendered on the page, keeping the proportions of the image. It is responsive even if the images
are not responsive. See Responsive images now enabled by default for information about configuring image
responsiveness and maximum width.
The following screen shows an image carousel on a desktop. You can use the arrows to browse through the
images.
The following screen shows the same image carousel on a smart phone. On all mobile devices, you can swipe
left or right to browse through the images or you can use the arrows.
Image carousels are disabled by default to remain compatible with existing page layouts. To enable image
carousels for an application, set the property
rb.newui.options.useCarouselWhenMultipleImgFieldsInObject to true in a custom header
script or a custom sidebar script.
Responsive charts
Charts are now responsive and are auto-scaled to fit the available space. Auto-scaling is done only if the
available space is less than the configured chart dimensions. Otherwise, the chart will always be rendered with
the configured dimensions. To enable responsive charts, the chart property Fit to Container Size must be
selected (selected by default). See Creating charts on page 471 for more information.
Support for selecting multiple records on Selector pages for lookup fields
When a page includes a lookup field for an n-to-many relationship, the Selector page now supports selecting
multiple records. The page contains a check box for each record that is not already attached to the lookup field.
This filtering remains in effect even if you change the view or search for records. When at least one record is
selected, an Attach Selected button is enabled on the page.
When a lookup field is for an n-to-one relationship, the selector page does not contain check boxes and works
as before.
Selecting multiple records on Selector pages is only available when using the New UI.
Note: When you select a lookup field from a grid control, the resulting Selector page supports selecting multiple
records, but does not filter out records that are already attached to the lookup field.
The following screen shows the new interface for selecting multiple records:
The screen below shows where to set the Render Mode property in the page editor.
All Original IDs for metadata and data will be GUIDs stored as Base64 encoded Strings. This affects the
following areas:
Note: There will be absolutely no effect on any existing application developed on earlier versions of Rollbase,
as the platform is designed to support the existing integer Original IDs. There will be no change to metadata
and data stored in the database and no representational changes on the UI after a v4.2 upgrade. Your apps
will continue to run as they were without any impact. However, you should update the database schema using
the update script, following the procedure described in Updating the database schema.
• The CSS Stylesheet for a custom report can be a hosted file — See Creating custom reports on page 455
for details.
• Loop sections now use standard filtering — See Loop section on page 464 for details.
• The token Current Record (CURR_REC) is now Loop Record (LOOP_REC) — See Using tokens in custom
reports on page 465 for details.
• Improved user interface for generating tokens — See Using tokens in custom reports on page 465 for details.
See OpenEdge authentication details on page 886 for details about setting the expiration policy and custom
password guidelines. See setAuthentication on page 1269 and getAuthentication on page 1233 for details about
the above REST methods.
The following screen shows a Records List page with this property enabled:
The following screen shows a record list page that where columns are not sized as an HTML table:
The following screen shows the same page where columns are sized as an HTML table. Note that more columns
fit on the screen:
Note: If the user's role has a configured landing page, that landing page takes precedence. See Role-based
landing pages on page 189 for more information.
7. Click Save. When a user with that role logs in, the configured application will open with the configured tab
selected.
Note: This feature is only for File Upload fields that are publicly available. Configure a File Upload field to be
publicly available by selecting Make files publicly available for that field.
• Croatian Kuna
• Georgian Lari
• Romanian Leu
• Serbian Dinar
See Currency formats on page 807 for more information about currency formats.
The login REST method now takes some parameters as HTTP headers
For the login REST method, the parameters loginName, password, and custId can now be passed in HTTP
headers instead of as URL parameters. Passing these parameters as URL parameters is deprecated. You
should change existing code to pass these parameters as HTTP headers. The output parameter is still a
URL parameter. See login on page 1259 for more information.
The following screen shows the Page Size options for a document template:
The following screen shows a condition formula. In this example, the createdBy field (whose value is a user
link), must equal the current user to grant edit permission on the Comments field.
The REST method setPermissionsByRole now includes the following parameters for conditional permissions:
• viewConditionScript — The condition script for view permission as a base64-encoded string. To grant
conditional view permission, specify view in the permissions parameter in addition to this parameter.
• editConditionScript — The condition script for edit permission as a base64-encoded string. To grant
conditional edit permission, specify edit in the permissions parameter in addition to this parameter.
See setPermissionsByRole on page 1277 for details.
For more information about field-level permissions, see Setting field-level permissions on page 737
Note:
If the post install script's purpose is to create a tenant with no administrator, you can access the automatically
created user with the Administrator role and change the role to a custom role with some administrative
permissions. For example:
var objId = rbv_api.selectNumber
("SELECT id FROM USER where role =90"); // Administrator role's original ID is always
90
var role = rbv_api.stringToJson(rbv_api.getRoleById("868114")); // Custom role with
admin permissions
rbv_api.setFieldValue("USER",objId,"role",role.code); // Set user's role to custom role
5. Click Save.
• rbf_getPicklistCode() and rbf_getPicklistCodes() client-side APIs now work with other field types on page
199
• New getPicklistCode() method on FieldContext object on page 199
• New parameter to rbf_showOrHideField() on page 199
• JavaScript files available in uncompressed format on page 199
• Performance improvements when using OpenEdge Data Objects on page 200
• New REST methods on page 200
• New shared properties for password authentication on Rollbase Private Cloud master tenant on page 200
• Documentation updates for localization settings on page 201
Filtering features
This release includes two new filtering features:
• The ability to hide fields from filter options — When filtering the view on a record list page, users can select
fields on which to filter from a drop-down list. You can now set an advanced property, Allow filtering by
this field in List Views, on a field. When this property is unchecked, the field will not appear in the drop-down
list of fields.
• By default, filter options for a record list include advanced filter options, which include the ability to choose
between Standard, Expression, and Formula filters, as well as to choose whether All (AND) or Any (OR)
of the filter conditions are met. You can now hide these advanced filter options for record list components
in the page editor — A new property on this component, Hide Advanced Filters, controls whether these
options appear on the page:
When this property is checked, the advanced filter options highlighted below will not appear on the page:
Note: This feature uses a built-in browser feature that is not supported on Safari for the iPad.
If you customize the UI with JavaScript, it will be helpful to review the contents of these files. You can find these
files at the following locations:
• Rollbase Private Cloud: http://localhost:8830/prod1/js/newui/ — For example, to view
Options.js when using a tenant running the PAS server, you would use the URL
http://localhost:8830/prod1/js/newui/Options.js.
• Hosted Rollbase: https://www.rollbase.com/prod1/js/newui/ — For example, to view
Options.js, you would use the URL https://www.rollbase.com/prod1/js/newui/Options.js.
New shared properties for password authentication on Rollbase Private Cloud master
tenant
Two new shared properties for configuring password authentication on Rollbase Private Cloud master tenants
are now available:
• SecurityLevel — The security level, where 1 = low, 2 = medium, and 3 = high. See Setting and changing
security levels on page 877 for details about the different security levels.
• ExpirationPolicy — The number of days after which a user's password expires. A value of 0 means
no expiration; otherwise should have a value of at least 30.
These properties are automatically updated in the shared.properties file when an administrator changes
them on the Authentication: Password setup page. When an administrator changes these properties in the
shared.properties file, they are updated in Rollbase's database and the Authentication: Password setup
page reflects the new values after the server is restarted.
<script id="executeBeforeUIStarts">
if(rbf_isNewUI()){
rb.newui.options.applicationPage.ajaxNavigation = true;
rb.newui.options.objectViewPage.recordNavigationAjax = false;
rb.newui.options.tabMenuLink.ajaxNavigation =false;
}
</script>
• mobil-app.png — For mobile browsers, the icon next to other applications (all applications on the
Applications Setup > Applications page)
• Customizing JSP files — References to obfuscated classes have been removed from the following JSP
files, making the migration of customizations easier. Now, when there are no changes to the original JSP
file in a new release, you can replace it with your customized file from the previous release. Any changes
to these files will be documented for each subsequent release, so you will know whether the files you have
customized need to be changed. All directories are relative to
<rollbase_install_dir>\Pas_Instance\webapps (if using PAS) or
<tomcat-install-dir>\webapps (if using Tomcat).
• router\login\loginPrivate.jsp — The custom login page
• router\login\logout.jsp — The custom logout page
• router\login\forgotPassword.jsp and router\login\forgotPassword2.jsp - The custom
forgot password page
• router\login\mobile.jsp — The custom mobile login page
• master(or prod1)\components\logout.jsp — The custom logout animation page. Note that
the code that displays HTML content after a logout has been removed in Rollbase 4.0.4.
• master(or prod1)\components\loginExpired.jsp — The custom login expired page
Application and object definition setup pages that list tabs and buttons also show the display options for each.
For example, the screen below shows the display options for the tabs in an application in the Show In column.
In this example, the Reservations tab is not displayed on smartphones and the Chart tab is not displayed on
tablets or smartphones.
Filtering improvements
Two new features improve filtering in applications:
• Ability to filter list of related records — On record view pages that display a list of related records, users can
now filter the list of related records. The screen below shows the new Filter button:
When both properties are false, the entire row is hidden to save vertical space:
Note: This code must appear in the custom sidebar. Adding it to the custom header has no effect.
Fields with input masks enforce mask during entry on new and edit pages
Prior to this release, input masks on Text and Phone Number fields were applied after the user entered a value
(when the field lost focus). Now, on new and edit pages, the input mask is enforced while typing a value into
the field. For example, for the Phone Number field below, the format of the input mask appears in the field
and the user is not allowed to enter incorrectly formatted data:
New shared property provides ability to use custom Java objects in formulas (Private
Cloud)
In Rollbase Private Cloud, you can use custom Java objects in formulas. To do so, you must give Rollbase
permission to use the class(es) by specifying the CustomClassFilter property in the shared.properties
file. The value of this property should be a RegEx expression that matches the fully qualified name of the
class(es) you want to allow. See shared.properties on page 926 for more information about shared properties.
Customizing menus
You can customize how the menus in the application header are rendered. The following options are available
in the javascript object:
rb.newui.options.customizeMenuDisplay:
• rb.newui.options.customizeMenuDisplay.customOverflowForMenus.overflowMenusPerColumn
— Sets the number of menu items per column in the overflow menu. Defaults to 10.
• rb.newui.options.customizeMenuDisplay.customContainerForChildMenus.enableIfChildMenusGreaterThan
— When a tab has many child menus, you can specify at what point (in terms of the number of child menus)
the child menus should be split into multiple columns instead of in a single column. Defaults to 10.
• rb.newui.options.customizeMenuDisplay.customContainerForChildMenus.childMenusPerColumn
— Sets how many child menu items are displayed under each column. Defaults to 10.
You can also customize the page menu to set the number of menu actions to be displayed in each column
using rb.newui.options.customizeMenuDisplay.pageTitleMenus.childMenusPerColumn.
Defaults to 10.
User changes to record list page are saved on a per view/per device basis
When a user makes changes to the record list on a page, such as swapping columns, hiding columns, or
resizing columns, those changes are now saved per view and per device. For example, if a user makes these
changes on their smartphone, the changes will not appear on their desktop.
Note: This capability is only for the New UI; administrators must enable the New UI for all users
Additional theme
An additional built-in theme, Nova, is available in this release:
See Working with themes on page 578 for more information about themes.
In addition, you can enable more verbose logging at the time of page creation in browser client. To enable,
add following script component to an application's custom sidebar or header:
<script id="executeBeforeUIStarts">
(function () {
try {
//execute only for new ui...
if (!rbf_isNewUI()) {
throw 'This Script is written specific to New UI Context';
}
rb.newui.page.PageContext.showPageConstructionLog(true);
}
catch (err) {
if (console) {
console.log(err);
}
}
}) ();
</script>
Creating - HeaderFooter
Completed - HeaderFooter [ Time: 139 ms ]
Creating - Page - 733968
Creating - Section - 734015 - All Message2s
Creating - Cell - 734016
Completed - Cell - 734016 [ Time: 300 ms ]
Completed - Section - 734015 - All Message2s [ Time: 122 ms ]
Creating - Section - 759955 - New Section
Creating - Cell - 759956
Error appending inline script: TypeError: Cannot read property 'util' of undefined
Completed - Cell - 759956 [ Time: 1 ms ]
Completed - Section - 759955 - New Section [ Time: 2 ms ]
Completed - Page - 733968 [ Time: 145 ms ]
Updated libraries
The following libraries have been updated:
Performance improvements
Depending on the page type and its content, overall rendering performance of pages has been improved by
10% to 20%.
• @p1 — When creating a User record, the password for the new user. This parameter is optional.
• @resetPassword — When creating a User record, sets a temporary password for the user. This parameter
is optional. This applies in cases where the user is already present in an external system and Rollbase can
set the password, for example, when the user already has a Progress ID (Hosted Rollbase) or is already a
user in an OpenEdge SPA configuration where set password is configured.
See createRecord on page 1228 for details.
See Object attributes on page 243 for more information about the Document attribute. See Linking Rollbase
external objects to OpenEdge data on page 662 for more information about creating Rollbase external objects
from OpenEdge data. See Enabling object attributes for an OpenEdge Data Object on page 676 for more
information about enabling object attributes from the OpenEdge side.
• Improvements in record view and record edit page toolbars on page 222
• Default font size and customization on page 223
• Page title customization on page 224
• Rollbase calendar improvements on page 224
• Mouse rollover opens actions menu on page 225
• Settings changed to Setup Home in Rollbase menu on page 225
• Workflow actions changed to picklist on page 226
• New placement of action controls for grids, charts, related records components, and reports on page 226
• Ability to remove header and footer from printed records on page 226
• Private Cloud shared.properties additions on page 226
• New Object Script API for cloning records on page 227
The following screen shows the same toolbar for a narrower screen, with some buttons in the actions menu:
Other page elements, such as section headers and titles, are changed proportionally to the default font. For
example, if a title was rendered at 28px for a default font size of 14px, it would be rendered at 20px for a default
font size of 10px.
For information about adding code to custom headers and sidebars, see Header and footer on page 283 and
Custom sidebar on page 283.
For information about adding code to custom headers and sidebars, see Header and footer on page 283 and
Custom sidebar on page 283.
• The Show and Assigned To labels to the side of the drop downs menus have been removed; now View
and View Items Assigned To are within the drop-down menus:
New placement of action controls for grids, charts, related records components, and
reports
Controls for grids, charts, related records components, and reports have been reorganized for easier access
by users. See the following topics for details:
• Using a grid control on page 515
• Using charts on page 474
• Related records components on page 323
• Running reports on page 468
Server-side and AJAX query APIs now work with OpenEdge Service objects
The following APIs are now supported to work with OpenEdge Service objects:
• rbv_api.selectNumber() on page 999
• rbv_api.selectQuery() on page 995
• rbv_api.selectQuery2() on page 997
• rbv_api.selectValue() on page 998
• rbf_selectNumber() on page 1083
• rbf_selectQuery() on page 1084
• rbf_selectQuery2() on page 1085
• rbf_selectValue() on page 1087
• New options for record list pages include end-user column selection that persists over multiple logins (see
Column data options on page 578), enhanced inline editing (see Inline editing on page 572), and the ability
to set the row height in the page editor.
• The Rollbase calendar, based on the Kendo UI scheduler widget, is responsive to different browser window
sizes. See The Rollbase calendar on page 260 for more information.
Benefits of using the new UI include the following:
• The responsive UI automatically adjusts itself for different screen widths and allows you to build applications
with a modern look that work well on a variety of devices. The responsive UI leverages the Bootstrap version
3 framework.
• 14 built-in themes, including two sets of complementary light and dark themes, allow greater flexibility in
the appearance of an application. See Working with themes on page 578 for more information.
• The new UI leverages Kendo UI widgets for controls and validation. Application developers who want to
customize the user interface for an application can use the full Kendo Professional Edition library. See the
Kendo UI documentation for more information.
• For existing customers, administrators can switch between the old UI (classic UI) and the new UI for selected
users to help with the transition to the new UI. See Capability to switch between the new UI and classic UI
for details.
• The new UI uses the Font Awesome toolkit, which provides scalable vector icons that you can customize
for size, color, and drop shadow, and for anything you can do using CSS. See
http://fortawesome.github.io/Font-Awesome for more information.
• More client-side processing in the UI results in fewer page reloads and better performance.
Capability to switch between the new UI and classic UI
Existing customers are configured to use the classic UI by default. Administrators can switch between the
classic UI and the new UI for selected users or for all users to help with the transition to the new UI. New
customers can only use the new UI.
On Rollbase Private Cloud, administrators on the master tenant can control whether the above options are
available for newly created tenants via the property AllowClassicUIForNewTenants in the
shared.properties file. This property's default value is false. This property has the following effect:
• When false, all newly created tenants will be on the New UI and will not have an option change to the Classic
UI.
• When true, all newly created tenants will be on the New UI and will be able to use the options described
above to switch between the New UI and the Classic UI.
Private Cloud master tenant administrators can choose between the Marketplace and the legacy Application
Directory as the application distribution mechanism for their users. However, Progress recommends the new
Marketplace because it offers more features and a better user experience. The MarketplaceURL property in
the shared.properties file controls whether Marketplace or Application Directory is enabled for all users
of a Private Cloud instance (see shared.properties on page 926). The administrator of a Private Cloud master
tenant can also rebrand Marketplace by adding a custom logo and configuring Marketplace settings. See
Rebranding Marketplace for details.
The new tutorial guides you through creating an application that allows you to practice using many features of
Rollbase, including:
• Setting up user accounts
• Using the Quick Create wizard
• Editing application pages
• Defining triggers
• Creating and editing views
• Customizing the user interface
• Configuring access control
You can access the tutorial from the Fast Track page or at
http://documentation.progress.com/output/rb/tutorial-qs/.
Documentation enhancements
Because the look of all application pages and procedures for some tasks differ between the new UI and the
classic UI, two documentation sets are available. The Help and Learn More links in Rollbase open the online
documentation set for the UI you are using. Rollbase Private Cloud will ship with the PDF version of the New
UI documentation. There will be no PDF version of the Classic UI documentation.
The two documentation sets have a different look and feel:
• Documentation for the classic UI:
However, even if you are using the classic UI, Progress recommends that you reference documentation on
the new UI for these reasons:
• The usability and completeness of the new UI documentation has been greatly improved.
• By consulting the new UI documentation, you can get an idea of what your application might look like with
the new UI and see any differences in behavior to understand what you might need to change to migrate
an application to the new UI.
As mentioned previously, when you use Rollbase links to access the documentation, the documentation set
appropriate for your UI will open. You can also access a specific documentation set in the following ways:
• By direct link:
• New UI documentation: http://documentation.progress.com/output/rb/doc
• Classic UI documentation: http://documentation.progress.com/output/rb-classic/
• When in the classic UI documentation, click the link under the printer, View documentation for the new
Rollbase UI
Note: When upgrading to 4.4, be sure to remove the outdated third-party JAR files that were replaced. See
the description in Step 9.
Due to a change in search functionality for version 3.0.5, Private Cloud users upgrading from a release prior
to 3.0.5 must re-index all tenants. Re-indexing must be performed on the master server by an administrative
user.
The following steps describe how to upgrade Rollbase Private Cloud from a prior release to the latest release:
1. Make a copy of your existing Rollbase config and storage folder.
2. Stop PAS or Tomcat.
3. If you have any custom files, such as FusionCharts, in the webapps folder of your Tomcat instance, copy
these to a folder for later use.
4. Stop the database.
5. If you installed using the Rollbase installer, run uninstall. You can launch it from the Rollbase\uninstall
folder. If you were using the OpenEdge database, uninstall will not delete the OpenEdge working directory,
which contains your data.
6. If you used your own Tomcat instance, delete the following folders from the webapps folder: master,
router, prod1, search, storage, rest, webapi, rss, workflow
7. Install Rollbase 4.X using the installer or zip files:
a. If you use the installer, consult the configuration files you saved for host, database, and email configuration
values. If you were using the OpenEdge Database, point the installer at the working directory that contains
your data.
b. If you use the zip files to install, configure Rollbase as follows:
a. From the config folder, open the shared.properties and databases.xml files.
b. Use the files you copied as references and make any necessary updates. At a minimum, in the
shared.properties file, enter the email information: host name and port number, and the email
address and password for the main administrative user.
8. If you saved any custom files from the webapps folder as described in step 3, copy them into the new
installation.
9. When upgrading from a previous version to 4.4, remove the following JAR files:
• aws-java-sdk-core-1.9.6.jar
• aws-java-sdk-kms-1.9.6.jar
• aws-java-sdk-s3-1.9.6.jar
• fontbox-2.0.0-RC3.jar
• httpclient-4.5.jar
• httpmime-4.3.jar
• jackson-annotations-2.3.0.jar
• jackson-core-2.3.2.jar
• jackson-databind-2.3.2.jar
• oshi-core-1.5.2.jar
• pdfbox-2.0.0-RC3.jar
• ss_css2.jar
10. In the Rollbase\sql folder, find the appropriate script(s) to update your database. Note: If you installed
the Progress Application Server for Rollbase, these files are in the Pas_Instance\Rollbase\sql folder.
If you are upgrading from a version other than the previous release, you will need to use multiple scripts,
starting with the next version higher than your existing installation and continuing until you reach the current
script.
12. If you are using a database other than the OpenEdge instance included with the installer, start your database.
If you are using the OpenEdge database that comes with the installer, it should be running already.
13. Start the Progress Application Server or Tomcat.
After you have upgraded your Private Cloud installation as described in, perform the following steps to
re-index customer tenants:
You can select the master zone and all or selected tenants. Progress strongly recommends re-indexing the
master zone and all customers, but re-indexing customer tenants one or a few at a time can minimize
performance impact.
The core components of Progress Rollbase applications are objects, tabs, and portals. Each of these components
consists of sets of configurable sub-components such as fields, pages, and menus. You define these application
components to form a fully functional SaaS solution.
As shown in the following graphic, the basic steps involved in creating a Rollbase application include:
1. Think about how your application will be exposed or distributed to users, through the public cloud, private
cloud, as an application, and/or through a portal.
2. Create the application foundation, including the objects and relationships that define the data model.
3. Add application logic to derive business value from the data.
4. Define and customize the user interface.
5. Define permissions and security.
6. Test and deploy.
As with any application development, these steps do not necessarily follow in order and are iterative. The
following topics discuss each step in more detail:
• Application foundation
• Distribution options
Application foundation
To create a Rollbase Web application foundation, you define application components. Component definitions
consist of properties and attributes, and for some components, subcomponents (child components). Rollbase
stores component definitions as metadata. With the appropriate permissions, external applications can access
application metadata using SOAP or REST. See Using SOAP or REST to integrate with Rollbase on page 714
for more information.
This section introduces and describes components that lay the foundation for a Rollbase application:
• Applications: A container for a logical grouping of objects, exposed to users through menus, and, optionally,
portals.
• Objects: The core component of Rollbase applications, each object defines the structure for data of a
particular type. Objects and relationships between objects create the application data model. Rollbase stores
object data as records.
• Fields: The core component of objects, each field defines characteristics such as data type for a discrete
piece of data. Users enter record data into fields, such as Name and Address.
• Relationships: Link objects together. For example, a shipment might be related to the individual ordered
items that comprise that shipment.
• Pages, and menus: Pages make up the user interface of a Rollbase application. When you create an object,
Rollbase creates a set of pages for creating, viewing, and editing records. Menus are the navigation controls
associated with pages. Rollbase creates pages and menus for you, but you have the option to customize
them and to create others to enhance the experience of your end users.
• Portals: Within an application, a way to expose all or subsets of Rollbase application functionality to end
users and other external entities. Instead of logging into Rollbase to access application functionality, users
log into the portal, which can be integrated into your website. You create the portal pages and control the
user experience.
• Calendar: A built-in application that contains task and event records that you can use to coordinate work
for yourself and/or for a group of Rollbase users.
Watch a short video to see how quickly you can create an application with objects and relationships: The Quick
Create Wizard. The topics in this section provide more details on objects.
You can create object definitions using the Quick Create wizard, from scratch, by importing from spreadsheets
or other applications, or by linking to data stored in other applications. An import usually brings in records, and
if those records do not map to existing object definitions, new object definitions can be created as a side effect.
Those procedures are described in:
• Clone an object — Create a new object definition with a new name and copy all components, fields, triggers,
etc. to the new object.
• Create and run triggers — Select one or more triggers to run on all object records (for data maintenance,
etc.) See Trigger overview on page 381 for more information.
• Define conditional formulas — Create formulas to enable/disable edit and delete functionality for object
records.
Object attributes
Object attributes add behavior and fields to an object. For example:
• Objects with Task and/or Event attributes appear in the Rollbase calendar.
• Objects with the Document attribute can store a file attachment. The file's contents are indexed in the full
text search engine.
• Objects with the Workflow attribute have fields for managing workflow processes, statuses, and actions,
allowing you to model many kinds of business processes.
• Objects with the Location attribute have fields to capture addresses.
• Objects with the Contact attribute have fields to capture phone numbers and e-mail addresses.
During object creation, you have the option to select which attributes to include. These are divided into two
categories: Attribute and Advanced Attribute. If you use the Quick Create wizard, you can add attributes,
but not advanced attributes. Once an object is created, you can add any type of attribute to it.
When you add an attribute during object creation or later, Rollbase adds a group of fields to that object. While
you cannot delete these fields, except for the integration name property, you can modify all other properties.
These new fields are added to the object view, create, and edit pages in a new section. When you remove an
attribute from an object, Rollbase deletes these fields as a group.
Attributes
You can add the following attributes to an object definition:
• Contact — Adds fields to store contact information for people or organizations. You can send contact
records by email and export them in the standard vCard format. The following fields are added when this
attribute is enabled: First Name, Middle Name, Last Name, Job Title, Phone, Mobile Phone, Fax, Email
Address, and Contact Owner.
• Location — Adds fields to store information about people, places, or organizations with associated location
and street address information. The following fields are added when this attribute is enabled: Street Address
1, Street Address 2, City, State/Province, ZIP/Postal Code, and Country. Using the Location attribute
allows you to add a Google Map component to view pages, as described in Google Maps on page 712.
• Event — Adds fields to schedule activities or meetings that have an associated start time, duration and
group of participants. You can display, create, and manage Event records in the Rollbase calendar and
export them in the standard iCalendar format. The following fields are added when this attribute is enabled:
Event Subject, Start Date/Time, Duration, All Day, Private, Description, Location, Assigned To and
Pop-up Reminder.
• Task — Adds fields to track deadlines, follow-ups, or to-dos that have a due date and one or more associated
assigned users. You can display, create, and manage Task records in the Rollbase calendar and export
them in the standard iCalendar format. The following fields are added when this attributed is enabled: Task
Subject, Due Date, Priority, Private, Description, and Assigned To.
• Document — Adds a field for file attachments and a description. Rollbase indexes attached files in standard
Word, Excel, PDF, or plain text formats for full text search. The following fields are added when this attributed
is enabled: Document File and Description.
• Organization — Adds lookup fields for associating records with organizational Location, Department, and
Function for use with location/department/function (LDF) permissions. See Location/department/function
permissions on page 748 for more information.
Advanced attributes
You can add the following advanced attributes to an object definition:
• Workflow — Objects with this attribute can be routed through an automated or manual workflow process
defined by a set of workflow statuses and actions. The following fields are added when this attributed is
enabled: Workflow Process, Workflow Status, and Workflow Actions (list of available actions). See
Workflow overview on page 413 for more details.
• Portal User — Objects with this attribute represent registered users of one or more portals. The Portal
User fields can be used to require portal authentication and enable the creation of rich interactive portals
that expose specific capabilities of your Rollbase applications to external users. The following fields are
added when this attributed is enabled: Login Name, Password, and Is Active. See Portal security on page
610 for more details.
• Approval — Objects with this attribute are subject to an approval process. See Approvals on page 423 for
more details.
• Survey — Objects with this attribute enable a Questions Library, allowing you to create any number of
questions that can then be attached to any record to form a questionnaire. You can rank each question's
answer to assign an overall score to survey responses. See Surveys and quizzes on page 480.
• Survey Taker— Objects with the this attribute contain fields to store responses to surveys.
• Queue — Objects with this attribute can be marked to form a queue. Users can pick up records from queue
for further processing. See Record queues on page 426.
• Multi-Currency — Objects with this attribute include support for converting money amounts to and from
different currencies. See Multi-currency support on page 477
• Lockable — Objects with this attribute support locking of records Locked records cannot be edited or deleted
unless they are unlocked by trigger or API.
Relationships
Object relationships are similar to primary and foreign keys in a database. The type of relationships specifies
cardinality (how many records of one object type can be related to another):
When you create a relationship between objects, Rollbase automatically creates a lookup field in each object
that provides access to related records. Rollbase also automatically creates a view for related objects that is
added to the appropriate pages for both objects. End users will need to view and, in some cases, create and
edit related records. Depending on the cardinality of the relationship and the permissions granted, the lookup
field gives end-users the ability to view, attach, create, and remove related records.
Component Description
Component Description
Page tabs Page tabs are an optional part of a view page that you
can enable to organize multiple sections and reduce
vertical scrolling. See Page tabs on page 506 for details.
The following diagram illustrates the container hierarchy of Rollbase user interface components:
Type Purpose
Record list A record list page contains a view component that lists
records of that object type. See an example of a
records list page.
New record A new record page provides the controls for creating
a new record. To open this page when viewing a list
of object records, click New <object_name>. See an
example of a new record page.
Mass update A mass update page provides the controls for updating
a group of selected records simultaneously. The default
mass update page runs the onUpdate trigger. You
can create different versions of this page to provide
different mass update functionality. View a mass
update page from a records list page by selecting one
or more records and selecting Mass Updates from
the tools overflow menu. See an example of a mass
update page. See Updating multiple records on page
343 for information on making mass updates.
Type Purpose
The following screen shows the tabs in the Modern - Vertical Menus UI blueprint:
Menus are child components of tabs. You can modify a tab to change it into a menu of another tab and you
can promote a menu to be a tab.
You can create tabs of any of the following types:
• Generic tab — Associated with pages that contain custom content such as arbitrary views, charts, HTML
or script components, or third party widgets.
• Object tab — By default, when you create an object, Rollbase creates an object tab for the records list page,
which lists all records of that object type. Controls and tab menu items on this page allow the user to navigate
to other pages for the same object, such as the new and view pages. See Application page types on page
247 for more information about the pages Rollbase creates for objects.
• Web tab — Contains an embedded website and allows you to embed other sites or web-based applications
into your Rollbase applications.
See Creating tabs and pages on page 490 for more information.
You can edit application tabs to add and reorder menus and set permissions that determine which menu items
will be visible to users. You can organize navigation by creating new menus, removing menu items, or changing
tabs to be child menus of other tabs (tabs that are assigned a parent become menus of the parent).
For more information about editing tabs and menus, see Customizing application tabs and menus on page 519.
Tabs on pages
You can organize sections on record view, edit, and new record pages using page tabs. This helps to visually
separate components on a complex page. For example, the following screen shows the new page for User
records. It contains multiple sections, each with multiple fields. A user would have to scroll to enter the data
for all fields:
This example shows the same page, but with page tabs that organize the sections.
Tabs on view pages are displayed on demand when the user selects them. The content of these tabs is
generated and sent via AJAX as needed. This may present a problem if tabs include JavaScript. In this case,
you can check the Do not use AJAX loading for Tabs on the page's Properties page. On pages that allow
users to browse records, the selected tab continues in focus as the user clicks Next or Prev. The tab selection
is reset to the first tab if a user goes back to the list of records.
See Page tabs on page 506 for information about enabling, editing, and adding tabs to pages.
Page components
The following table lists the main page components. Rollbase adds some to pages when they are created; you
can add others by dragging them onto a page from the list of available components in the page editor.
Many components have page-level properties that can be changed in the page editor. See Adding and configuring
components on page 499 for details.
Chart Renders the selected chart. Generic and record list pages - if at
least one chart is created for this
object.
Gauge Renders the selected gauge. Generic and record list pages - if at
least one gauge is created for this
object.
View List of records which can be paged, Generic, record list, and selector
sorted, filtered, grouped, etc. pages - only one view component
per object type can be placed on a
page.
Detailed search A configurable search component Generic and record list pages
providing a way to allow users to do
field-specific searches (for instance,
Amount>Min AND Amount<Max).
Field Renders an object field in view or View, new, edit, status change, and
edit mode. View mode (in certain mass update pages. When new
cases) allows inline editing using fields are created, each field is
the icon. Many field types have added to the Default New Fields
properties that can be configured at Section of each page.
the page level.
Grid control A configurable component used in New, edit, view, and status change
create/edit pages to create and edit pages - No more than one grid
a group of records related to the control can be used on any given
current (master or parent) record. view page.
For more details, see Using grid
controls to manage multiple records
on page 511.
Organization tree Displays an interactive hierarchy of Record list pages (for LDF objects
locations, departments, or functions. only)
Report link Link to a particular report Generic, record list, and view pages
The calendar displays records whose object definitions have an Event or a Task attribute, as well as records
of the built-in objects Meeting and To-Do. Administrators can add the Calendar object to any application to
include its built-in functionality.
You can view the calendar by day, work week, week, month, or agenda. You can filter any calendar view by
object type and by records assigned to you, to all users, to administrators, or to users with a specific role.
Records marked as Private that are not assigned to you do not appear in your calendar.
You access the calendar through the Rollbase application or any application that includes the Calendar object.
You can use the Rollbase calendar functionality to:
• As an administrator, add a Calendar component to any generic page using the page editor. For example,
you might have object definitions for training classes, conferences, and project deadlines. Using a Calendar
view, you can quickly see when you have any of these events planned and manage them accordingly.
• As an administrator, synchronize Rollbase calendar events (but not tasks) with Google calendar. See
Synchronizing with Google Calendar on page 711 for details.
• For other calendars, such as Microsoft Outlook, you can export records individually in the standard iCal
format. Click the record you want to export and from the More Actions menu, select iCal. Rollbase exports
the record locally and the Rollbase footer shows the exported file's name. Click the downloaded file to
open it in Outlook and Outlook will prompt you to take the appropriate action.
Calendar views
The calendar includes five views. To change the view, click its name in the calendar toolbar:
If the screen is too narrow to display the views, select the view from the drop-down menu in the toolbar:
Administrators can configure the calendar to set its default views and to specify the time period to display in
the Day, Work Week, and Week views. See Configuring the calendar on page 262 for details.
3. Click Save.
• Double-click a day, select the type of event to add, and click Create:
• For records whose object definition includes the Event attribute, fields include Subject, Location,
Date/Time, Duration, Assigned To, Description,Private, and Pop-up Reminder. The following screen
shows the New Meeting page:
• For records whose object definition includes the Task attribute, fields include Subject, Assigned To,
Due Date, Priority, Description, and Private. The New To-Do page, shown below, also includes
Workflow Status because it has the Workflow attribute:
3. Click Save. Rollbase creates the record and the event appears in the calendar.
The Recurring Events or Recurring Tasks page opens for the record. Select the Start Date and End Date
and select the recurring options: Daily, Weekly, Monthly, or Yearly. Depending on the option, select the
day(s), week(s), and/or month(s) for the recurring event or task. Rollbase clones the selected event or task
according to the selected pattern. The number of recurring events cannot exceed 300.
In the following graphic, a recurring meeting that occurs every Monday, Tuesday, and Wednesday is created:
To view and manage recurring instances of events or tasks, add the appropriate Recurring Events component
to the record view page in the page editor. The component is either Meeting, To-Do, or an object with the
Event or Task attribute and must be placed in its own section of the page. Edit the component to select its
view. Recurring events or tasks will now appear in the original record's view page.
Calendar notifications
Event records include a notification, which sends an email notification when an event is added to the calendar.
The email includes a link to the record's information in Rollbase.
If logged in to Rollbase, users will also receive pop-up notifications when a meeting assigned to them is about
to start. Timing for that notification is determined by the Pop-up Reminder field on a record. Reminders are
displayed only once.
Distribution options
Rollbase offers hosted and private cloud environments:
• By creating accounts for them to access the application in your tenant. This includes creating User records
and setting application permissions.
• By creating a portal that exposes all or a subset of application functionality. See Portal Overview.
• By generating the application as XML, which can be installed in any Rollbase tenant.
• By publishing your application on the Rollbase Application Directory or Marketplace. For more information,
see Publishing to the Rollbase Application Directory on page 785 and Using the Progress Rollbase Marketplace
on page 766.
If you plan to distribute your application to other tenants, Progress recommends thinking about installation and
upgrades early in the design process. Try publishing your application to the Marketplace or generate it as XML
and then test the installation before distributing it to others. For more information, see Distributing applications
in XML format on page 779.
Portal Overview
Portals provide a flexible way to build and expose external-facing applications in public websites or intranets
for external users such as website visitors, partners, or employees on an intranet. With Progress Rollbase, you
can create portals to allow just about any type of external user to access specific application functionality such
as creating, editing, searching, and viewing object records. Portals consist of an arbitrary number of pages that
form a cohesive website. Portals can be designed to adopt the look and feel of any website.
Portals often expose a subset of Rollbase application functionality to a specific set of users. For example, a
Rollbase application for managing sales leads might have a portal integrated with your website to collect
information submitted by website visitors. An application for employee management might have a portal for
self-service access to employee profile information, company directory, and benefits information.
For more information on designing and developing portals, see Rollbase portals on page 594.
Objects, their fields, and the relationships between them form the data model for a Rollbase application. From
these, Rollbase generates a set of pages for viewing, creating, editing, and deleting records. The topics in this
section describe how to work with applications, objects, and records.
You can create a Rollbase app in different ways, depending on your requirements:
• If you are starting from scratch and have an initial set of objects in mind, use the Quick Create wizard.
The Quick Create wizard walks you through a series of steps to create an application and an initial set of
objects. You can also specify relationships between the objects. The Quick Create wizard does not support
all advanced field and attribute types, but you can easily edit the application and objects later to add them.
See Getting started with the Quick Create wizard on page 270 and Editing applications on page 274 for more
information.
• If you want to use objects that already exist in your tenant, create the application first as described in Creating
an application your way on page 273, and edit it to add the objects, as described in Editing applications on
page 274.
• It you want to import applications, import data from an existing data source or create external objects that
map to other data sources, see Integrating with outside sources on page 659
The following videos provide a quick orientation to Rollbase:
The topics in this section describe how to create and manage applications and objects.
• Views
• From application pages: select New Application from the Rollbase menu.
• From Setup pages: Click New Application in the sidebar.
The Create a New Application dialog opens.
2. In the New Rollbase Web App section, click Guide Me Through It.
The Quick Create wizard displays:
• In the Object Name field, enter the singular form of your object name. Rollbase will use the plural form
for lists of objects.
• From the Attributes drop-down list, select desired attributes. See Object attributes on page 243 for more
information about attributes.
• To add more objects, click Add Object.
• When you are finished, click Next.
The Add Fields page displays, with the first object highlighted.
6. To add fields, follow these steps:
1. Launch the Create a New Application dialog in one of the following ways:.
• From application pages: select New Application from the Rollbase menu.
• From Setup pages: Click New Application in the sidebar.
The Create a New Application dialog opens.
Editing applications
The application setup page allows you to view and edit the following for an application:
• The application definition
• Application properties
• Application components - add new components or edit existing components
• To navigate to settings for the current application, click Current App Settings.
• To navigate to settings for a different application, hover your mouse pointer over the application and
click the settings icon.
• Add or edit the application components (such as tabs or objects) listed in the box below the application
name:
Click the component link to navigate to the component area. For example, click Tabs to navigate to a
table listing the application's tabs.
• Click Delete to delete an application. See Deleting an application on page 290 for more information.
• Click the More actions... drop-down menu to perform advanced operations. See Application actions on
page 278 for the options available in this menu.
• Click the Theme Preview icon to try out different themes for your application. See Using the Theme
Preview mode on page 286 for more information.
• Click Post Install Scripts to add one or more post install scripts to the application. See Post install
scripts on page 296 for details.
• Click Edit to view and edit application properties:
• Deployment status specifies:
• Whether an application is deployed. If the application is deployed, all users with permissions to
view the application will see it when they log in. If the application is not deployed, only users with
permissions who have an administrator role will see it.
• Whether an application is hidden. If the application is hidden, it will not be listed in the application
switcher.
• Whether any field-level help you have supplied in component definitions will be available to
end-users who click ?.
• Application Theme — By default, the pages of your application use the Default theme to display
their components. You can change the look and feel of you application by selecting a theme from
the Application Theme list.
• Field Labels Render Mode — Specifies how labels are rendered with regard to field values. By
default, labels are to the left of field values on desktops and above field values on mobile devices.
You can change the default by selecting a different option:
• Use Horizontal Responsive Design — By default, Rollbase applications use vertical responsive
design. Select this check box to use horizontal responsive design instead. See Vertical and
horizontal responsive design on page 557 for more information about responsive design.
• Use Native Calendar and Time Control on mobile devices — Select this check box to use
native date and time controls on mobile devices.
• Right to Left Text Direction — Select this check box to use right to left text direction. This feature
is to support languages, such as Arabic and Hebrew, that are written from right to left.
• Notifications Position — Specifies where to position notification messages for the application.
Select Top Corner to set the position to the upper right corner (default). Select Bottom Corner
to set the position to the lower right corner.
• Hosts Whitelist for Client REST API - Enter the name of hosts you want to authorize for client
side REST API calls and click Add.
• Properties in the Corticon Decision Server area let you configure up to three Corticon Server
instances to access from Automating business decisions with Corticon rules on page 427 triggers.
• Server to use — The selected radio button determines the server instance used by triggers in
this application. Defaults to Development.
• Development or test server — The URL of the server instance to access in a development
environment
• Staging server — The URL of the server instance to access in a staging environment
• Production server — The URL of the server instance to access in a production environment
• User Name / Password — The credentials used to access each server instance.
• Tabs - You can add tabs from the Available Tabs column, remove tabs from the Selected Tabs
column, and reorder the Selected Tabs column using the arrow buttons:
• Core Objects, Dependent Objects, and User Roles that must be included in the application when
it is published.
Application actions
The More Actions menu on the application setup page offers additional options to manage your application.
To access More Actions:
1. From the application switcher:
• To navigate to settings for the current application, click Current App Settings.
• To navigate to settings for a different application, hover your mouse pointer over the application and
click the settings icon.
View Diagram
The More actions menu on the application setup page includes a View Diagram option. This option generates
a Entity-Relationship (ER) UML diagram that helps you visualize application objects and relationships. The
UML diagram is useful during development and is also useful for getting an overview of applications you did
not develop but installed from XML. The ER UML diagram is generated by third party JavaScript library(mx-graph)
and, for large applications, can take a few minutes to load.
The following ER diagram shows the objects in a simple Library application:
The UML diagram is generated in three different layouts — Organic, Hierarchical, and Circular. By default,
Organic is selected for application diagrams and Hierarchical is selected for workflow process.
In addition, you can move the nodes, drag the edges to proper coherent and readable orientation. Clicking on
layout buttons will re-render the graph in a different ordering. You can click Save ss PNG to to export the graph
as an image.
Note: You can view the object level UML diagram by navigating to Objects from Application setup page and
selecting the required object's Workflow Processes>View Diagram or Workflow Processes>Default options.
Application Tree
The More Actions menu on the application setup page includes an Application Tree option. This option allows
you to view all application components in a tree. Components with errors are highlighted in red. Expand parent
nodes to see child components.
Generate XML
The More Actions menu on the application setup page includes a Generate XML option. The Generate XML
option allows you to generate and save an application in XML format. The resulting XML can be installed in
other Rollbase tenants. The XML files for complex applications can be over 5MB. After the file is generated,
choose Save or Save As to save a copy locally.
Applications with errors will not generate XML. If this is the case, try creating an application tree, which will
show you any components with errors.
Options available when generating XML include the following:
• The version of the application to be exported as XML. This value is auto-incremented each time you generate
new XML for the application.
• Lock status settings for users in destination tenants:
• Select Unlocked to allow users to modify all parts of the installed application.
• Select Partially Locked to allow users to modify only unlocked objects, menus and portals. If you select
this option, select the check box next to each application component you want to lock.
• Select Locked to disallow users from modifying any part of the installed application.
In the following graphic, the user has selected Partially Locked and has selected the Child object to be locked:
See Publishing and distributing applications on page 765 for more details.
Performance Audit
The More Actions menu on the application setup page includes a Performance Audit option. Use this option
to:
• Validate all formulas used by your objects and display any errors.
• Check whether formulas are using loops through related records. Loops are inefficient and should be
replaced with Query API methods whenever possible.
• Check whether views are using template and formula fields that can decrease performance.
In the following graphic, the performance audit for the Order Management application reports three potential
performance issues:
Custom sidebar
The More Actions menu on the application setup page includes an option to add a Custom Sidebar. In the
classic UI, when you add a custom sidebar, it appears on the left sidebar and is included in the published
application. You can add your own component using HTML or JavaScript. You can also use widgets or gadgets
from providers such as Google or Yahoo. You can also use client-side JavaScript functions. See Client-side
JavaScript on page 1150 for more information.
See Customizing the header and footer on page 518 for details and an example.
Translation
In tenants configured for additional languages, the More Actions menu on the application setup page includes
an option for Translation. You can create an Excel spreadsheet that translates (or localizes) your application
into a foreign language. For more information on localization, see Localization on page 372.
The example below is a portion of the installation log for the Order Management application:
Application permissions
The Permissions section on the application setup page allows you to manage permissions by user role and
by individual users. Permissions set for a user override those set for roles, allowing fine-grained access control.
In addition to permissions set at the application level, you can set relationship-based permissions and role-based
field-level permissions.
3. If desired, click the check box for a user role to toggle its permission for the application.
4. To set the application permission for a user, click Select User. A popup window opens and displays the
users. You can navigate through the list of users or you can search for a particular user. Click the user for
whom you want to set the application permission.
5. The user appears in the table under Individual Users. Click the check box for the user to toggle its permission
for the application.
For information about managing application permissions and access control, see Security and access control
on page 719.
Note: The capability for users to set theme preferences is enabled by default. An administrator can disable
this capability by selecting Setup Home > Preferences and deselecting the Allow users to set individual
theme preference check box.
2. Select a theme from the drop-down menu in the Application Theme - Preview bar. The appearance of the
application page changes based on the theme you select.
3. You can:
• Click Apply. The Set Application Theme dialog opens. Click OK to apply the new theme. The Theme
Preview mode closes and the new theme is applied to the application.
• Click Close to exit the Theme Preview mode without changing the theme.
2. Select a theme from the drop-down menu in the My Theme - Preview bar. The appearance of the application
page changes based on the theme you select.
3. You can:
• Click Apply. The Set this theme as my preference for all applications dialog opens. Click OK to apply
the new theme. The Theme Preview mode closes and the new theme will be used for all of your
applications.
• Click Close to exit the Theme Preview mode without changing the theme.
To revert your theme preference back to the theme set for each application, select Select a Theme from the
drop-down menu in the My Theme - Preview bar and click Apply. A dialog opens; click OK to unset the user
theme preference.
Note: You can also set and revert your theme preference by selecting My Profile from the user profile menu
and selecting My Preferences. This allows you to set your theme preference without using the Theme Preview
mode.
Note: While the capability for users to set a theme preference is enabled by default, administrators can disable
it. See Using the Theme Preview mode on page 286
Deleting an application
To delete an application:
1. On the application setup page, click Edit. Rollbase displays the application's properties.
2. In the Deployment Status area, uncheck the This application is deployed check box.
3. Click Save. Rollbase returns to the application view page.
4. Wait for at least one hour.
5. Click Delete.
Deletion of an application has the following consequences:
• All objects (and corresponding data records) that are assigned to the deleted application and are not assigned
to any other application will be permanently deleted.
• All menus, portals, and hosted files that are assigned to this application and are not assigned to any other
application will be permanently deleted.
• The application record will be permanently deleted.
Deletion of an application does not cause deletion of system objects.
Rollbase requires the following prerequisites to avoid accidental deletion of important information:
Installing applications
You can install existing Rollbase applications in one of the following ways:
• From the Rollbase menu, select Install Applications (or New Application and click Install from
Marketplace).
• Use the Marketplace URL:
• Marketplace on the Private Cloud: http(s)://<host-name>/master/marketplace
Note: You can configure your Private Cloud Marketplace URL in shared.properties on page 926.
• Using application categories: Browse and open a category from the Categories pane. Select an
application to navigate to its home page.
• Using the search box: Use Marketplace search to navigate to an application's home page.
• Using the featured, popular, or new apps sections: Find and select an application from the Featured
Apps, Popular Apps, or New Apps sections, after which its home page opens.
3. To install:
In Rollbase Private Cloud, if you are using Application Directory for publishing and distributing applications,
you can follow the steps below to install an application published to the Rollbase hosted or Private Cloud
Application Directory:
1. Click Install Applications.
2. Browse the list of available applications to find the application you want to install.
3. Either click the application name or click More Details to see more information about the application,
including whether a test drive is available, user reviews, and whether an application XML file is available
for installing the application to your Private Cloud.
4. If you want to test drive the application, and test drive is available, click Test Drive. The application opens,
allowing you to try it out before installing it.
5. Click Install Now.
After finishing the installation, you can start using the newly installed application.
Updating an Application
To check for updates to an installed application:
1. From the application switcher:
• To navigate to settings for the current application, click Current App Settings.
• To navigate to settings for a different application, hover your mouse pointer over the application and
click the settings icon.
Overriding Changes
When installing updates from the Application Directory, note the Override Changes check box below the
Install Updates button. For unlocked applications, this check box controls important behavior:
• If checked, Rollbase overwrites existing application components with those in the new application version.
This happens for locked and partially locked applications regardless of whether this check box is checked.
• If unchecked, Rollbase only creates new application components and will not overwrite existing components
to preserve any customizations made since the previous install or update. Note that locked and partially
locked applications receive all updates for locked components, but unlocked components will not be modified.
• If you added three fields to an object and Override Changes is checked and/or that object is locked by the
application publisher, updating will override the object and your three fields will not be available. Any pages
to which the fields were added will no longer show those fields.
5. Click Choose File and browse to select the application XML file.
6. Click Next.
Rollbase displays a tree of components included in the application as follows:
• For new installations, you have the option to uncheck boxes for locked components to avoid having them
installed as part of the application.
• For updates, if the application is fully locked, all components will be updated/created/deleted automatically
during the installation process. If the application is partially locked, all locked components will be
automatically updated/created/deleted during installation. You have control over what happens to unlocked
components; uncheck boxes for components you do not want to update.
• If a component was deleted from the latest version of the application but is present in the tenant where
you are installing the update, this component will be listed at the bottom of the tree. Check the box next
to each deleted component if you want to delete that component as well. This is a safety precaution
designed that allows you to bypass such deletion.
• Components deleted in the latest version of the application will be deleted in the destination tenant if the
Override Changes box is checked. If an application or portal page is updated, the page's entire structure
(sections, cells) will be replaced by the structure defined in the application XML.
7. Review the application tree and uncheck boxes next to components you do not want to install/update.
8. Click Install to continue with the installation.
• Post Customer Create Script — A script that executes after customer creation when this application is
part of initial list of applications. It will be executed in the order the applications are installed as part of
customer creation. For example, if you want the new customer's first user to have a custom role instead of
the default Administrator role, you can write a post install script for the Rollbase application that changes
the first user's role to that custom role. See Creating a tenant with no administrative users on page 861 for
details.
• Post App Install Script — A script that executes after the application is installed
• Post App Update Script — A script that executes after the application is updated
To create a post install script for an application:
1. Navigate to the setup page for the application.
2. Click Post Install Scripts.
Note:
If the post install script's purpose is to create a tenant with no administrator, you can access the automatically
created user with the Administrator role and change the role to a custom role with some administrative
permissions. For example:
var objId = rbv_api.selectNumber
("SELECT id FROM USER where role =90"); // Administrator role's original ID is always
90
var role = rbv_api.stringToJson(rbv_api.getRoleById("868114")); // Custom role with
admin permissions
rbv_api.setFieldValue("USER",objId,"role",role.code); // Set user's role to custom
role
5. Click Save.
• Core objects will be published and installed with the application, should you decide to distribute it in XML
format. Core objects are explicitly assigned in the application edit page. When you create a new object with
a tab, it becomes a core object by default.
• Dependent objects are pre-requisites for applications: they must be installed prior to installing the application.
Dependent objects can be explicitly assigned in the application edit page as well. However, the system will
automatically add objects as dependent objects to maintain the application's integrity in the following cases:
• The User object is always included as a dependent object for all applications.
• If any core objects have the Approval attribute, the Approval object will be added as a dependent
object.
• Any object associated with a tab which is not included as core.
Topics in this section describe how to work with Rollbase objects, fields, and relationships.
1. Launch the What do you want to create? dialog in one of the following ways
2. Fill in the fields as directed by the explanatory text. Required fields are indicated with a red bar. When you
supply a Singular Name and move out of that field, the other fields are populated automatically with default
values that can be changed. The object definition includes optional properties, attributes, and permissions.
If you do not know which of these you might need, you can come back and add them later.
3. When you are satisfied with the object definition, click Save.
If you leave the box checked to create a new tab, the New Tab screen opens. See Creating a tab on page
299 for more information about creating a new tab for the object definition.
Creating a tab
As part of creating an object definition, you can define a tab. A tab appears in the application menu bar (or as
a child to a tab in the application menu bar) for any selected application.
When you finish creating an object definition, the New Tab screen opens:
• Tab Name — The label that appears on the tab. By default, it is the the plural name of the object.
• Description — An optional description
• Parent Tab — If a parent tab is selected the new tab will not appear in the application menu bar. Instead,
it will be available from the drop-down menu of the parent tab.
• Show In — Specifies whether this tab is displayed on desktops, tablets, and/or smart phones. Displays
on all devices by default. Deselect a device type if you do not want the tab displayed on it. Device type
icons appear in the following order: desktop, tablet, smart phone. The Tabs section of the Setup
Application screen contains a Show In column that displays the device types in which each tab appears:
2. In the Add to Applications section, select the applications to which you want to add this tab.
3. In the permissions table, select the roles and users you want to be able to view this tab.
4. Click Save.
The controls on the object view page provide the following functionality:
• The shaded ribbon at the top contains links to subcomponent sections, where you can create, edit, or delete
object subcomponents, such as Fields, Relationships, and Pages.
• The Edit button takes you to a screen where you can edit the following:
• Deployment status
• Object properties and attributes
• Permissions
• The Delete button allows you delete this object definition, but the object must first be undeployed.
Adding fields
This topic describes how to create a field from the object definition. You can also create basic fields using the
page editor. Create advanced field types or portal fields from the object definition, as shown here.
For performance reasons, the number of certain types of fields that you can add to a particular object is limited
by Rollbase. Private Cloud users can control these limits as described in Adding columns to a Private Cloud
database on page 872
To add a field to an object definition, navigate to the Fields section and click New Field or New Formula Field.
Choose the most appropriate field type based on the kind of data you want to store in that field. For example,
for a field that will store prices, you might select currency; for a description field, you might select a text area.
Click Next to define properties. The most basic property is the label that is used as an identifier in all pages,
views, reports and any other places the field appears in your application.
As shown in the screen below, some attributes are common to all fields:
• Field Label (mandatory) is displayed on the left from the field on view, edit, and new record pages.
• View Header (optional) is used in headers of views and reports. If not specified, the Field Label is used.
• View Width (optional) is used to set width (in pixels or %) of columns in views and reports. If not specified,
the browser calculates the width of columns automatically.
Each field has a varying number of additional properties based on its type. For example, currency fields have
a size and a currency format property that allows you to select the type of currency to use. Text areas have a
default height and width, as well as a property specifying whether or not to use a rich text editor.
Each field has a set of advanced properties. Different advanced properties are available depending on the type
of the field. For example, all text-based fields can be indexed as part of the full text search engine, but image
fields cannot. Most fields can be audited so you can keep a historical log of when a field has changed its value,
but text area fields cannot be audited. See Field types on page 1339 for information about properties specific to
each type of field.
After you have defined properties, you will also need to ensure that each field has a unique integration name.
Rollbase suggests a name based on the label you entered earlier. The integration name is used to reference
this field via merge fields or with Rollbase APIs.
The Field-Level Help box allows you to define help text for the field that will appear in a popup when the user
clicks the help icon next to the field.
After you save the properties, choose the pages and views should include the field. The screen displays a list
of application pages on the left, a list of portal pages in the center (the example shown below does not have
portal pages) and a list of views on the right. Check all that apply.
1. Navigate to the application settings, and edit the application definition to set the Enable field-level help
for this application property.
2. Enter help text in the Field-Level Help box. You can use HTML tags to format the text, such as <br/> to
control line breaks.
On object pages, a ? icon displays next to fields for which help has been defined. Roll your cursor over the
icon or click it to display the help text.
Field actions
The Fields section of an object definition has an Action column that allows you to perform different actions
on the field, depending on its type. As shown in the example below, all fields have Edit and Permissions links.
This section covers available actions.
Cloning fields
You can clone all fields except those created automatically by Rollbase, such as the record name. When cloning
a field, you have the option of adding the cloned field to a different object definition. Properties of original field
(including permissions, validation script, and DOM event handlers) will be copied to a new field.
Deleting fields
You can delete any field except for system fields created automatically by Rollbase. Fields created by Rollbase
when you enable object attributes and relationships will be deleted automatically if you remove the attribute or
delete the relationship.
For fields you delete manually, when you confirm deletion, the system will:
2. On the Replace Picklist Value dialog, select the value to replace and enter the new value. This will replace
the old value in all existing records with the new value you define.
3. Click Save.
• Text fields can be converted into email, picklist, radio buttons, text area, or URL fields. When a text field is
converted into a picklist or radio buttons, Rollbase will:
• Analyze the value of the text field for each record of that object type.
• Create values for all unique values found in the text field.
• Replace original text values with pointers to the newly created values.
Field validation
On most field types you can define your own server-side validation logic by writing custom JavaScript that
makes use of record-level field values, as well as related field values, to return custom error messages if
required conditions are not met.
To define custom validation, enter a JavaScript expression in the text area. After your users submit data to the
server, this expression will be evaluated. If that evaluation yields a string value, that value will be considered
an error message and the user will be returned back to the data entry page with the error message displayed
(all form data will be preserved).
For example, the following validation ensures that the value of an amount charged field is no more than 100
less than the value of a total due field:
if ({!total_due}>{!amount_charged}+100) {
return "The amount charged is too small. Please make sure the amount charged is no
more than 100 less than the total due.";
}
In some situations when a record is edited, you may want to access the value of a field before it was updated
by the user, as well as the value after it was updated. To do this, use the #before suffix in the merge field.
For example:
if ({!balance#before}-{!balance}<100) {
return "The balance change is too large. Please make sure the new balance is no more
than 100 less than the initial balance.";
}
When the user is saving data (for a new or an existing record) and the validation formula returns an error
message, the saving process cannot continue: the user is redirected back to the new or edit page and an error
message is displayed below the field.
This behavior changes if you select the option Treat this Validation Rule as a Warning. In this case, at runtime
the user can select the Ignore Warning box and proceed with saving despite of the warning.
Views
A view is a result set, a list of records that users can act on individually or in bulk. When you create an object
definition, Rollbase creates a list view of all records of that object type. You can create additional views and
apply filters to them to present a different result set. Each object definition can have any number of associated
views. The view component in the object definition specifies the fields in the view and the order in which they
appear. Most columns are sortable, depending on their type. Usually the record name column is included in a
view so that users can click the name to view record details. See Working with views on page 561 for details.
The total number of records in a list view is based on the permissions granted to the viewer. In complex cases,
such as when the Location, Department, and Function permissions model is enabled, the number of records
is not shown to avoid overextending resources. Users can also apply and remove temporary filters. See a
sample view and the default set of controls.
To create or modify a view:
• Specify fields, their order, row colors, and filter criteria in the object definition view component.
• Specify the controls available to end users and other page characteristics in the view page.
View controls
When viewing a record list page, you can perform several actions on the view header. The following screen
shows a list view of all Room records:
• New button for creating a new record. By default, this button is available to users with the appropriate
permissions.
• + button, which launches the object's quick create page. You can edit the object's quick create page to
specify which fields display.
• Delete button, which displays for users with delete permission and is active when one or more records are
selected.
• Filter opens a section that allows you to dynamically add filters to select records from the view without
changing the view itself. See Dynamic filtering on page 575 for more information.
• Export menu with the options shown below. The Google option opens the currently selected view in a
Google Docs spreadsheet. Note that your Google account must be set up in your personal settings to export
to Google.
• Delete allows you to move all of the currently selected records to the Recycle Bin. Administrators can
recover records from the Recycle Bin if they are deleted by mistake.
• The group actions menu works with selected records:
The items in the menu vary depending on the object definition and can include:
• Tag, not shown above, for objects with tags enabled, allows you to add keywords to selected records
so you can easily find them in the future. See Tagging records on page 346 for more information.
• Send To allows you to email the selected records.
• Compare allows you to compare the selected records. See Comparing and merging records on page
334.
• Merge allows you to merge the selected records. See Comparing and merging records on page 334.
• Convert allows you to convert the records to a different type. See Converting records on page 329.
• Find Duplicates allows you to find duplicates. See Finding and merging duplicates on page 337.
• Transfer Owners allows you to transfer owners. See Transferring owners on page 343
• Workflow actions, displays for objects with workflow enabled. See Workflow actions on page 415.
• Mass Update allows you to perform the same change to multiple records. Updating multiple records on
page 343
• The checkbox column in the table of records allows you to select multiple records on which to perform a
group action. Selections will be maintained as you navigate through pages of records. Click a column header
to sort records:
• The Columns menu allows you to select which columns display in the view:
3. Click Views.
The page scrolls to the Views section:
The view you selected is now the default view for the record list page.
End users will need to view and, in some cases, create and edit related records. Depending on the cardinality
of the relationship and the permissions granted, the lookup field gives users the ability to view, attach, create,
and remove related records.
By default, lookup fields allow users to select one or more records of the related object by displaying a selector
page in a pop-up window. You can change this behavior by allowing users to select records from a picklist or
you can hide the selector. Hiding the selector is useful for objects that a user cannot edit or on pages where
you do not want them editing related objects. Picklists are limited to showing 1,000 records to avoid display
issues. Use grid controls or record lists for objects where you anticipate exceeding that limit.
• Links Alignment — Choose how links should be aligned on view pages and in views: Horizontal (default)
or Vertical.
• Hide "Quick Create" button for this field — Check this box if you want to hide the button used to create
and select a new related record rather than choosing an existing one.
Note that the Quick Create button is not available (regardless of the global setting) in the following cases:
• If the user does not have permissions to create a new record of the related type
• In pop-up pages, such as Print Preview, and in portal pages
• In Quick Create pages
• For relationships with 1-1 or N-1 cardinality where the related record is already selected
• Main Lookup and Link Lookup — Limits the available choices for this (link) lookup field to be consistent
with the current selection in another (main) lookup field. See Restricting records for lookup fields on page
321 for more information.
• Autocomplete Field — Select the field to be used to find matches when users start typing in the lookup
field. After you type three characters, Rollbase starts displaying matches automatically for the user to select
as desired.
• Autocomplete Rule: Select Starts With or Contains to change the matching behavior of the autocomplete
feature.
• Default Value — Optionally select a record to be selected in this field by default when users create new
records.
• Track all changes to this field in each record's Audit Trail for a complete historical log — Check this
property to automatically add a record-level audit trail entry whenever the field is updated. This option is
only available if the parent object has Audit Trail property. See Auditing on page 338 for more information.
• Always require a value in this field in order to save a record — Check this property if you want the field
to be required.
1. Navigate to the page containing the lookup field you want to modify.
2. Click the tools icon to display the Page Options menu.
3. Select Design This Page to open the page editor. The following example page has two lookup fields, each
identified by a magnifying icon, Titles and Library Members.
4. Open the Properties menu to the right of the lookup field name:
• Selector — Users will be able to select related records using a pop-up window.
• Picklist — The field will contain the helper text Please Select. When a user clicks the field, a picklist
displays available related records. For 1-many or many-many relationships, the user can select multiple
records.
• Hidden — The field will not show on this page.
6. From the Use List View picklist, select the view to be used for the selector or picklist. By selecting a filtered
view, you can restrict the records available to end users.
7. Set the remaining properties as follows:
• Use Record in Scope for New Objects — Select to pre-populate the lookup field with the last record
of the type the user was viewing or editing. This is the only option to populate hidden lookup fields.
• Show Record in Scope — Select to display the last record of the type the user was viewing or editing.
8. Click Save.
In this example, the Company object's lookup field State has the following properties:
The Main Lookup property specifies that the company's related country limits the choices for the lookup field.
The Link Lookup property specifies that the State lookup field will be restricted to the country's related states.
The following example illustrates how the Company's State lookup field is restricted.
The application contains two countries:
After setting a company's country, its State lookup field is filtered to show only that country's states:
You can also restrict the records for a lookup field using the client-side API rbf_setLookupFilter() on page 1130.
Related record components are only shown on view pages for specific records and automatically filter the data
displayed to only show those records that are related to the current record being viewed.
You can use the page editor to define whether or not you want to hide or show controls of the related record
component such as Quick Create and New. See Editing pages on page 497 for more information. You can also
use the page editor to define which view should be shown by default. For more information on creating and
configuring views, see Views on page 312.
For example, the following screen shows a grid control from a room reservation system:
When adding and configuring a grid control on a new or edit page, you can define the fields shown in each
row, and you can attach custom JavaScript event handling code for performing calculations and other operations
when fields are updated or rows are added and deleted.
For more information on setting up and configuring grid controls, see Using grid controls to manage multiple
records on page 511.
Orphan records
The Orphan Records Control section of a relationship allows you to specify whether or not related records
get deleted when the parent record is deleted. For example, if a user deletes a quote record, it might make
sense to delete all of the related line item records. But the opposite case is not true; if a user deletes a line
item, it does not make sense to delete the related quote record. Edit the relationship component in the object
definition to change this behavior.
Cloning records
When you clone a record, the new record page opens with all fields prepopulated with values from the original
record. You can change field values or accept those from the original record. The original record is not affected
when you create a cloned record. For some objects, it makes sense to clone related records when cloning a
record. For example, when cloning a Purchase Order record that has relationships with Line Item records, it
makes sense to clone all of its related line items. The following illustration shows a parent record with related
records and shows how a cloned record can include cloned related records.
As the following screen shows, the object definition relationship component provides controls for cloning related
records. In the example shown from a corporate room reservation system, when a new room becomes available
it might be configured with a certain set of devices such as a projector, coffee maker, and whiteboard. When
the user clones a particular room record, they want it to be populated with this set of devices. To enable that,
you would check the second box, Clone all related Devices when any Room record is cloned.
With a Clone all related… flag checked, related records are cloned and attached to the resulting cloned
records. If the new record page for an object contains a grid control and Clone all related… is checked, the
grid control will be automatically pre-populated with information corresponding to the original related records.
As an alternative to the cloning mechanism, in the new record page you can use the lookup fields to attach
existing related records. If the new record page for the object has a lookup field configured to explicitly select
related records, this supersedes the Cloning Control settings in the relationship definition.
How to clone records and set cloning behavior for related records
Initiate and set cloning behavior as follows:
• When viewing a record, clone it by selecting Clone from the action menu:
Protecting records
You can control whether users can modify or delete records with the following mechanisms:
• Setting user permissions as described in Security and access control on page 719.
• Locking individual records as described in Locking records on page 328.
• Creating conditional formulas that remove edit and delete controls as described in Condition formulas to
disable editing and deleting records on page 328.
Locking records
You can lock individual records to prevent users from editing or deleting them. To use this feature, enable the
Lockable attribute in the object definition. Records of that type will have an Is Locked check box. If you enable
the attribute on an existing object definition, you need to edit views and pages, such as the new record page,
to include the new attribute.
The Is Locked checkbox can be set to locked by directly editing a record, or by using a mass update or trigger
— any mechanism that updates records. A new Unlock trigger type is created when you enable the Lockable
attribute. To remove locks on multiple records, use a trigger or an API call to set the Is Locked checkbox to
false.
When you lock a record, it has the following effect:
• Edit and delete controls on the record's view page are disabled.
• The Is Locked field displays a closed lock icon.
• Fields for related objects on the record's view page do not display links to create, attach, edit, or delete
related records.
• Edit and delete controls for the locked record on related record view pages are disabled.
Workflow actions are still available when a record is locked. If you want to disable workflow actions on locked
records, add a condition formula to each workflow action you want to disable. The formula returns false if the
record is locked.
To add a condition formula to a workflow action:
1. Navigate to the workflow action from the object definition.
2. Click Edit.
3. In the Action Condition Formula section, enter the following formula:
!{!isLocked}
• Rollbase applies permissions before a condition formula (see Security and access control on page 719).
• Rollbase applies the locking mechanism before a condition formula (see Locking records on page 328).
• Rollbase does not apply condition formulas defined on objects to workflow actions or to API calls.
Converting records
You can convert records of one type to another type, such as leads to accounts. A conversion map specifies
how the fields in the source record map to those in the target. The source and target objects do not need to
have exactly the same set of fields, but only values in the fields you map will be populated the new record.
You can create a conversion map in the source object definition or in the process of conversion when using
the Convert menu action. To create triggers or workflows that convert objects, a conversion map must be
present in the object definition.
You can only map a field to a field with a compatible type. Rollbase automatically suggests the mapping for
fields with matching names, but you can change them. Fields with default values can be mapped. You can
also map a field to a constant value such as a string, number, or particular record for lookups, or to an expression.
Expressions may include server-side API calls or be simple formulas, such as {!total} - {!amount},
built from source field tokens. See Adding business logic on page 349 for more information.
Picklist fields can be mapped and converted if the following are true:
• The source and target objects have a picklist with the same set of values.
• The source and target picklist items have the same integration codes.
The general steps for creating a conversion map include:
1. Initiate conversion in the context of a record or the object definition of the type of record to convert.
2. Choose the destination object type.
The Conversion Map screen displays mappable source object fields. Read-only fields and template fields
will not be available.
3. From the menu next to each field, select the target field.
4. Choose whether to delete the source object after record values have been converted to the target object
type.
Deleted source records will be moved to the Recycle Bin without deleting dependent records. This setting
has no effect if a conversion map is used in workflow action or trigger.
• A single record: By opening its view page and using the Convert option from the group actions menu.
To convert one or more objects from a list view, follow these steps:
1. From the application menu bar, click the object type for the records of interest.
• If the application uses the Traditional UI blueprint, click the object type for the records of interest from
the application menu bar. If you don't see the object of interest, check the overflow menu.
• If the application uses the Modern - Vertical Menus UI blueprint, click the object type for the records of
interest from the sidebar.
• To convert all on a page, select This page from the select menu and check All.
• To convert a subset, check the box next to each record.
4. Select Convert.
A screen opens for you to select the target object type. The following example shows the screen that appears
when converting a title from a sample library application to a check out:
5. Select the target object type. Available types include all deployed objects except the source object.
6. Click Next.
The Conversion Map screen opens:
7. Map the fields as desired. Required fields must be mapped. See Converting records on page 329 for more
information on mapping.
8. Optionally check the box to have the original record deleted after the conversion.
9. Optionally click Save Map to save the conversion map in the source object definition.
After saving, you will be able to convert the records or cancel.
10. Click Convert to convert the selected records.
• Compare allows you to select and view multiple records side-by-side, and offers the option to merge the
records.
• Find Duplicates searches for duplicate records based on the values in the fields you select. If duplicates
exist, you will have the option to merge them.
• Merge allows you to select values from multiple records and merge them into the record on the left. Rollbase
moves the other record(s) to the Recycle Bin without running any triggers, such as those to be run on delete.
Records dependent on the recycled records will now be dependent on the merged record and are not
deleted.
1. From the application menu bar, click the object type for the records of interest.
• If the application uses the Traditional UI blueprint, click the object type for the records of interest from
the application menu bar. If you don't see the object of interest, check the overflow menu.
• If the application uses the Modern - Vertical Menus UI blueprint, click the object type for the records of
interest from the sidebar.
Auditing
Rollbase automatically tracks some activities, and you can enable additional logging as described below. Audit
trail entries are created automatically for activities such as creating, merging, and converting records. Rollbase
also creates audit trail entries when an administrative user makes changes to an object definition or an
application. The Audit Trail component at the bottom of the object definition or application definition contains
these entries.
The following example shows an application Audit Traill section. Click Show All to view audit trail entries in
a pop-up window, from which you can export a full history of changes.
By default, the System Info section of a record view page contains audit trail entries as shown in the following
screen. You can move the component or remove it by editing the page. The Audit Trail list view component
shows the 20 most recent entries. Use Show All from the Action menu to see up to 100 entries in a pop-up
window. You can also export all entries to XLS or CSV format from this window.
For private cloud administrators, some types of administrative audit trail entries related to a customer tenant
can be found on the bottom of the Administration Setup page. These records include, for example, a copy
of email messages sent as result of large asynchronous data imports.
Audit trail records cannot be modified or deleted manually. Rollbase deletes them if the record they are associated
with is deleted. In this case, the audit entry will be in the associated user's audit trail.
You can enable finer-grained auditing in the following ways:
• To track changes made to records, enable Audit Trail property on an object definition. You can selectively
enable tracking of operations like view, edit, and delete.
• When enabled, the Audit Trail property allows Rollbase to track changes to record fields made by API
calls, triggers, and end users. You can enable the Audit Trail attribute during object creation, or for
existing objects, by editing the object definition.
• When an email related to a record is sent. In this case, the View control displays a copy of the email
message that was sent. This audit trail entry is created when the email message is actually sent, typically
with a short delay.
• To track changes for a particular field, in the object definition, edit the field. This attribute applies even if the
object does not have the audit trail enabled.
• To generate custom, template-based audit trail entries, create a workflow trigger of type Create Activity
Trail Record.
5. Click to enable the audit trail and the desired user actions.
6. Click Save.
Sending email
Rollbase offers various ways to send emails that include record information. You can send single or multiple
emails at one time and you can fill in the body of the email manually or create a template to fill in details ahead
of time.
Merge tokens allow you to specify values that Rollbase replaces with literal values when sending the emails.
This sample template body in a room reservation system uses tokens for the reservation start time and the
room name:
Your reservation starting at {!start_time} for {!R791988.name#text} has been
confirmed. The resulting email looks something like this:
Your reservation starting at 08/25/2015, 11:00 AM for Atrium Social Corner has
been confirmed.
To send an email, click Send To from the group actions menu on a records list page when you have one or
more records selected:
The following example shows the Send an Email screen that opens when three records were selected from
a list view. An email message is sent for each selected record:
To change the address in the From line in Rollbase-generated email messages, open the account settings
page and change the value for Default Email Sender. For information about advanced setup and administration,
see Advanced setup and administration on page 791.
The screen contains the following fields:
Transferring owners
If an object has a relationship with the built-in User object, records can be associated with a particular user.
Click Transfer Owners in the group actions menu to quickly change the ownership of the selected records
from one user to another. This option is only available if the object definition has at least one relationship with
the User object.
If you add a lookup field for a related object in a Mass Update page, the updates follow the rules defined for
the relationship. For example, in a relationship where one device can only be related to one room, if a user
selects that device, it will only be updated in the first record.
To support updates of different sets of fields on the same object, you can create multiple pages by cloning the
the Mass Update page in the object definition. When multiple Mass Update pages exist for an object, Rollbase
adds them as an option to the group actions menu. The following screen shows an example of a menu option
for a custom Mass Update Furnishings page that an administrator added to this object definition.
4. In the left pane, select the fields you want to expose for mass update and drag them to a section in the
page.
You can use the default section, add your own section, or both.
5. When the page contains all of the fields for mass update, click Save.
3. Choose whether the update trigger should run when you save.
4. Fill in the values for the fields that you want to update. Blank fields will not be updated.
For example, the value in the following screen will cause the selected records to have sound system in their
Device field.
5. Click Save.
Tagging records
A tag is a label used to describe one or more records. Records tagged with keywords show up as matches for
searches on any of those keywords. In addition, when you view a record with tags, you will be able to see all
the tags affixed to that record, along with how many different users tagged that record with the same keywords.
Clicking a tag automatically performs a global text search for that keyword and displays the search results.
Tags must be enabled per object by selecting Show "Tag" Option in the Optional Object Properties section
of the object definition:
After an application contains the appropriate objects and relationships to capture data, you will likely want to
add logic that uses or transforms that data. Rollbase supports this through templates and formulas. Templates
allow you to define a structure for calculating and displaying information. Templates contain tokens, which are
variables that the runtime replaces with values from the object currently in scope. Formulas are interpreted as
Javascript expressions, they describe how to calculate values. If a template contains formulas, the runtime first
parses the merge tokens to obtain the values. Once the values are obtained, the runtime evaluates the Javascript
expressions using the appropriate values.
For example, suppose an object contains fields for quantity and price and you want to calculate the price of a
particular quantity. Using the tokens, {!quantity} and {!price}, which correspond to fields in the relevant
object, the runtime will handle them in a formula as follows:
Templates Where and How Used Formulas Where and How Used
Page HTML and Script Create in page editor Object formula fields Object definition
components
Object template fields and Create in Object definition Trigger conditions and Part of trigger definition
integration links expressions that determines when
trigger will run or what
value to use as a result
Templates Where and How Used Formulas Where and How Used
Object Record Name Object definition to Workflow action conditions Part of workflow definition
Template automatically generate that determines whether
record names workflow should proceed
Mail Templates Object and workflow Field validation conditions Object field definition
definitions to dynamically
generate e-mails
• Formulas
• Multi-currency support
HTML components
HTML components allow you to customize the way a page displays. You can use them on application or portal
pages. You can add formatting with stylesheets and HTML code. The Template Helper makes it easy to add
data elements, perform calculations, or call Rollbase APIs to perform functions. You can also use string tokens
in HTML components. See Creating and using string tokens on page 359 for information about custom string
tokens. To add Javascript formulas to an HTML component, insert them in <script> elements.
As a simple example, suppose you want to provide a greeting to the current end user on an application page.
You can simply add an HTML component to the page and use a token to retrieve the name. The following
shows how to use the Template Helper to find the token for selecting the current user and filling in the first
name:
With the user Adam Ministrator logged in, Rollbase renders this template as follows:
Script components
Script components can perform calculations and handle events using JavaScript. You can also use string
tokens One use of a script component is to customize page content when the page is loaded. For example,
suppose you want to hide a field and its label when the page is loaded. The following script shows how to
structure an event handler in a script component, in this case, an event handler for the
rb.newui.util.customEvents.rbs_pageRender event, which occurs when a page is loaded using an
AJAX request, the response to the request has been received and rendered.
<script>
rb.newui.util.addEventListener(rb.newui.util.customEvents.rbs_pageRender,function(){
console.log('page is rendered');
rbf_showOrHideField("Checkbox",false);
});
</script>
1. Navigate to the page you want to edit and click Design This Page to open the page editor.
2. If the page does not contain a section to hold an HTML component, drag a New Section component from
the left pane onto the page.
3. In the left pane, select New HTML Component and drag and drop it on the page on the right pane.
4. If the tenant supports multiple languages, you can create content in each language by selecting the language
from the drop-down menu. See Translating application component names and labels on page 821 for more
information.
5. Click Edit to display the Edit HTML page.
6. In the text box below the formatting bar, create the template for your page.
7. Use the Template Helper area of the editor to insert tokens that select values:
a) From the left drop-down menu, select the type that you want to retrieve values from.
b) From the second drop-down, select the field value of interest to display the token required to extract that
value.
c) From the field below the drop-downs, select the token value and paste it in the template body.
8. Click Save to save the template and return to the page editor.
9. Save the page.
1. Navigate to the page you want to edit and click Design This Page to open the Page Editor.
2. If the page does not contain a section to hold a script component, drag a New Section component from
the left pane onto the page.
3. Add a script component by dragging and dropping it on the page.
4. Click Edit to display the Edit Script page.
5. Insert the script for your page.
6. Use the Template Helper area of the editor to insert tokens that select values:
a) From the left drop-down menu, select the type that you want to retrieve values from.
b) From the second drop-down, select the field value of interest to display the token required to extract that
value.
c) From the field below the drop-downs, select the token value and paste it in the template body.
1. In an Object definition page, scroll down to the Fields section, click New Field and select Template or
Integration link as the Field type.
2. If you chose Template, enter HTML for the field's body and embed any Template merge tokens as needed
using the merge field helper.
3. If you chose Integration link, enter link URL.
4. Preview the resulting field by clicking the Preview Template or Preview Link link.
In this example, a related field on the Order object points to the email address of a related user. This
related field will display a link to send an email to that user. To add a link to send an email using Order
fields to a different related email address, create a template field with the following HTML Template:
<a href='../m/send.jsp?act=clean&id={!id}&
objDefId={!#OBJ_ID.order}&to={!relatedEmail}'>{!relatedEmail}</a>
This template will render a link to a Send Email page using fields from the current Order record, and
the email address from the related field.
• Prefix (optional) is the integration name for the relationship, if any. For example: R123456. For hierarchical
relationships, it additionally includes #C for the child side of the relationship and #P for parent side of the
relationship.
• TokenName (mandatory) represents the integration name of the field.
• Suffix (optional) includes additional instructions on how to render a given token.
If you do not specify a suffix, the field is rendered as HTML for HTML templates and plain text for text
templates. For example, in HTML templates, a checkbox will be rendered as an image (a checked or
unchecked box) and an object's name field will be represented by a link to a record view page.
If you create custom string tokens, the syntax is {!#token_name#}. See Creating and using string tokens
on page 359 for more information.
Several unique tokens can be used to build links within template components (use actual object integration
name instead of objName). For example, a URL generated by #REPORT token can accept filtering parameters:
All fields from the currently logged-in user and current customer are available for use in templates:
Common tokens
The following tokens are commonly used in templates and formulas:
Advanced tokens
The following tokens provide advanced functionality that you can use in templates and formulas. Rollbase
replaces the token with the content described below:
{!#PORTAL.688851.705908#url} URL of the portal page with the specified original ID.
This token can be used in the user interface.
{!#PORTAL.688851.705908#emailUrl } URL of the portal page with the specified original ID.
This token can be used in emails.
{!#PORTAL.688851.logout#url} URL to the logout page for the portal with the specified
original ID
{!#PORTAL.688851.logout#link} Link to the logout page for the portal with specified
original ID
{!#REPORT.123456#url} The resource URL that generates the report with the
specified original ID.
3. Click Add.
4. Enter the string token value and a Token Name. The following screen shows an example string token that
evaluates to a welcome message for the Lending Library application:
3. Copy the token from the Template Helper and paste it into the editor pane where desired. You can format
the token's appearance as shown in the following screen:
4. When you have finished editing the HTML component, save it.
5. Click Save in the page editor.
Rollbase will render the above HTML component on the application page. The screen below shows the resulting
text:
To include string tokens in a published application, you must attach the string tokens to the application. Follow
these steps to attach string tokens to the application:
1. Navigate to the application's setup screen.
2. From the More actions menu, select String Tokens. The Attach String Tokens screens opens.
3. Select the string tokens to attach to the application from the Available column and use the arrow to move
them to the Attached column.
4. Click Save.
Note: Having too many loops in templates and formulas may result in performance degradation, because
Rollbase will retrieve many records from the database to compute the results. Use template loops with caution.
In many cases Group Functions or the Query API are better alternatives.
For example, the following Template code renders a list of related items:
<ul>{!#LOOP_BEGIN.R8011504#8108944}
<li>Item: {!R8011504.R8011504} Amount: {!R8011504.amount}</li>
{!#LOOP_END.R8011504}
</ul>
Note: The #LOOP_BEGIN token uses original ids of views that will be preserved when your template is published
as a part of an application and installed in another tenant.
Rollbase does not support nested loops (loops within a loop). If you need nested loops consider using an API
instead. For example, to use template tokens from parent record while looping through related record use
object integration name (of parent record) as prefix, try the following:
<ul>
{!#LOOP_BEGIN.R8011504#8108944}
<li>Bill: {!order.name} Amount: {!R8011504.amount}</li>
{!#LOOP_END.R8011504}
</ul>
Using similar syntax you can loop through related comments and activity trail records. The following example
displays two last activity trail records:
<ul>{!#LOOP_BEGIN.$ACT_TRAIL(2)}
<li>{!$ACT_TRAIL.content}</li>
{!#LOOP_END.$ACT_TRAIL}</ul>
Use the object's integration name as prefix for merge fields used inside loops through all records. Example:
{!#LOOP_BEGIN.all#479484}
{!order.name}
{!#LOOP_END.all}
Instead of {!name}, the {!order.name} token causes Rollbase to replace the merge field with the related
record's name rather than that of the parent object record.
The following example loops through records but renders <img> tag only for records with amount > 1000:
<ul>
{!#LOOP_BEGIN.R8011504#8108944}
<li>#EVAL[{!R8011504.amount}>1000 ? "<img src='important.gif'>" : ""]
Bill: {!order.name} Amount: {!R8011504.amount}</li>
{!#LOOP_END.R8011504}
<ul>
Email templates
Email templates provide convenient way to generate title, body, and attachments for template-based emails
manually from within Rollbase (for a single record or a group of records). Email templates can be used in/with:
• Email Template fields, see Email Template Field on page 1350.
• Send Email workflow actions, see Workflow actions on page 415
• Workflow triggers, see Trigger overview on page 381
Note: Only users with access to the Templates menu can manage mail and other templates. See The Private
attribute on page 741.
When configuring email triggers, email actions, or sending a group of emails, you can use template syntax to
choose the recipients for the To, CC, and BCC lines. Select an available field of type Email Address from Use
Field drop-down list. That will append the selected token to the Send To text box. You can re-arrange tokens
or move them to another text box. Use space " ", as separator between tokens.
The Email Addresses template only supports tokens for Email Address fields. Other tokens will be ignored.
A single email will be sent and received by all email addresses specified in the Send To, CC or BCC box. If
you wish to send individual email messages - do not specify multiple email addresses.
Document templates
You can create Rollbase document templates by uploading text or binary files. Document templates can be
used to generate documents such as quotes, purchase orders, reports, and invoices from the values in object
records. Templates can contain content for languages that read right to left (RTL). See Right to left support in
templates on page 372 for details.
Rollbase supports the following document formats for templates:
• Document Template fields; see Document Template Field on page 1349 for more information.
• Template Document workflow actions; see Workflow actions on page 415 for more information.
• Workflow Triggers; see Change Workflow Status on page 393 for more information.
• Template-based Reports; see Working with reports on page 448 for more information.
When modifying an existing text-based template (XML, TXT etc.) you have an option to edit text directly rather
than uploading a new file. In this case, the Template Helper offers the following options:
The graphic below shows the parsed template populated with real data. You can see that original tokens are
replaced with actual values and the styles of the Microsoft Word document are preserved. The date field uses
the date format configured in the current user's tenant. The loop through related records now includes a table
row for each related record (under the Catalog Item column).
Note: In Rollbase Private Cloud, PDF templates are only available if you purchase and install the appropriate
software (see Third party software you can install on page 835).
From the list of templates, click Map Form Fields (available only for PDF document templates) to bring up the
mapping page.
It is not always easy to figure out how particular PDF field must be used as their names might not be informative.
Therefore, we recommend that you first map all fields to easily recognizable tokens and preview the result of
mapping. To preview the resulting document,click the template name to view the template. In the template view
page, click Preview. The following shows the view page for a PDF template.
Note: A writable PDF form remains writable after data is populated. Select the Flatten Populated Form check
box on the Edit Template dialog to make the resulting PDF non-editable.
In the following example, boxes 5 and 6 were populated from a sample record using the mapping shown above:
1. Create the document that will be used as a template in one of the supported formats described in Document
templates on page 366.
Where appropriate, use tokens as described in Template token syntax on page 354, loops as described in
Iterating through records on page 362, and JavaScript expressions as described in Using EVAL blocks on
page 364.
2. Open the Object definition (See Viewing and editing an object definition on page 301) for the object whose
values you want to insert when generating documents.
3. From the navigation banner, click Templates to jump to the Templates section.
4. Click New Document Template.
The Define Document Template page opens.
6. In the Document Name Template field, add a name for the document template. You can use the template
helper to get tokens which could be used to generate file names. If you do not input any value, the name
of the document template is used as the file name by default. Special characters are converted to underscore
in file names.
• You can use the Preview Template link to preview the name of the file that will be generated for the
selected object. If you modify the field values or tokens, the file names will automatically change to take
the new values.
• The generated document template names will be reflected when the document template field token is
used.
Note: It is recommended to use relevant field tokens to name a document template. Avoid using tokens
with special characters or long values (for example, image field tokens and report tokens).
7. In the Upload File field, click Browse to select and upload the prepared template file.
8. Click Save.
Communication logs
Communication log records are used to keep track of email messages, phone calls, and other forms of
communication. Unlike audit trail entries, you can add fields to the communication log object definition and
modify its pages and views. Communication log records can be created, edited, or deleted by anyone with
sufficient permissions.
When an object with the Contact attribute enabled (on new or existing objects) Rollbase automatically creates
a relationship with the communication log object and adds list of related communication log records to the
record view page. Otherwise you can create a relationship with a communication log object using the New
Relationship link. For more information on relationships, see Relationships between objects on page 317.
Please note the following:
• The New Communication Log page must include the hidden field Related To. Do not remove this field
from the page.
• The Related To field must be populated with a valid parent record ID when creating a communication log
record programatically.
• Incoming gmail messages can be converted into communication log (see Incoming Gmail on page 709).
Localization
Rollbase provides full support for localization, including various date formats, currency formats, and multi-lingual
support. See My Localization Settings page on page 793 for more information.
If you have defined one or more new record templates for your object definition, a drop-down list of these
templates is displayed on the new page for that object definition. Selecting one of them will initiate cloning of
the record using the selected new record template.
You can also use new record templates in create related record workflow actions. For information on workflows,
see Workflow overview on page 413.
For HTML document templates, you can override this behavior and render text RTL for the whole document,
for individual elements, and within an element for a portion of the text. The following attribute and element
enable this control:
• The dir attribute — This attribute specifies the text direction. Its possible values are ltr, rtl, and auto,
where auto renders the text based on the language. Add this attribute to an HTML element, such as a
section or paragraph, to specify the text direction. For example, to render the entire document as RTL, add
it to the html element:
• The bdi element — This element isolates a part of text that might be formatted in a different direction from
other text outside it. It is helpful when the user-generated content has an unknown direction. For example,
if a parent element sets the dir attribute to rtl, and user-generated text could be in Spanish, using the
bdi element ensures that the text is rendered in the appropriate direction.
For Microsoft Word document templates (DOC/DOCX), the default alignment is left. You can use the rich text
editor to keep headings and other titles right aligned.
For XLS, XLSX, RTF, TXT, and XML document templates, you can align the text as required for the language.
Mail templates
To use RTL text in mail templates, do the following:
• Set the email encoding to UTF-8 on the My Settings page on page 792.
• When creating a mail template, select HTML as the format. See Email templates on page 365 for information
about creating mail templates. Use the dir attribute and the bdi element as described above to format
the text direction of the HTML content.
For more information about language support, see Language support on page 815.
Formulas
Formulas are text templates sent to the JavaScript engine after parsing (i.e. after all merge field tokens have
been replaced with real data). The JavaScript engine executes the formula and returns a single value to the
caller.
In such a case, the formula's body will be wrapped into a JavaScript function and the resultant function will
represent the formula's result.
function calcStr() {
var y={!amount}*{!discount};
return formatNum(y);
}
calcStr();
Important: If you are using custom-defined functions, your Formula cannot be automatically wrapped and hence
cannot include a return statement outside of a function. In this case place exactly one function call at the end
of your Formula as shown above. The result of this call will be used as the result of the entire Formula. The
Formula's resulting value must be of a certain type that depends on where the Formula is used:
On the other side if you wish to process errors generated by part of your formula
(for instance, Server-side API) you can use try / catch block. Example:
try {
rbv_api.update(...); // Call which may throw Exception
}
catch (e) {
// Process Exception without terminating further execution
}
Note: Formula validation only checks JavaScript syntax validity. For more detailed debugging, use the Debug
Formula button.
Click Debug Formula for detailed debugging. Select the object record to run the formula on in the lookup
window. As illustrated in the following screen shot, the debugger shows the following information:
• Original formula
• Formula parsed using the selected record's data (with line numbers on the left for convenience)
• Debugging output (if any)
• Result of formula calculation
• Error message (if any)
If a particular line in parsed formula is causing an error, that line will be highlighted.
Note: Database transactions cannot be executed in the formula debugger. This means that a formula that
creates, updates, or deletes records will fail in the debugger.
If your formula has no errors, but does not produce the results you expect, you can open the console in your
browser to view any output resulting from running the script, including error messages. To open the console
in Chrome, use the keyboard shortcut command Ctrl + Shift + i or click F12. To open the console in Firefox,
use the keyboard shortcut Ctrl + Shift + k or select Web Console from the Web Developer submenu.
Note: For simple operations like SUM and COUNT, looping through related records should be replaced by
much more efficient group functions as described in Group functions on page 378.
You can also use custom string tokens in formulas. See Creating and using string tokens on page 359 for more
information.
Note: Avoid using the default constructor new Date() since it will return date in server's time zone which
may be very confusing. Date("{!date_field}") will create a Date object corresponding to your date field.
Note: String representations of date fields in formulas (e.g. the merge field {!date_field} above) automatically
uses the correct time zone from the current user. To ensure that current date uses the correct time zone as
well, use the getCurrentDate() API.
3. Add this formula field to views and view pages as needed. It will generate HTML with an image field which
depends on the record's status.
Note: Please note that the formula above uses status integration codes rather than IDs. This approach ensures
that the formula above can be published as part of application and installed without requiring changes. Never
rely on IDs in formulas if you plan on publishing your application.
Note: Rollbase Private Cloud customers may change the limits specified above. For information about
configuring Private Cloud, see shared.properties on page 926.
For obvious reasons, server-side formulas cannot make use of the Document Object Model (DOM) or third-party
JavaScript libraries. However, core JavaScript objects (Math, String and Date) are available for server-side
scripting. If a formula or template is used within another formula or template, it will be evaluated before being
used. However, this useful feature can result in endless recursion (consider Formula field my_formula with
body {!my_formula}+1). To prevent endless recursion, the system limits maximum recursion level (number of
times formula is called from within another formula) to 10.
Group functions
Group functions are used to calculate the value of an expression from groups of related records.
Note: Group functions are retained for backward compatibility. If you know SQL, use Query APIs instead of
group functions because all the operations that you can perform using group functions can also be performed
using Query APIs.
You can also run group functions on the entire set of object records. Use the object integration name instead
of a specific relationship name, such as:
#CALC_SUM.invoice( amount | true )
When writing expressions and conditions for group functions do not use tokens from the Select Merge Token
box; rather, use the Group Token box for fields from related records.
Note: Inside a group function body, you must not use tokens in {! .. } format or equate hard-coded numeric
or string values with the special tokens. For example, the TODAY token specifies the current time, but you
cannot get yesterday’s time using (TODAY-1). This results in an error.
Whenever faced with a restriction using group functions, consider using the Query APIs as an alternative (see
Query API on page 990).
Group functions use SQL syntax rather than JavaScript syntax for expressions and conditions. In simple cases
you may not notice a difference. For Group Function conditions you can use the following special tokens:
• Maximum value of amount field among related records created in the current quarter:
#CALC_MAX.R8011457( amount | createdAt>=QUARTER )
• Count the number of related records where address1 field is not null:
#CALC_COUNT.R8011457( address1 )
• Sum the amount field for all invoice records with a due_date after January 1st current year:
#CALC_SUM.invoice( amount | due_date>=YEAR );
Unnecessary quotes
You can often use the fact that template tokens will be replaced with real, non-quoted values to your advantage
by simplifying token concatenation. You don't have to use JavaScript to concatenate tokens - the template
parser can do it for you.
Formula Comments
The code inside the loop will be replicated for each record in the loop. A much more efficient approach would
be to use a JavaScript for() loop:
var ids = rbv_api.getRelatedIds("R123456", {!id});
for (var i=0; i<ids.length; i++) {
var ordered = ids[i];
rbv_api.runTrigger("order", orderId, "trUpdate");
}
In this example, the formula obtains a list of related IDs, loops through them all and invokes a trigger on the
corresponding related record. You may also use Query API to extract data instead of loops through data records.
Warning: If a number record in a loop is large you may hit timeout limit for formula execution.
Using Comments
You can use valid JavaScript comments in your formulas. However please keep in mind that:
• Comments enlarge total length of formula and may potentially lead to hitting limit on overall formula length.
• Avoid using //-style comments since they may lead to error should carriage-return in your formula accidentally
be lost. Use the /* */ style for comments in JavaScript formulas.
Note: In addition to the built-in trigger types explained in this documentation, Rollbase Private Cloud users
can develop custom triggers using Java code (Developing a custom trigger on page 390).
Trigger overview
Triggers can perform automated validation, notification, and data manipulation. You can configure triggers to
fire upon events such as record creation, update, and deletion, as a result of a workflow flow action, and you
can run triggers manually.
The triggers available for an object depend on that object's properties and components. For example, some
triggers are only available when object attributes such as Workflow or Audit Trail are enabled. Others depend
on components that you must create first, such as a conversion map or template. The timing options available
also depend on the type of trigger you are creating.
A trigger is associated with an object definition. You can view or create new triggers from the Triggers component
table. Depending on the type of trigger, its formula can calculate and set values or specify a condition that
causes the trigger to fire.
To conditionalize a trigger, specify a formula that returns a boolean value. If the value evaluates to false or null
for a particular record, the trigger will not run on that record.
For example, to run triggers only for large orders, you could use a formula such as:
{!amount} > 10000
A single line of JavaScript such as that shown above that evaluates to true, false, or null does not require a
return statement. However, multi-line conditions such as those shown in other examples do require a return
statement.
When defining a trigger you can also specify:
• Whether or not the trigger is deployed. Undeployed triggers will not run.
• An integration name, which is good practice and allows you to invoke the trigger using the rbv_api.runTrigger()
on page 1020 method.
• Whether to run a trigger only when a particular field has changed its value (this will only affect After Update
triggers). You can use template and formula fields in this condition, allowing you to determine whether or
not the trigger should fire based on changes to a group of fields instead of a single field.
• If a trigger updates an existing record or creates a new record, you can specify whether dependent triggers
(before/after update, before/after create) should also run. Use this option with caution, since it may lead to
inefficient nested trigger invocations.
Built-in triggers provide the following capabilities, which are described further in the linked content:
The following topics provide guidance on using triggers and the general steps for creating them:
On Finalize After input from grid controls, embedded quick create, and survey components (if present on
processed. This option only applies when an individual record is created or updated through the
and not through an API.
• Efficient:
({!amount} > 1000)
• Inefficient:
if ({!amount} > 1000)
return true;
else
return false;
2. Avoid looping through related records. Use group functions instead (looping through related records can
seriously affect performance).
3. Always use integration codes instead of IDs for status and picklist items (this applies to template fields and
formula fields as well). Logic based on IDs will not work correctly in applications published to other tenants
because the IDs change.
You can also specify criteria to run a particular trigger periodically, including the maximum number of times to
run. The example below shows a trigger that runs every week starting from the last record's update, up to 3
times.
You can view stored delayed triggers by clicking Queue on an object view page. A queue displays up to 1000
stored triggers and shows when they will run. It can be filtered by the selected object record.
When setting triggers to run after a delay or repeat, keep the following in mind:
• The Debug Formula button in the trigger formula editor for delayed or recursive triggers uses the Server
API role to calculate permissions.
• If a Date field is used as relative point for a delayed trigger, its value is interpreted as 12:00 am. in the user's
time zone. If a Date or Date/Time field has no value, no delay will be set and the trigger will run immediately.
See Debugging delayed triggers on page 413 for more on debugging delayed triggers.
Creating a trigger
This topic covers general steps to create a trigger. For specific examples, see Example: Set field based on a
workflow status change on page 409, or watch Web App Trigger Examples to see how triggers can update fields
in related records and create new records.
• Deployment Status — If checked, the trigger will run. If unchecked, the trigger will not run.
• Trigger Timing — Causes the trigger to fire during events in a record lifecycle. See Trigger timing options
on page 384 for details.
• General Properties — Enter a name and an integration name. If you selected Before Update or After
Update timing, choose the field(s) for which an update should fire the trigger.
• Trigger Properties — Read the Tip to understand what type of formula the trigger expects. Use the
Template Helper and formula editor to create and validate the expression. See Best practices for trigger
formulas on page 385 for more information.
• Trigger Delay Time — Optionally, set a delay time. See Delayed and repeating triggers on page 386 for
details.
• Recursion — Optionally, set times for the trigger to repeat. See Delayed and repeating triggers on page
386 for details.
6. Click Save.
Rollbase creates the trigger and it appears in the Triggers table in the object definition. You can control
the order in which triggers fire by reordering them in this table.
To develop a custom trigger, you must understand how Rollbase represents a trigger programmatically. A
Rollbase trigger requires the following programmatic and configuration definitions:
• A no-arguments constructor
• A method that will authenticate users by login name, password (which is passed from the login page)
and IP address, which returns true for success and false otherwise:
2. Create a design-time class that defines trigger properties. This class must implement the following abstracts
methods:
3. Create a runtime class that defines the trigger action. This class must implement the following abstract
methods:
• trigger(): Performs the trigger-specific action. Put trigger logic inside this method
To perform the trigger-specific action, a runtime class can use the TriggerRunner instance passed as a
parameter to get necessary run-time information, including:
Warning: Do not create, commit, or rollback transactions in your custom trigger code as it can
corrupt data.
Note: Custom Development Toolkit provides a sample run-time class, CustomTrigger.java, for your
reference.
4. When compiling your custom trigger code, include the following Rollbase JAR files in the CLASSPATH:
5. Modify events.xml configuration file and add the custom trigger’s event under the <events> tag in the
following format to make the custom trigger available in Rollbase:
<Event id="name_of_Run-time_Class"
className="fully_qualified_name_of_design-time_class"/>
For example, if your runtime trigger class name is CustomTrigger and design-time trigger class name is
CustomTriggerConfig, then add the following event in events.xml:
6. In the lang_en.properties file and, optionally, resource files of other languages, add the custom trigger’s
language translations in the following format:
name_of_Run-time_Class_name={Trigger_name_to_be_displayed_on_Rollbase_pages}
name_of_Run-time_Class_type={Trigger_type_to_be_displayed_on_Rollbase_pages}
name_of_Run-time_Class_descr={Trigger_description_to_be_displayed_on_Rollbase_pages}
For example, if your run-time trigger class name is CustomTrigger, then add the following entries in
lang_en.properties:
CustomTrigger_name=Custom Trigger
CustomTrigger_type=Custom
CustomTrigger_descr=Sample Rollbase triggers
Note: The Custom Development Toolkit provides a build.xml file that you can use to build a JAR file.
10. Restart your Web server for the changes to take effect.
Your custom trigger will then be available in Rollbase and appear as one of the trigger types on the New
Trigger page (Creating a trigger on page 387).
Trigger types
The following sections describe the types of triggers you can create.
The following formula example uses the query API to determine the ID of the record to be attached:
var arr = rbv_api.selectQuery("SELECT id FROM contact WHERE status=?", 'Ready');
var ids = new Array();
for (var k=0; k<arr.length; k++) {
ids[k] = arr[k][0];
}
return ids;
Note: You must create at least one relationship for the current object in order to use this type of trigger.
Note: You must create at least one workflow status before you can use this type of trigger.
Note: You must create at least one conversion map to convert the current record into another record to use
this type of trigger.
The ID of the newly created record is available for other triggers in the update chain through the shared value
named newID_objectName. The following Object Script example reads the ID of the newly created record
and creates an activity log record:
var newID = rbv_api.getSharedValue("newID_entity");
rbv_api.createActivityLog("entity", {!id}, "New record created: "+newID);
• A document template or template picklist field (which selects a document template based on the value of
that field for a given record) to use. See Document templates on page 366 for information about document
templates. See Document Template Field on page 1349 for information about template picklist fields.
• The File Field, which is a File Upload field that determines where to store the resulting template-based
document. See File Upload field on page 1346 for more information.
• An Email Template and a Send To email address to which to send the resulting document (optional). See
Email templates on page 365 for information about email templates.
You can create a Document Template Field on page 1349 that generates a new document each time you view
it. This trigger is similar, but it generates and stores the template document in a particular field and its contents
do not change even if other field values change.
Note: You must create at least one document template and at least one File Upload field before you can use
triggers of this type.
HTTP triggers
You can use triggers to send HTTP Get and Post requests and send SMS messages.
For example:
1. Create an HTTP GET or HTTP POST trigger.
2. Create an Object Script on page 396 and configure it to run immediately after HTTP trigger. Use the following
API calls in Object Script trigger:
Now you can analyze HTTP return code and response's body and perform appropriate action.
Tip: You can create powerful integrations by sending HTTP requests and then processing the results in a
subsequent Object Script Trigger. Please note that second etc. HTTP call will override shared values set on
the first call. Store these values in intermediate variables if you need to preserve them.
Note: You must create at least one text-based Document Template before you can use this Trigger.
Important: The HTTP POST Trigger does not add a header or footer to your XML document.
• An Integration Link field (which includes a dynamically generated destination URL template).
• A timeout (in ms) for the HTTP request
You can immediately debug your Trigger by selecting a record to run it on (click the icon). This sends the HTTP
GET request to the generated URL and displays the results in a popup window.
Result of HTTP GET request is stored in shared variables similar to POST request - see Send HTTP post
request on page 395.
Note: You must create at least one Integration Link field before you can use Triggers of this type.
The following example shows a URL template which reaches to Clickatell SMS Gateway
(https://www.clickatell.com/):
http://api.clickatell.com/http/sendmsg?user={!#SETTINGS.sms_user}&password={!#SETTINGS.sms_password}&
api_id={!#SETTINGS.sms_api_id}&MO=1&from={!#SETTINGS.sms_from}&to={!cell_phone#value}&
text=Your+verification+code+{!ver_code}
Please note:
• SMS credentials (user name, password, API ID, sender's phone number) are stored in Settings object.
Template tokens for these fields are used in URL instead of actual values.
• Template token for recipient's phone number uses #value suffix to remove any formatting.
• Explicitly provided text message must use URL encoding.
• HTTP response will include ID of sent message or error code.
Object Script
Object Script triggers run JavaScript, allowing the manipulation of multiple fields and records in one trigger via
server-side Query API calls. To use this Trigger, enter a formula that returns no value, but invokes one or more
Rollbase API calls (see Server-side API on page 989 for more information). The following example modifies the
amount field of an invoice record and prints a message displayed in the trigger debugger:
rbv_api.setFieldValue("invoice", {!id}, "amount",
{!amount}*(1-{!discount}/100));
rbv_api.print("amount after discount: "+
rbv_api.getFieldValue("invoice", {!id}, "amount"));
Progress recommends that only experienced Rollbase developers use Object Script triggers. See Debugging
complex triggers on page 411 for more information.
You can use all types of JavaScript in Object Script triggers including flow control constructions. To terminate
the flow of Object Script trigger, as well as all subsequent triggers, and to rollback the entire transaction, you
can throw a JavaScript exception:
if (something_is_terribly_wrong)
throw "Cannot perform operation - aborted";
• The relationship between the current object and a target object (if the relationship is multiple, triggers will
be invoked on multiple records).
• Either select a timing option on the target object to determine which triggers to invoke or explicitly select a
group of related triggers to run:
Note: If this trigger is used, Progress highly recommends using the trigger debugger to ensure expected
results. See Debugging complex triggers on page 411.
Note: Rollbase supports JSON REST services only. Also, you will not be able to invoke DELETE operation.
After you select REST service as the trigger type, you will be able to see the new REST service trigger page.
In this page, you must enter the trigger details. See Creating a trigger on page 387 for more information.
The high-level steps to configure a REST Service trigger include:
1. Provide a base path URL of the Rest Service, to which you want to connect, in the REST Service URL
field.
2. Select the required Http Method. Currently, Rollbase supports GET, POST, and PUT and the default option
is GET.
3. Select the required Authorization type. By default, No Auth selected. Rollbase also supports basic
authentication. When you select Basic Auth option, you need to provide the username and password.
4. Click Configure to configure the Services and Mapping. The Configure REST Service page opens.
5. Optionally customize functions in the trigger formula.
6. Test and Debug the trigger.
Note: You can drag and drop the mappings to rearrange it.
When you use a Mapping pair, you can drag a Rollbase field and connect it to a new mapping pair. This adds
a new pair to the header with the key name defaulting to the Rollbase field integration-name (editable) and the
value maps to field token (non-editable).
Constant pairs are fixed (constants) irrespective of the records the trigger executes. These pairs can be used
to represent constant keys.
Note: The preview mapping option is available for all tabs. It hides all unmapped nodes from the tree. This
enables you to focus on the nodes you have mapped and easily verify the mappings. The preview can be
viewed by clicking on the eye icon. Preview mode can be closed by clicking on the crossed eye icon. When in
preview mode, you cannot edit the maps.
Configuring URL
The URL Builder tab allows you to build REST URL path segments with dynamic or constant values.
For example, if you want to build a URL with customerId as path segment, the cutomerId value should be
dynamically replaced from current record on which trigger is executed. You can easily achieve this by using
this URL Builder tab.
You can create a path segment by providing a name and a value (<RESTURL>/customers/{!custId}) or you
can just create a path segment which maps only to a value ( <RESTURL>/{!custId}). The value of path segments
can be mapped from Rollbase fields or created as constant values.
To configure URL:
1. Create new mapping pair and map your REST field to the new mapper.
2. Build the URL where value of the mapped field should be replaced with the record value on which the trigger
must be executed.
3. When you have finished mapping, click Configure Query Param
You can also build an URL with multiple dynamic path segments my creating more mapping pairs.
If you select " POST" or "PUT" as the Http Method, all mappings will be sent as json object in request body to
endpoint.
If you would like to change json structure, you can customize the generated code to update the structure. See
Overriding generated functions to provide custom behavior on page 403 for more information.
GET Request: This is used to get details from the REST endpoint by mapping the Rollbase fields as new
mapping pairs.
PUT and POST: These are used for creating and updating records on REST endpoint. For all PUT and POST
requests, mappings will be sent as json data.
Configuring Response
The Response tab allows you to configure Rest response data into Rollbase object field by creating a response
tree.
The response tree can be created in one of the following ways:
• Using the Invoke REST Service option that enables you to invoke the REST service with the header and
the request you have mapped using an existing record in Rollbase.
• Using the Copy & Paste JSON option and passing a sample Response into a text area.
When you use the Invoke REST Service option, you must:
1. Select record from the drop-down list and invoke a trigger or invoke REST service by either providing inline
values for all your mappings that are done in the Header, Request, and URL builder tabs. The Select
Record drop-down list will list top 10 records from your Rollbase objects.
2. Once the response tree is built, you can add/update/delete more nodes by using toolbar buttons. This is
useful if the schema is incomplete.
3. Select a node under which you want to add a new node.
4. Click the + icon to add a new node. Similarly, you can edit a node and change its datatype by using the edit
icon. You can also delete a node by using delete icon.
Note: At this stage, you can map a node from response object field to Rollbase object field (from right to
left of the tree).
5. Click OK to generate the code. You can then test and debug the trigger.
Note: Response data can be simple json object or have sub-objects returned in a json array. See Supporting
simple and complex cases in Response mapping on page 401 to know how response fields will be mapped to
Rollbase fields.
Simple case: For example, if you map REST response fields to Rollbase Base object fields, the REST response
field is mapped from simple Json object, there is a direct 1 to 1 correlation between the REST service data and
the Rollbase Object data.
When the REST response field is mapped to an array of Json object fields, then the first entry is picked from
the array of objects and is mapped to Rollbase Base object.
Complex case: The three available options when you map REST response containing sub-objects to Rollbase
Related objects are:
• Add sub-objects as new record: Enables you to add a new record and attach it to the base object
• Update an existing record: Enables you to map the fields that are used to uniquely identify the related record
in Rollbase existing records.
Note: You can map more than one field that can be compared against REST response. The fields will be
updated only if matched. If multiple mapping is done, all conditions should match to update a record (that
is, an AND condition).
• Update if existing else Add as new: Enables you to update an existing record option. However, if the condition
does not match, it will create a new record in Rollbase related object and attach it to the base object.
Note: When you add REST response sub-object fields to Rollbase related object fields, these options pop-up
while mapping the first sub-object field.
You can't map REST response fields from a different level or a same level (from different object) to a single
Rollbase related object. However, you can create another Related object and map fields from different REST
response object.
You should not change any code in the second section, labeled Generated code. If you change request and/or
response mappings, Rollbase regenerates this section of code.
The code in the first section contains function definitions that you can edit to customize processing and formatting.
Rollbase does not regenerate this code when you change mappings.
The functions you can edit and what each can customize include:
• formatDate() — Converts Date fields from Rollbase to a standard format accepted by the Decision
Service. Edit this function to change the format..
• formatDateTime() — Converts DateTime fields from Rollbase to a standard format accepted by the
Decision Service. Edit this function to change the format.
• updateURL(url) — Manipulates the URL before invoking request
• processRestRequestData() — Converts simpleJSON object which includes all mappings as properties
of the object for PUT/POST calls.
• processRestResponse() — Updates any record value or persists REST response to some Rollbase
field.
• convertResponseData() — Handles REST response and converts data to corresponding format based
on Rollbase field data type. This ensures that create or update records works.
Example customization
The example below shows how to override the processRestResponse() function to save the response in a field
in the Progress Bedford record:
function processRestResponse(jsonResponseString, jsonResponseObject,
requestDuration, requestStartDate)
{ /* Add post processing to the REST response before writing fields and objects
in Rollbase - by default we leave it untouched. */
// Example saving response to a field: rbv_api.setFieldValue
('ObjectName', '{!id}', 'Trace_Rest_Response', jsonResponseString);
The View page for Progress Bedford includes the response in the configured field:
Building Response
After the fields are mapped to configure query parameters, the response is configured by invoking the REST
Service. This enables you to build the response by selecting the Rollbase record you want to map to get the
response.
Result
The example trigger is configured to run after update. The following screen shows the the existing humidity
value for the city, Bedford:
After the record was updated, the following screen shows that the trigger received a response with the value
of the humidity:
Send Email
This trigger sends an email based on an email template. Alternatively, you can select an email template field
to use per record (this provides a way to dynamically determine which email template to use based on a field
value in the record).
Note: You must create at least one email template for a given object definition to create this type of trigger.
See Email templates on page 365 for more information.
Apart from the common trigger settings described above, you must select the recipient email address (and,
optionally, CC and BCC recipients). This can be a specific address (you can use the popup selector to choose
one), or an email address stored in one of the record's fields (use the Use Field helper). You must also select
the email template or email template field to use.
You can also type in text and formula fields which return one or group of (separated by space, comma, or
semicolon) valid email addresses.
You can also specify whether the Reply To field in a trigger-generated email should contain the email address
of the current user, the default auto-reply email address (defined in the Account Settings page), or an explicitly
specified email address.
Example 2: Update lookup field with multiple values (use JSON array):
[ 12345, 56789 ]
Note: If this formula evaluates to or returns null, the field's value will not be changed.
In addition, the following options are available when configuring the trigger:
• Access Control Policy — Most trigger types do not check permissions; however, the Update Field Value
trigger (along with the Change Workflow Status on page 393 and Create New Record on page 393 trigger
types) does check update and create permissions for the current user. When configuring a trigger of this
type you can choose what Rollbase should do when access is not allowed:
• Dependent triggers — Most triggers do not result in running other triggers; however, the Update Field Value
trigger (along with the Change Workflow Status on page 393 and Create New Record on page 393 trigger
types) does have the option to run dependent triggers after this one is completed by selecting the Run
dependent triggers after this one is completed check box.
Note: If you use this option, Progress highly recommends using the trigger debugger to ensure expected
results. See Debugging complex triggers on page 411 for information about the trigger debugger.
The formula used in this trigger must return a value that is used to update the selected field on the current or
related record(s). The expected return value depends on the type of the field to be updated as shown in the
table below:
Process Process ID
Another example:
if ("{!email}" == "" && "{!phone}" == "")
return "Either email or phone must be specified";
else
return null;
Note: You can choose the Treat this trigger as a Warning option to allow trigger execution to continue even
if there is an error message. In this case, if validation fails at runtime, the user will have a chance to check an
Ignore Warning checkbox and proceed with saving data despite the warning. This is similar to custom field
validation (see Field validation on page 310).
1. Create a workflow status named "Closed" and assign it the integration code "C."
2. Create a Date field for the object named "Closing Date." Only add this field to the view page so it is essentially
treated as a read-only field.
3. Create a workflow action named "Close" that changes the status to "Closed."
4. Create an Update Field Value trigger named "Record Closing Date" with the following configuration:
As soon as the status is changed to "Closed" (regardless of whether this change was invoked by the workflow
action, manual record editing, another trigger, API call, or other source of change), the current date will be
stored in a the Closing Date field as shown in the screens below.
Before status change:
Note: Delayed triggers cannot be debugged in the trigger debugger since the user is absent when they are
running. To debug these triggers consider running them without any delays. See Debugging delayed triggers
on page 413 for details.
To debug a trigger:
1. On the New Trigger or Edit Trigger page, click Debug Formula under the formula.
A selector window opens.
When debugging a Automating business decisions with Corticon rules on page 427, a fourth section, Debug,
is also included. This section displays the Corticon Server URL, the decision service request data, and the
decision service response.
The trigger formula debugger cannot execute database transactions. You can use the variable
rbv_debugFormula to conditionalize code that requires a database transaction and debug the rest of the
formula. This variable exists when user invokes the formula in the debugger, but does not exist when running
the actual trigger in the application.
Use the following code pattern to detect both cases. In this example, the function returns without creating a
record if the variable rbv_debugFormula is present and has a value.
function createRBRecord(rbObjectName,recordData,isAttachReq,attachData){
if(this.rbv_debugFormula !== undefined && this.rbv_debugFormula){
rbv_api.println("Skipping create record for "+ rbObjectName);
return;
}
varrecId=rbv_api.createRecord(rbObjectName,recordData);
if(isAttachReq===true && recId){
rbv_api.attach(attachData["relName"],attachData["objName1"],
'{!id}',attachData["objName2"],recId);
}
}
Workflow overview
To use workflows, you must first enable the Workflow attribute on the desired object definitions. This creates
a default record status named Created and a workflow process you can modify based on your specific needs.
The Workflow attribute is in the Advanced Attribute section of an object definition:
• Workflow status — Indicates the current state of a record. A current record's status determines the set of
currently available workflow actions.
• Workflow action — An operation that a user can perform on a record. The action can change the status of
a record, invoke one or more triggers, send an email, etc.
• Workflow process — A container for a set of statuses and actions that as a whole make up a particular
workflow
The following diagram illustrates a sample workflow process for handling orders. By defining workflow statuses,
it is possible to trigger actions based on an order's status change.
Workflow status
A status represents the current state of a record. Statuses are similar to picklist values, with a special meaning
in workflow. To define a new workflow status, you specify:
When you enable the Workflow attribute on an object, the system generates one default status named Created.
You can change the name of this status if desired. You can then add other statuses as needed. Statuses can
be assigned through workflow actions or explicitly by editing an object record. When editing an object record,
statuses are presented in sequential order. You can define this order by clicking Reorder in the Workflow
Statuses section of an object definition screen.
Workflow actions
A workflow action represents a manual action such as a click or a selection that changes a record's status,
sends an email, invokes a trigger, etc. Rollbase supports several types of actions as described in the following
sections.
When you configure a workflow status, you specify which workflow actions are available for records with that
status. See Workflow status on page 414 for details.
Access to workflow actions can be limited only to certain roles or users. For more information about access
control, see Access control on page 724.
You can configure a workflow action to appear as a button instead of in the actions menu:
The read-only field Workflow Actions renders links to available actions. This field can be added to record
view pages and as a column in list views:
You can reorder workflow actions to set the order in which they appear in any list. To reorder workflow actions,
navigate to the Workflow Actions area on an object definition page and click Reorder. Use the arrows to
reorder the actions.
If a group workflow action has formula-based condition, selected records will be filtered using that condition.
Note: If you choose this option, the Toolbar Responsive Overflow Rule drop-down list is enabled. See
Using buttons on pages on page 515 for more information.
• Change Status To — The new workflow status assigned as a result of the action
• Use Web Page — The page of type Status to open when changing the status (this allows presenting fields
for the user to enter or edit upon a status change) Alternatively, you can choose to run this action without
using a Status page, in one click.
• Triggers to Run — You can select deployed triggers to run when this action is completed.
• Action Condition Formula — A formula that returns true or false. If the formula returns false, this action
is not available for the current record.
• Permissions — Specify the role, user, or relationship-based permissions required to run this action. See
Access control on page 724 for information about permissions.
Note: If you choose this option, the Toolbar Responsive Overflow Rule drop-down list is enabled. See
Using buttons on pages on page 515 for more information.
• Change Status To — The new workflow status assigned as a result of the action (optional)
• Use Web Page — A New page to create a record of the selected type (this page will open when the action
is performed)
• Use Conversion Map — A conversion map to transfer fields from original record to the new one. For
information about conversion maps, see Converting records on page 329.
• Use Record Template — A record template to create a new record (ignored if a conversion map is selected)
• Action Condition Formula — A formula that returns true or false. If the formula returns false, this action
is not available for the current record.
• Permissions — Specify the role, user, or relationship-based permissions required to run this action. See
Access control on page 724 for information about permissions.
Note: If you choose this option, the Toolbar Responsive Overflow Rule drop-down list is enabled. See
Using buttons on pages on page 515 for more information.
• Change Status To — The new workflow status assigned as a result of the action (optional)
• Perform action without opening a new page — When selected, clicking this action sends an email
immediately without opening a new page.
• Reply To — The reply-to email address. You can select the current user's email address, the default email
address (Default Email Sender in account settings) , or type an email address in the text field.
• Send To — The destination email address or addresses. You can select email address fields from the
current record or from related records from the Use Field picklist.
• CC and BCC — Optional CC and BCC email addresses
• Email Template — The email template to use. If an email template picklist field is defined for this object,
you can alternatively select the field from the or Template Picklist picklist.
• Triggers to Run — You can select deployed triggers to run when this action is completed.
Note: For any email address field, you can also type in text and formula fields which return valid email addresses.
• Group Action — Check to allow this action to be performed on group of records selected in a list view
• Change Status To — The new workflow status assigned as a result of the action (optional)
• Document Template — The document template to use. If document template picklist field is defined for
this object, you can alternatively select the field from the or Template Picklist picklist.
• Triggers to Run — You can select deployed triggers to run when this action is completed.
• Action Condition Formula — A formula that returns true or false. If the formula returns false, this action
is not available for the current record.
• Permissions — Specify the role, user, or relationship-based permissions required to run this action. See
Access control on page 724 for information about permissions.
Note: If you choose this option, the Toolbar Responsive Overflow Rule drop-down list is enabled. See
Using buttons on pages on page 515 for more information.
• Change Status To — The new workflow status assigned as a result of the action (optional)
• Use Web Page — Select Standard "Run Triggers" page if you want this action to open a run triggers
page. Select None if the action should be performed without opening new page.
• Triggers to Run — Select the triggers to run and specify the order in which you want to run them.
• Action Condition Formula — A formula that returns true or false. If the formula returns false, this action
is not available for the current record.
• Permissions — Specify the role, user, or relationship-based permissions required to run this action. See
Access control on page 724 for information about permissions.
Workflow processes
A workflow process is a container for a group of workflow statuses and actions, moving a record from one
status to another. When the Workflow attribute is first set on an object definition, Rollbase creates one workflow
process named Default. In most cases, all records follow the same workflow and it is sufficient to have only
one workflow process.
In some complex cases, when workflow rules are different for different records, you can define more than one
workflow process. The diagram below illustrates two different processes for an order object: Small Orders and
Large Orders.
1. Open the object definition page (see Viewing and editing an object definition on page 301).
2. From the ribbon, select Workflow Processes to navigate to the Workflow Processes area of the page.
3. Click New Workflow Process.
4. Specify the Process Name and a Default Status to be used when this process is assigned to a particular
record. The newly created process will appear in the Workflow Processes area of the object definition.
To design a workflow process, you must first define workflow actions and workflow statuses that can be a part
of the process. All workflow statuses can participate in any workflow processes. Editing and viewing a workflow
process on page 422 describes how to edit and view your the workflow process.
1. Open the object definition (See Viewing and editing an object definition on page 301).
2. From the ribbon, select Workflow Processes to navigate to the Workflow Processes area.
3. Click the name of the workflow process to view it.
The workflow process view screen opens:
Approvals
An approval process is a special type of process in which the process must be approved by a specified group
of users. To create an approval process, you must install the Approvals application. An approval process starts
when a workflow action is run on a particular record and ends when the record is approved or rejected. Rollbase
provides a default implementation for this process that you can customize.
To configure an approval process, follow these steps:
1. Install the Approvals application on page 423
2. Create an email template on page 424
3. Select approvers on page 424
4. Set the Approval attribute on page 424
5. Set up the Approval process on page 424
6. Optionally, customize the approvals process on page 424
• A reference to the user being asked to approve or reject that record (approver)
• The current status of this approval: pending, approved, or rejected
Select approvers
Next, select a group of users who will participate in the approval process. Make sure the Is Approver check
box is selected for each of these users in the edit user page (if you do not see this box, use the page editor to
add it to the page. See Pages, the page editor, and grid controls on page 490 for more information).
Note: If you want more than one object to participate in approval process, enable the Approval attribute on
each object.
• After reviewing a record submitted for approval, the approver clicks Approve Or Reject, which opens the
approval page:
• If the record is approved, the sequential process will continue and an email will be sent to the next approver
in the sequence.
• If the record is rejected, the approval process will end and the record will be moved to the Rejected status
(any approver has veto power, except for the Tally Votes process described above. That is, an approver
can approve a rejected order or reject an approved order).
• When all approvers have approved the record, it is moved to Approved status.
You can associate triggers to run when a record's status is changed to the Approved or Rejected status. It is
common to configure a trigger to notify specific users when a record has been approved or rejected.
Record queues
A record queue is a type of workflow process specifically tailored for situations in which a queue of records of
a certain type need to be processed by a specific group of users. Rollbase automatically creates this workflow
process when you add the Queue attribute to an object definition. The Queue attribute will enable the Workflow
attribute if it is not already enabled.
When you enable the Queue attribute on your object definition, Rollbase will create the following:
• Two new workflow statuses: In Queue and In Process. The former is assigned by default to the first workflow
process of your object.
• A relationship between this object and the user object (if not already created).
• A new workflow action named Start Processing with a status change page (more details below). This page
assigns the current user to the record being updated. The Start Processing action is available for the In
Queue status and can be used for one record or a group of records. After the user selects the Contact
Owner user on the status change page and clicks Save, the record's workflow status is changed to In
Process.
• A view named In Queue, which shows only records in the In Queue status in the order that they were
created.
With these components in place, the workflow process works as follows:
Note: You can further modify the Start Processing action and make the entire workflow more sophisticated
by adding more steps to emulate your business process. The Queue attribute helps you start building such a
process with minimal effort.
• Access to a Decision Service compiled on and deployed using Corticon server version 5.6 or later.
• An understanding of the data expected by the Decision Service and expected results.
When configuring a trigger to invoke a Decision Service, you use a visual mappper to associate fields from
Rollbase objects with attributes and messages of Corticon entities. The Decision Service generates messages
to communicate the results of rule execution. You can map object fields to entity attributes and messages of
compatible data types or data types for which Rollbase can provide conversion. The visual mapper indicates
the data type next to object and entity fields, as shown below, where age is an integer and gender is text.
You can map fields from the object on which the trigger is defined and from objects directly related to it. For
example, if a trigger belongs to object A and object A has a relationship with object B, while object B has a
relationship with object C, you can map fields from A and B — but not from C, as illustrated below. The same
rule applies to Corticon entities.
The trigger supports mappings between related objects and entities with "to-many" cardinalities. When multiple
related records and entities exist on both sides, the trigger handles them in the request and response. If the
cardinality of the relationship for mapped items does not match, the trigger limits the scope of recursion. For
example, if a field in an object with many records is mapped to an attribute in an entity with a cardinality of one,
the trigger sends only the values from the first related record in the request. Likewise, on the decision service
side. When a mapping exists from an entity or message with a to-many association cardinality to a field in an
object with a cardinality of one, only the response or message from the first matching entity will be returned.
See Supported relationships for request mapping on page 430 and Supported relationships for response mapping
on page 431 for details.
Rollbase relationship and Corticon association cardinality notation displays in the mapping tool as follows:
• (*) — Indicates a multiple relationship with the base object or base entity
• (1) — Indicates a single relationship with the base object or base entity
The following screen shows the cardinality notation of the relationships between Car and Message and Car
to Person:
See the following topics for detailed information about how relationships and cardinality affect mapping:
For mappings that involve relationships with multiple records on the Rollbase side single entities on the Corticon
side, when the trigger executes, only values from the first related record will be sent in the request. For example,
the following request mapping maps a field from the related object Order Line to the base entity Item. The
relationship from Order to Order Line is one-to-many, so Rollbase only maps the value from the first Order
Line record as described in the fourth row of the table.
For mappings that involve many entities or messages on the Corticon side but only one record on the Rollbase
side, the response contains only the first matching response or message. For example, the following response
mapping maps a field from messages resulting from the decision service execution to a field in the Rollbase
Message object. Because the relationship from Applicant to Message is one-to-many in both Corticon and
Rollbase, running the decision service can create multiple Message records as described in the last row of the
table.
When there is a type conversion, the mapping tool displays nodes in orange and displays conversion type text
when the map is selected. The following screen shows a map with a type conversion from Date to Date/Time.
//Write your own logic to convert Corticon response to JavaScript Date object
//if the response doesn't match a supported date or Date/Time format.
return newDate(value);
}
else if(type ==='Integer'){
return Number(value);
}
else if(type ==='Boolean'){
return((value==='true' || value===true)?true:false)
}
return value
}
See Overriding functions to provide custom behavior on page 441 for more information about editing the trigger
formula.
Supported Date formats include:
• YYYY/MM/DD
• MM/DD/YYYY
• MMM d, yyyy
• MMMMM d, yyyy
• yyyy/M/d
• M/d/yyyy
Supported Date/Time formats include:
• YYYY/MM/DD h:mm:ss a
• MM/DD/YYYY h:mm:ss a
• MMM d, yyyy h:mm:ss a
• MMMMM d, yyyy h:mm:ss a
• yyyy/M/d h:mm:ss a
• M/d/yyyy h:mm:ss a
• MM/dd/yyyy H:mm:ss
• yyyy/MM/dd H:mm:ss
• M/d/yyyy H:mm:ss
• yyyy/M/d H:mm:ss
• MMM d, yyyy H:mm:ss
• MMMMM d, yyyy H:mm:ss
• MM/dd/yyyy HH:mm:ss
• yyyy/MM/dd HH:mm:ss
• M/d/yyyy HH:mm:ss
• yyyy/M/d HH:mm:ss
• MMM d, yyyy HH:mm:ss
• Example trigger mapping to related objects on page 443 illustrates request mapping from multiple Rollbase
objects.
• Example trigger mapping where response creates a record on page 445 illustrates response mapping that
creates new Rollbase records.
• Use application settings to configure access for all triggers in an application. You can specify different URLs
for development, staging, and production servers and switch between instances. Rollbase uses the server
you select until you change the settings. Access application settings from the Application Switcher menu.
See Editing applications for details.
• Provide a URL in trigger configuration. When configuring the trigger, specify the Corticon Server URL, the
User Name, and the Password as shown below. You cannot configure the connection in the trigger if the
application settings exist.
1. From the New Trigger screen, click Configure in the Corticon Configuration area.
Note: You must configure acces to one or more Corticon Servers before performing this step. See
Configuring Rollbase to access Corticon Server on page 437 for details.
The mapping tool opens and displays a list of Decision Services available on the configured Corticon Server.
2. Select the Decision Service you want to invoke from the list of services. To locate the service, click the filter
button next to Service Name, Major Version, or Minor Version and enter a filter condition.
4. Optionally filter the list of Corticon entities by clicking the filter icon next to Corticon Object and selecting
the entities required for the mapping.
5. To map a field, select a circle next to a Rollbase field and drag the arrow that appears to a circle next to a
Corticon attribute. Note that you can only map fields and attributes, not objects and entities.
As you drag the arrow, the circles next to the Corticon attributes change color, indicating the data types are
compatible. Attributes that do not require conversion display green circles and fields that require conversion
display orange circles as shown below. When you map to a attribute that requires conversion, the conversion
will display above the arrow when it is selected. Attributes that display red circles have incompatible data
types and you cannot map to them. See Supported data types and conversions on page 433 for a complete
list of supported data types and conversions.
6. When you have finished mapping, click OK to exit the mapping tool or click Response to map the response.
If you exit the visual mapper, you will need to open it again to map the response.
Response mapping
The following procedure assumes that you have already mapped the request and that the mapping tool is still
open. If the mapping tool is not open, click Configure in the Corticon Configuration area on the new or edit
screen of the trigger. If you have already selected a decision service for the trigger, the Input/Output mappings
screen opens and displays Rollbase objects and fields on the left and Corticon entities and fields on the right.
By default, the Request tab is selected; click the Response tab. If you have not selected a decision service,
select a service as described in Request mapping.
Note: You must configure access to one or more Corticon Servers before performing this step. See Configuring
Rollbase to access Corticon Server on page 437 for details.
2. Optionally filter the list of Corticon entities by clicking the filter icon next to Corticon Object and selecting
the entities required for the mapping.
3. To map an attribute or message, select a circle next to a Corticon field and drag the arrow that appears to
a circle next to a Rollbase field. Note that you can only map to fields, not to entities.
As you drag the arrow, the circles next to the Rollbase fields change color, indicating the fields whose data
types are compatible with the Corticon field. Fields that do not require conversion display green circles and
fields that require conversion display orange circles as shown below. When you map to a field that requires
conversion, the conversion will display above the arrow when it is selected. Fields that display red circles
have incompatible data types and you cannot map to them. See Supported data types and conversions on
page 433 for a complete list of supported data types and conversions.
4. When you have finished mapping attributes, click OK to exit the mapping tool or click Request to map the
request.
You should not change any code in the second section, labeled Generated code for Corticon Service trigger.
If you change request and/or response mappings, Rollbase regenerates this section of code.
The code in the first section contains function definitions that you can edit to customize processing and formatting.
Rollbase does not regenerate this code when you change mappings.
The functions you can edit and what each can customize include:
• processCorticonRequest() — Edit this function to add post processing to the request before sending
it to the Decision Service.
• processCorticonResponse() — Edit this function to add post processing to the response before writing
data to Rollbase records.
• formatDate() — Converts Date fields from Rollbase to a standard format accepted by the Decision
Service. Edit this function to change the format. The format needs to be supported by Corticon.
• formatDateTime() — Converts DateTime fields from Rollbase to a standard format accepted by the
Decision Service. Edit this function to change the format. The format needs to be supported by Corticon.
• formatPickListValue() — Converts Picklist values from the Decision Service's response. Edit this
function to customize the conversion.
• convertRequestData() — Converts request data by type; calls formatDate() and
formatDateTime(). Edit this function to add conversions for different data types.
Example customization
The example below shows how to override the processCorticonRequest() and
processCorticonResponse() functions to saves the request, the response, the duration, and the timestamp
in fields in an Order record:
function processCorticonRequest ( requestData ) {
/* Add post processing to the Corticon request before making REST call -
by default we leave it untouched. */
return requestData;
}
return corticonResponseObject;
}
The View page for Order includes a page tab that displays this information:
Request mapping
The request mapping maps fields such as Make, Model, and Gender from the Car and Person objects.
Response mapping
The response mapping maps the result of the calculation to estimate the premium to the Insurance Premium
field in the Rollbase object. Note that the Request entity node on the Corticon side is just a user-specified label.
Result
The example trigger is configured to run after create or update. The following screen shows the the values for
a new record:
After the record was saved, the following screen shows that the trigger received a response from the decision
service with the value of the insurance premium:
Request mapping
The request mapping maps the Applicant's Age and Skydiver fields to the decision service.
Response mapping
The response mapping updates the applicant's Risk Rating field and creates a related Message record with
the reason for the risk rating.
Result
The trigger is configured to run after create or update. The following screen shows the values input into a new
Applicant record:
The trigger ran when the record was saved. The screen below shows the results. A new related Message is
now associated with the Applicant record indicating why the Risk Rating is High:
• Reports that you can create and configure in the following ways:
• Tabular: Each row represents a data record and each column represents a field. Tabular reports can
include up to three layers to show dependent records.
• Document template: You can build custom Microsoft Word, Microsoft Excel, plain text, and XML document
templates that are used to display record data in pre-specified locations.
• HTML: You can create custom HTML documents that are used to display record data in pre-specified
locations.
• JavaScript: You can write custom JavaScript code to loop over a list of records, perform calculations
and analysis, and display results in custom HTML.
• Charts that present summaries of data in visual formats, such as bar charts, column charts, pie charts,
donut charts, line graphs, and others. Charts can periodically and automatically refresh themselves without
a complete page refresh. Some charts provide drill-down capabilities and interactivity options such as
rotation and slice movement.
• Gauges that present a single formula-based value in a way similar to a car's speedometer or a scale display.
Rollbase supports several different gauge types for various visual effects. Gauges can periodically and
automatically refresh themselves without a complete page refresh.
If you are using any right to left (RTL) languages in your report, you can specify that content is rendered RTL.
See RTL support in templates and reportsRight to left support in reports on page 470 for details.
The following image shows an example of a report with three layers of data. Each layer can be expanded or
collapsed entirely by clicking either Expand All or Collapse All as well as individually by expanding or collapsing
each row:
• Click New Report in the Reports tab in the default Rollbase application.
• Open an object definition, click Reports in the ribbon, and click New Report.
• Open any page containing a section with a report link and click New Report in that section's header.
Note that only administrators can create reports. For more details about user roles, see Role-based access
control on page 724.
To create a tabular report:
1. Navigate to the New Report page using one of the methods described above.
2. Select an object type to report on and select Tabular as the Report Type.
3. Specify a Report Name and provide description if required.
4. In the Report Name Template field, specify a name for the report template. You can use date, month,
and/or year tokens. If you do not input any value, the name of the report is used as the file name by default.
Special characters are converted to underscore in file names.
Note: You can see the tabular report names reflected when you send report emails, create new batch jobs,
use report filters, and use report tokens in Document template.
5. Specify the report columns, sorting and grouping, and report filters. You can report on all deployed objects,
system objects, audit trails, system error logs, and log-in history records.
If you want multi-layer reporting, that is, if each row in the report must include a report about the related
records, specify the Relationship between the two layers. You must define your report's columns, sorting
and filtering conditions for Layer 1, similar to the way you define list views but with the added option to select
a relationship for Layer 2 records. If you choose a related object to display in a second layer, Rollbase will
create Layer 1 and then open the Layer 2 edit page. You can create more layers in a similar manner if
desired. In the second and subsequent layers, you can report on comments and activity trail records related
to the Layer 1 record (that is, the parent record).
Note: You can make a report private if you want the report to be available only to you. Also, if your object
has defined charts, you can select a chart to be included in the report.
6. Click Save.
• Click New Report in the Reports tab in the default Rollbase application.
• Open an object definition, click Reports in the ribbon and click New Report.
• Open any page containing a section with a report link and click New Report in that section's header.
2. Select an object to Report On and then select Document Template as your Report Type.
3. Specify a Report Name and provide description if required.
4. In the Report Name Template field, specify a name for a report template. As reports are not record specific,
you can use date, month, and/or year tokens. If you do not input any value, the name of the report is used
as the file name by default. Special characters are converted to underscore in file names.
Note: You can see the document template report names reflected when you preview/run the report, send
report emails, create new batch jobs, use report filters, and use report tokens in Document template.
5. Define your report template using the template helper (see Document templates on page 366).
6. Select one of the supported report file formats:
7. Optionally specify report filters for the object. For example, if you are generating a report on an object that
stores your customer information, then you can apply a filter that direct Rollbase to include only customers
from Asia in the report.
8. Specify the access permissions (see Access control on page 724).
9. Click Save.
Note: You can use an EVAL block to execute server-side JavaScript in document template reports.
• Click New Report in the Reports tab in the default Rollbase application.
• Open an object definition, select Reports from the ribbon, and click New Report.
• Open any page containing a section with a report link and click New Report in that section's header.
2. Select an object to Report On and the select HTML Template as the Report Type.
3. Specify a Report Name and provide description if required.
4. In the Report Name Template field, specify a name for the report template. You can use date, month,
and/or year tokens. If you do not input any value, the name of the report is used as the file name by default.
Special characters are converted to underscore in file names.
Note: You can see the HTML report names reflected when you send report emails, create new batch jobs,
use report filters, and use report tokens in Document template.
5. Define your report template using the template helper. The following example shows a report definition that
prints a list of Lead records:
<html>
<head>
<h2>List of Leads </h2>
</head>
<body>
<table>
{!#LOOP_BEGIN.all#154785}
<tr>
<td>{!name#text}</td><td>{!type#value}</td>
</tr>
{!#LOOP_END.all}
</table>
</body>
</html>
Note that this report runs a loop through all records using a view with the original ID 154785. Inside the
loop, each record outputs a row of an HTML table.
For a summary report, you can use the Rollbase query API in an EVAL block.
6. Optionally, specify report filters for the object. For example, if you are generating a report on an object that
stores your customer information, then you can apply a filter that direct Rollbase to include only customers
from Asia in the report.
7. Specify the access permissions (see Access control on page 724).
8. Click Save.
• Header and Alignment — Specifies the PDF header and its alignment.
• Footer and Alignment — Specifies the PDF footer and its alignment.
Note: If you are a Private Cloud customer, PDF headers and footers are only available for PD4ML
Professional edition. As a prerequisite, you must configure PD4ML. See Configuring PD4ML on page
850 for more information.
• Page Size — Specifies the size of the PDF page. The default page size is Letter. Options include all
PD4ML-supported sizes as well as custom sizing.
• Landscape orientation — When selected, specifies that your PDF report be generated in landscape
orientation. Clear the check box to print in portrait orientation.
• Margins (mm) — Specifies the space (in mm) to be left for page margins. The default margin size is 20
mm.
• Smart table break — When selected, the header row of tables that span pages will be reproduced on
each page.
• Enable hyperlinks — When selected, hyperlinks are enabled in the PDF document.
• Render each record in new page — When selected, specifies that during PDF generation, each record
be rendered in a new page of the PDF. By default, during PDF generation, all the records in the HTML
template are rendered without any page breaks. Select this option only when you want to introduce page
breaks between each record in the rendered PDF.
• Click New Report in the Reports tab in the default Rollbase application.
• Open an object definition, select Reports from the ribbon, and click New Report.
• Open any page containing a section with a report link and click New Report in that section's header.
2. Select an object to Report On and the select JavaScript as your Report Type.
3. Specify a Report Name and provide description if required.
4. In the Report Name Template field, specify a name for the report template. You can use date, month,
and/or year tokens. If you do not input any value, the name of the report is used as the file name by default.
Special characters are converted to underscore in file names.
Note: You can see the JavaScript report names reflected when you send report emails, create new batch
jobs, use report filters, and use report tokens in Document template
• Select the Content Type of the output: Plain Text, HTML, XML Document, or CSV Spreadsheet.
• Optionally define JavaScript to generate the report header.
• Select a view to use to loop through the selected object's records.
• Define JavaScript to be executed for each record in the loop.
• Optionally define JavaScript to generate the report footer.
Inside the header, body and footer you can use the rbv_api.print() on page 1051 or rbv_api.println() on page
1052 methods to generate the report's output.
The following example reports a list of Lead records:
Header:
rbv_api.println("Hot Leads\n=========================");
Body:
if ("{!lead_type#code}"=="HOT")
rbv_api.println("{!name#text}");
If you are using complex business logic to process a report's records, consider running the report
asynchronously using a batch job.
6. Optionally specify report filters for the object. For example, if you are generating a report on an object that
stores your customer information, then you can apply a filter that direct Rollbase to include only customers
from Asia in the report.
4. Click Next. The Report Properties page opens. Custom report properties include:
Note: You can see the custom report names reflected when you send report emails, create new batch
jobs, use report filters, and use report tokens in Document template.
• An optional CSS stylesheet. You can type custom CSS styles in the text area and/or reference a hosted
CSS stylesheet. For example, you might use the same hosted CSS files for all of your custom reports,
but you can use the text area to add additional customizations that only apply to a particular report. See
Hosted files on page 617 for more information about hosted files. See Custom CSS on page 581 for more
information about custom CSS.
• Role and user based permissions for the report. See Access control on page 724 for more information
about setting permissions.
5. Click Save & Continue to Report Builder to add content to the report. See the following topics for more
information:
• Create a new report (see Creating custom reports on page 455), select Custom, and click Next.
• Open an existing custom report.
The Report Properties page opens.
2. Click the Render as PDF check box. The PDF Options section appears with the following options:
• Page Size — Specifies the size of the PDF page. The default page size is Letter. Options include all
PD4ML-supported sizes as well as custom sizing.
• Margins (mm) — Specifies the space (in mm) to be left for page margins. The default margin size is 20
mm.
• Pages to skip (Header) — Allows for a certain number of initial pages to not have a header. This is
useful where you do not want a header on cover pages, prefaces, etc. Note that you need to tune this
property based on the content generated and is useful only if you know how many pages these initial
sections are going to occupy.
• Pages to skip (Footer) — Allows for a certain number of initial pages to not have a footer. This is useful
where you do not want a footer on cover pages, prefaces, etc. Note that you need to tune this property
based on the content generated and is useful only if you know how many pages these initial sections
are going to occupy.
• Smart table break — When selected, the header row of tables that span pages will be reproduced on
each page.
• Enable hyperlinks — When selected, hyperlinks are enabled in the PDF document.
• Landscape orientation — When selected, specifies that your PDF report be generated in landscape
orientation. Clear the check box to print in portrait orientation.
When you run the report, it will be rendered as a PDF document with the specified properties.
• Header — Header content that appears at the top of each report page
• Footer — Footer content that appears at the bottom of each report page
• Sections — Report content. Sections can contain sub-sections. Sections and sub-sections create a
hierarchical tree structure for a report.
You can use the Report Builder to create and organize report sections, to edit the header and footer that will
appear on each page of the report, and to save and preview the report. The Report Builder is only available
for custom reports. Open the Report Builder from the Report Properties page by clicking Save & Continue
to Report Builder. The screen below shows the Report Builder for a newly created report before any sections
have been added:
At any time while building a report using the Report Builder, you can:
A rich HTML editor opens. Add the content you want to appear at the top of each report page and format it as
desired.
Click the button in the upper right to generate a token you can use in the header or footer content.
The following screen shows the different tokens you can generate:
The following screen shows the Page Number token in the report footer:
See Using tokens in custom reports on page 465 for more information about tokens.
• Plain Text & HTML — Section content is plain text and HTML. See Plain Text & HTML section on page 461
for details.
• HTML Template — Like an HTML Template report, allows you to define an HTML template for the section
content. See HTML Template section on page 462 for details.
• Sub-Report — Allows you to select an existing report for the selected Source Object as the content of the
section. See Sub-Report section on page 463 for details.
• Loop — Executes a loop on Source Object records, taking into account the sorting and filtering criteria
you specify. For each record, sub-sections of the loop are evaluated. See Loop section on page 464 for
details.
• Table of Contents — A placeholder section for a table of contents for the report. When generating the
report, entries for sections with the property Show in TOC checked are added to the table of contents
section. A Table of Contents section is only generated for reports rendered as PDF documents. See Table
of Contents section on page 465 for details.
To add a section to a report, click New Section in the Report Builder. The following screen opens:
• Section Identifier — An identifier for the section that appears in the report structure in the left pane.
• Section Title — A title for the section. You can use tokens in this field (indicated by the lightening bolt icon).
Rollbase resolves the tokens when generating the report, which, for example, allows the section to have a
title that is specific to a particular record.
• Section Type — The type of content in the section. See Section types for the available section types.
• Source Object — The object on which to base this section. It can be the same object as the report is based
on or it can be another object in the application. The selected object does not need to have a direct
relationship with the object on which the report is based.
• Show in TOC — When selected, the Section Title appears in the TOC.
• Info-Section — When selected, the Section Title is rendered as a header in the section.
• Add Page Break — When selected, the section will start on a new page in the generated report.
Different section types support different ways of adding content. See the following topics for details about each
section type.
At any time, you can click the hashtag button at the upper right to open the token generator to generate a token
for use in the section's content. See Using tokens in custom reports on page 465 for more information.
When creating or editing a section, you can perform the following tasks:
• Click Add Sub-Section to add a sub-section to this section. You can add any number of sub-sections to a
section.
• Click Clone to create a new section that is identical to this section.
• Click Delete to delete this section.
You can use tokens in the editor; tokens are resolved when the report is generated. For more information about
tokens, see Using tokens in custom reports on page 465
Wizard section
When you select Wizard as the section type, the Report Builder displays a user interface that lets you select
fields, sorting and grouping, totals and subtotals, and report filters for the section. The interface is similar to
the one you use to create tabular reports except that you can only create one layer.
It also displays a Report Filters section where you can define filter conditions for the section:
Sub-Report section
When you select Sub-Report as the section type, the Report Builder displays a drop-down menu where you
can select an existing report. The content of the selected report will be the content of the section. Only reports
defined for the Source Object are available.
Loop section
A Loop section does not contain any content. Instead, it defines a loop over a list of records of the selected
Source Object. Report content is generated by sub-sections of a Loop section. A Loop section's sub-sections
are executed on each of those records in the order you specify in the Loop section. You can apply standard
filtering criteria to execute sub-sections on a subset of records. See Filter criteria on page 567 for more information.
When you select Loop as the section type, the Report Builder displays sorting and filtering criteria you can
apply to the records. For example, if the report is defined on the Room object, and the Loop section's Source
Object is Furniture, you can filter the Furniture records to include only those in the specified room. You can
use the Context Record token to access the Room record in the filter criteria. In the sub-sections of the Loop
section, you can use the Loop Record token, which resolves to the current Furniture record in this example,
as well as the Context Record token. For more information about tokens, see Using tokens in custom reports
on page 465.
Note: Rollbase only generates a table of contents for reports rendered as PDF documents.
The following screen shows the token generated for the Loop Record's Description field:
Note: When a report section uses the Context Record token, Rollbase cannot resolve the token when you
Save & Preview the report. See Viewing custom reports on page 467 for information about how to view a report
that uses this token.
Running reports
After creating a report, you can use the page editor to add a Report Link Fields component to a section in
any generic page or records list page.
Users with View permission on a particular report can run the report by clicking the report's link. Users with
Manage Reports administrative permission can create, edit, delete, or set permissions for a report. For more
information about Rollbase permissions, see Access control on page 724.
Tabular reports are limited to regular pages, but links to template-based reports, including JavaScript reports,
can be used on portal pages.
Complex reports, especially template-based ones, might require a long time to execute. In such a scenario,
you can place the report in a queue for asynchronous execution by clicking Email this Report.
Click the new report button next to the section title to create a new report.
When running a report, you can use dynamic report filters to filter Layer 1 records. Filtering reports works the
same way as dynamic filtering in list views.
When you open the first report page, it renders the report with default filters specified when the report was
created, if any. You can dynamically update these filters and click Apply Filter to render the report again with
the new filter values. Click Clear Filters to restore the default (which might be empty) filters:
If you do not have a Dynamic Report Filters element in your report page, use the page editor to add it to the
page. See Editing pages on page 497 for information about the page editor.
In a report page, you can use the following operations:
• Run Report - Displays the report with the currently selected filters.
• Print - Displays the report in a pop-up window ready for printing. This option is only available for
template-based reports.
• Reset Filters - Resets the filters to the original report's selection; clear filters if no filters are selected in the
report.
• Edit this Report - Open the report for editing (if the current user has permission to manage reports).
• Expand All or Collapse All - To expand or collapse all the rows in the report.
• Export - You can export the report data to XLS, XLSX, CSV, or PDF format. When exporting multi-layered
reports, each record from each layer is exported as a unique row.
• Column data options for tabular reports:
• Sorting - Click a column header to sort its data in an ascending or descending order.
• Column selection - Click the down-arrow button on a column header to specify the columns to be made
available in the report.
• Column arrangement: Rearrange columns by dragging the column header to a different position in the
table.
Merging reports
You can create reports that encompass other HTML-based or JavaScript reports. Use {!#REPORT.123456}
tokens available in the template helper section to identify the reports you want to merge (note that these tokens
use the original IDs of the reports).
To specify the reports you want to merge in a new report:
4. Similarly, select another report you want to merge from the center drop-down list and copy its programmatic
expression to the HTML template.
The method for supporting RTL text in a report depends on the type of report:
• Tabular report — Rollbase automatically renders text in the correct direction based on the user's language
and requires no additional configuration.
• Document template report — A document template report is based on a document template; how you
configure the text direction depends on the type of document template. See Document templates for details.
• HTML report — Use the dir attribute and the bdi element as described in Document templates to format
the text direction of the HTML content. Users can render HTML reports as PDF. To render PDF content as
RTL, use the dir attribute in the body element of the base HTML.
• JavaScript report — Rollbase automatically renders text in the correct direction based on the language used
in the report and requires no additional configuration.
• Custom report — You can define your own stylings for custom reports in two general ways:
• To render an entire report as RTL, either select an existing stylesheet that renders text as RTL when
creating the report, or add body {direction: rtl;} in the Styling Properties area. See Creating
custom reports on page 455 for details about adding a stylesheet and styles to a custom report.
• To render a section of a report as RTL, add the styling directly to the section. For example, you can
modify the div element of an HTML Template section to add the style attribute as shown below:
For more information about language support, see Language support on page 815.
Creating charts
You create charts from an object definition page. To build or configure a chart:
1. Navigate to an object definition page, select Charts from the ribbon, and click New Chart.
The New Chart page opens:
2. Select one of the chart engines, either FusionCharts (HTML) or Google Charts (HTML).
3. Designate how records of a particular object will be grouped into collections (columns or slices). A set of
collections is referred to as the X Axis (this refers to a bar-style charts and can be logically extended to
other types of charts). You can create these groupings for:
4. Specify which numeric value will be summarized for each collection. This value is referred as the Y Axis.
This value might belong to either the parent or to a related object. You can also use the count of parent or
of related records.
5. Click Next and specify the following information:
6. Optionally specify the following if you selected FusionCharts as your chart engine:
• Select Chart Background if you want this chart to have a background color or image. If you choose to
have an external image (GIF, JPEG or PNG only) as a background of the chart, you must browse and
upload an image. You can then select the required Background Opacity and Display Mode.
• Select Canvas Background Color if you want to add a background color to the chart canvas. In addition,
you can also set the canvas color opacity.
Note: The Canvas Background Color property is not available for Doughnut (2D and 3D), Pie (2D
and 3D), and Grid charts.
• Select Animate Chart if you want HTML-based animation for this chart when available.
• Select Auto-Refresh Chart if you want this chart to be automatically refreshed without manually reloading
the page or report where the chart resides.
• Select Disable Drill-Down if you do not want to allow drill-down to records in chart columns or pie slices.
• Select View for Drill-Down to specify the view to use to display the drill-down data.
• Select Show Chart Logo if you want to add a logo (GIF, JPEG or PNG only) to the chart. In addition,
you can also set the logo scale, opacity, and position. You can also point the logo to some external url
by providing the Logo Hyperlink.
• For numeric fields, select the range and width of each collection.
• For date fields, select the date's interval (week, month, quarter, or year) range.
• In the Compute What field, specify what is to be computed for records that fall in a particular collection:
total, average, or percentage of this collection relative to all collections total.
• In the Data value color property, specify the color for the data value. Note that this will work in conjunction
to the Show Columns Values property. You can specify the color for the data values only if Show
Columns Values property is selected.
Note: The Data Value Color property is not available for Doughnut (2D and 3D) charts.
• In the Data plot fill type property, specify the data plot fill type (color/gradient) and you can choose to
turn on/off the Show border for data plot.
Note: The Data plot fill type property is not available for Column 3D, Doughnut (2D and 3D), Line, and
Pie (2D and 3D) charts. While, the Show border for data plot property is not available for Line charts.
Warning: To preserve system resources, the total number of collections per chart is limited to 200. If you
select conditions that generate too many collections, not all collections will be displayed and Rollbase will
generate a warning message. Hiding empty collections by checking the Hide empty columns check box
will improve the visual representation of your chart but will not remove the limitation on the total number of
displayed collections.
8. Optionally use Chart Filters to filter and render different types of data on your chart.
Using charts
To make a chart available for viewing on a page, use the page editor to add the chart component to an empty
section on a generic or object list view page. This will display the selected chart on that page, along with a
toolbar:
From the section containing the chart, you can do the following:
• Click the reload button next to the section title to reload the chart.
• Select another chart from the first drop-down menu.
• Select Edit this Chart from the chart actions menu to edit the chart.
• Select Create New Chart from the chart actions menu to edit the chart.
• Select Clone this Chart from the chart actions menu to clone the chart.
• Click Filter to dynamically filter data visualized in the selected chart.
• Right-click the chart and select Download SVG Vector Image to save an XML-based image of the chart.
The administrative permission Manage Charts is required to edit, create, and clone charts.
An example FusionChart:
Debugging charts
Because Rollbase generates the underlying functionality for charts, they can be difficult to troubleshoot. On
Rollbase Private Cloud, an administrator of the master tenant logged into a customer tenant can enable logging
of the underlying SQL queries. See Enabling logging for charts and views on page 865 for details. You can use
the log file to see if the expected queries are being executed. Since logging can delay rendering of the charts,
it should only be enabled temporarily for debugging purposes.
Note: The Show Background Color property is not available for the following gauge styles.
6. Select the Annotation Type for the gauge. This can be Number, Percent, or one of several currencies.
7. Select the Min Value and Max Value to represent the beginning and end of the gauge's display range.
Rollbase renders the computed value by positioning the gauge's arrow relative to these values. Optionally
type a Label for each of these values.
8. Optionally set a Lower Range Color, Middle Range Color, and an Upper Range Color to customize the
data range color for lower range, middle range and upper range based on the context in which the gauge
will be used. Rollbase uses the First Midpoint Value and Second Midpoint Value values to visually indicate
the gauge's lower, middle, and upper range values.
Note: The Data Range Color properties are not available for the following gauge styles.
Note: This field is available only for the Vertical Linear Gauge.
10. Specify the JavaScript formula to compute the gauge's value. If you use the gauge to visualize data for a
particular record, use tokens from that record and its related records. If you use the gauge is to visualize
data from a list of records, use a loop to iterate over records, compute and return a final value. You can
also use the Rollbase Query API in gauges. For more information about formulas, see Formulas on page
373.
Using gauges
As with other UI components, you can use the page editor to add one or more gauge components to a section
on a generic, object, or view page. There is no further configuration necessary to start viewing your computed
data with professional looking gauges.
You can place up to four gauges in a row in a single section.
Note: Avoid using the template #LOOP in a gauge's formula because it might lead to inefficient computations.
Instead, try using group functions or the query API. For more information about formulas, see Formulas on
page 373.
Multi-currency support
Rollbase supports conversion between monetary values in different currencies. It is common for businesses
to keep their accounting books in one currency (let us call this the base currency), while sending and receiving
money in several other currencies. In addition, exchange rates between currencies tend to change over time.
Rollbase provides a multi-currency framework for all customers.
The following illustrates multi-currency functionality:
Although the Base Currency field is read-only, you can use it in formula fields and triggers, as well as to calculate
totals in list views and reports. Modifying an exchange rate on a particular date will not affect any Base Currency
values that already have been calculated because, unlike formula fields which are dynamically computed, Base
Currency fields are calculated and stored in your database. However, when you edit and save an existing
record, this value will automatically be updated using the currently available exchange rate corresponding to
the assigned rate date.
To start using multi-currency, follow these steps:
1. Set up currency codes on page 478
2. Set up exchange rate on page 479
3. Enabling multi-currency attribute on the object definition on page 479
4. Money amounts in base currency on page 480
You can also use the SOAP API to store exchange rates (see Rollbase SOAP Methods on page 1285). If you
will be using multi-currency capabilities on a daily basis you might consider building an automated integration
with another web service to retrieve exchange rates and populate them in Rollbase for you.
• An object with the Survey attribute enabled. Survey records contain the questions, which you can add
directly to the record or from a question library. When you create an object with the Survey attribute, Rollbase
creates a special Take Survey page. This page displays survey questions to end-users and can be edited
and cloned just like any other Rollbase page. You can configure this page to include a particular survey.
The page properties include a template token. You can add a URL to any template on an application or
portal page using the Surveys section in the template helper. The Survey Pages group in the template
helper provides you with a merge field token that will be resolved into the URL of the Survey page. You can
use this URL in links or in an HTML button control.
• The User object (or another object you use to manage survey takers) must have the Survey Taker attribute
enabled. The Survey Answers component lists all surveys taken. For each survey, it displays a list of
questions and the answers users provided. If ranking criteria was set for a particular question, the system
calculates and displays an assigned score along with maximum and minimum possible scores. Minimum
score is only used when negative ranking was specified. Otherwise the minimum score is 0. The object
fields Survey Score and Rank (score as a percentage of the maximum score) can be used to set up triggers
to execute business logic and provide automation based on survey results.
Creating a survey
Follow these general steps to create a survey:
1. Create a new object with a Survey attribute or enable the Survey attribute on an existing object. If you
create a new object with the Survey attribute, Rollbase adds a Questions option to the page menu
automatically. If you enable the Survey attribute on an existing object, you can add the Questions option
by editing the object tab as described in Enabling surveys on an existing object on page 482. The Questions
menu option (shown below) allows you to create a questions library. Rollbase saves survey questions in a
shared library that can be accessed from any object that has the Survey attribute.
2. To distribute the survey to end users in your tenant, make sure the Survey Taker attribute is enabled on
the User object.
3. Create survey questions as described in Creating a question library on page 486 and Adding questions to a
survey on page 484.
4. Distribute the survey link in one of the ways described in Survey pages and links on page 486.
5. See how survey takers responded as described in Collecting survey answers on page 488.
d) Click Edit.
e) Scroll to the Advanced Attribute section and click the Survey attribute box.
f) Click Save.
2. In the object definition, add the Question option to the page menu:
a) Navigate to the application setup page. For example, from the application switcher, select the settings
icon.
The Questions menu item should now be available from the object tab page menu.
• Text: Users can enter any combination of characters. You can optionally define an input mask to enforce
certain kinds of input.
• Text Area: Users can enter multiple lines of text. You can optionally enable a rich text editor so users can
enter text as formatted HTML.
• Picklist: Users can select a value from a list of values you define.
• Picklist (Multi-Select): Users can select any number of values from a list of values you define.
• Radio Buttons: Group of radio buttons with mutually exclusive selection.
• Checkbox: Users can select a Checked (true) or Unchecked (false) value.
• Group of Checkboxes: Group of checkboxes with multiple selections.
• Currency: Users can enter a dollar or other currency amount.
• Date: Users can enter a date or pick a date from a calendar popup.
• Date/Time: Users can enter a date and a time, or pick a date from a calendar popup (when a date is selected
from the calendar popup, that date and the current time are entered into the Date/Time field).
• Email: Users can enter an email address which is checked to ensure that it is a valid format.
• Integer: Users can enter any number (without decimals).
• URL: Users can enter any website address.
Each type of question has specific associated properties. For instance, text questions have the following
properties:
• Question label
• Short label
• Category
• Whether an answer is required for this question
• Whether this question should be available in any application which includes the Survey object
Taking a survey
End users following the link you supply will be directed to the Take Survey page. Survey questions display in
sections by category.
Answers to survey questions are subject to validation rules similar to those for object fields: required questions
must be answered, integer questions must be parsed as integers, etc.
You can customize the user experience by controlling what users see on application pages and how they
navigate through the application. Additional files required for customization, such as images and cascading
style sheets, can be uploaded as hosted files. You can select a built-in theme for an applications and customize
the look and feel of your application. Portals allow you to create a user interface and host it yourself.
• UI blueprints
• Live Preview
• Rollbase portals
• Hosted files
• Object pages — Pages associated with objects, including pages that list records and pages that allow you
to create or edit records.
• Generic pages — Pages that are not associated with objects.
• On an application setup page, click Tabs in the ribbon and click New Tab.
• On an application page, click plus on the application menu bar, select A new Tab, and click Create.
The New Tab page opens:
4. From the Parent Tab drop-down field, select one of the following:
5. For the Show In property, select the device types you want to display this tab. By default, tabs display in
all device types.
6. For the Icon type property, you can customize the icon for the sidebar tab when using the Modern - Vertical
Menus UI blueprint.
• Default — The icon in the sidebar tab are rendered with the first letter of the name of the tab.
• Font icon — The icon in the sidebar tab is rendered with a font icon selected from Bootstrap Glyphicons
or Font Awesome icons. Progress recommend Font Awesome icons, which are SVG icons that work
well with resizing for different font size and work well with different themes.
• Custom — The icon in the sidebar tab is rendered as the selected custom image.
7. If you are creating an object page, select the object for the page from the Object drop-down field. When
you create a new object page, the page is a record list page and by default will contain a list of records.
8. If you are creating a Web page, type the URL for the Web page or application you want to display in the
Link URL field.
9. Optionally enter a description for the tab in the Description field.
10. Select the application(s) to which to add the tab.
11. Optionally set permissions for the tab. The Administrator role and roles that have permission to access
each selected application are preselected.
See Access control on page 724 for information about permissions.
From this table, you can click one of the following links in a page's row:
• View — Opens a pop-up window displaying a preview of the page. For View, Edit, and Status pages,
opens a selector page where you can select the record to view in the preview.
• Edit — Opens the page editor.
• Clone — Creates a new version of the page and opens it in the page editor.
• Del — Deletes the page. This options is only available for cloned pages.Deletes the page. This option is
not available for pages automatically created by Rollbase.
• Synch — For New, Edit, and View pages, opens the Synchronize page, which allows you to synchronize
the page with another page in the application, meaning all of the page components will be the same on both
pages. This is useful, for example, when you have edited an Edit page to add new field components to it
and you want to update the New page to contain the same components. Click Synch next to the Edit page,
select the New page, and click Save.
• Properties — Opens the Page Properties page, which allows you to edit the page's properties, the heading
for each of the page's sections, and other properties depending on the page type. It also allows you to define
HTML event handlers on page 584 for the page (not available for Selector pages). The screen below shows
the Page Properties page for an Edit page:
• Page name — Opens a page that displays general information about the page, such as its type, its template
token, and when it was last updated.
• From the Setup home page, click Tabs under Application Setup and click the tab name.
• Open the setup page for an application that includes the tab, click Tabs in the ribbon, and click the tab
name. The Tab view page opens and displays options for accessing the generic page:
• On desktops and on tablets in landscape mode, the page will display two columns.
• On tablets in portrait mode and on smart phones, the page will display one column.
When Fluid is selected, the page is not responsive to different screen sizes.
See Editing pages on page 497 for information about the page editor.
Click Properties to view and edit page properties.
Editing pages
A page specifies the contents of an application page. Application pages always contain an application tab, an
application menu bar, a header and footer, and certain components such as search and the page tools menu.
See Application page components on page 32 for information about these components.
In addition to the common components described above, an application page contains:
• Components — A component is a user interface control or field. A component can also be a section of
HTML or JavaScript. Components available to a page depend on the page type. See Page components on
page 258 for a description of each component and where it can be used.
• Sections — A section is an area of a page that contains components. Some components, such as charts,
can only be placed in an empty section. A section has a title that you can edit.
• Columns — A section can contain up to four columns. The rendered page automatically adjusts its display
of the columns based on the width of the screen.
The page editor allows administrators to specify which components a page contains, to control the layout of
components within the page using sections and columns, and to configure each component. The screen below
shows the page editor for an edit record page. Available components are listed by category in the left sidebar:
• For a page associated with an object, navigate to the Pages table on the object view page and click Edit
next to the page name. See Managing object pages on page 492 for details.
• For a generic page, navigate to the tab view page for its associated tab and click Edit. See Managing
generic pages on page 495 for details.
• From any application page, select Design This Page from the Page Options menu.
2. Drag the desired sections and components from the left sidebar onto the page.
3. Configure the sections and components.
4. Save the page. You can also save and synchronize the page, which gives you the option to apply the
changes you just made to other pages for this object.
Section properties control the section title, the number of columns, and other display properties.
• Style — Specifies whether the Section Title is displayed on the application page and whether there is a
border around the section.
• Collapsible — Specifies whether a user can collapse the section on the application page.
• Default New Fields Section — When checked, any new fields added to the object will appear in this section
of the page. A page can only have one default new fields section.
• Show In — Specifies whether this section is displayed on desktops, tablets, and/or smartphones. Displays
on all devices by default. Deselect a device type if you do not want the section displayed on it. The icons
representing devices appear in the following order: desktop, tablet, smart phone.
You can use the section menu at the top right corner of a section to move the section on the page or to delete
the section:
A view component displays a list of records. The screen below shows the properties of a view component. You
can select the view to use from the Use List View drop-down menu:
• Lookup fields — Allow users to select a related record. See Relationships between objects on page 317 for
information about configuring lookup fields.
• Charts — Allow you to visually display a snapshot of data. See Using charts on page 474 for information
about configuring charts on a page..
• Gauges — Allow you to visually display a single value. See Using gauges on page 477 for information about
configuring gauges on a page.
• HTML components — Allow you to customize the display of a page. See Adding an HTML component to
a page on page 353 for details.
• Script components — Allow you to add JavaScript formulas to a page. See Adding a script component to
a page on page 353 for details.
• Detailed search components — Allow you to filter records by a set of preconfigured fields and operands.
See Detailed search on page 502 for details.
• Embedded quick create components — Allow a user to create a single related record while creating a core
record. See Embedded quick create on page 504 for details.
• Related records components — Lists related records and allows a user to create, attach, delete, and perform
a number of operations on related records. See Related records components on page 323 for more information.
• Page tabs — Allow you to organize page sections into different visible sets for complex pages. See Page
tabs on page 506 for details.
• Grid controls — Allow users to create, update, and delete a group of related records while editing a parent
record. See Using grid controls to manage multiple records on page 511 for details.
Detailed search
The detailed search component allows the filtering of records by a set of preconfigured fields and operands
(equals, greater than, etc.).
Use the page editor to add a Detailed Search component to a generic, list, or search results page. It can only
be added to an empty section.
Configure the detailed search component after saving the page by clicking Config in the Pages table on the
object view page for that page. The Configure Search Component page opens:
• Which search results page to use to display results (if you have multiple pages)
• How many columns use to arrange filters
• Whether or not to hide the keyword search text box
• Whether to filter results by date intervals
• Whether to use AND (all fields) or OR (any field) logic
• Fields and available operands to appear in the detailed search component
• For text boxes: the size in columns (Defaults to 30)
• For text multi-select picklists: the size in rows (Defaults to 4)
The configured component allows users to quickly filter records by selected values:
• Record to be Created - The related object for which to create the record.
• Using Page - The Quick Create page to use. You can use the automatically created page or you can
clone the page and create a new version of it.
• Component Name - A unique name for the component. In the page's HTML, this name will be appended
to all field names used by this component.
4. The new record page will contain all of the sections and components from the selected Quick Create page
rendered as part of the main page:
The embedded quick create component performs the same validation operations as the selected Quick Create
page. The resulting record will have a relationship with the newly created core record.
Page tabs
Page tabs visually separate components on pages. They are different from application tabs. Application tabs
appear on the application menu bar, while page tabs are components of an application page and are associated
with page sections.
The record View page that Rollbase creates for you, has tabs. You can add tabs or rearrange them and you
can specify which device(s) they render on. It is also possible to add tabs to New record and Edit record pages,
but you must enable tabs on the page first. The example below shows a record View page with the tabs Rollbase
creates by default, Title Info and System Info.
1. Open the page editor on the page on which you want to enable tabs.
2. Click the menu next to the page title and select Enable Tabs:
3. The first tab, named Tab 0, and a button to add tabs will appear:
Tabs are enabled for the page. When tabs are enabled, each section on the page is associated with a tab. The
first tab, Tab 0, is associated with the first section of the page by default. You can associate a section with a
tab in the section's Properties menu.
1. Open the page editor for the page on which you want to add page tabs.
2. Click +Add Tab. A new page tab appears to the right of all other page tabs.
3. Open the tab properties, name the tab, and optionally reposition the tab.
4. In the section you want to associate with the new tab, open its Properties menu and select the tab from
the Tab drop-down field:
The tab is now associated with that section. Note that you will only see a section in the page editor if its
associated tab is selected. Use Page tab properties on page 510 to move a tab, specify which device(s) it will
render on, or delete it.
The screen below shows the page editor open on an edit record page with the Edit Title tab selected:
The screen below shows the page editor open on the same page with the View System Info tab selected:
• Tab Name — The name of the page tab. If the tenant has additional languages configured, you can add a
tab name for each supported language.
• Move Left — When there are multiple page tabs, move the tab to the left.
• Move Right — When there are multiple page tabs, move the tab to the right.
• Show In — Select the device(s) on which to display the page tab. By default, page tabs are displayed on
all devices.
You can also delete the page tab.
To access page tab properties, click the drop-down menu next to the tab name:
• A parent object that has a one-to-many relationship with a child object, such as a purchase order might
have to line items. The grid will display the related records on the "many" side.
• Both objects in many-to-many relationships.
The following screen illustrates a grid control in a room reservation system:
You can add a grid control to a page when creating a relationship, or you can add a grid control to an existing
page using the page editor. A grid control and a lookup field for the same related records cannot exist on the
same page. To add a grid control to a page with a lookup field, you must first remove the lookup field. See
Relationships between objects on page 317 for more information about lookup fields.
Rollbase 4.3 introduced a revised grid control implementation. See Revised grid control for New UI for more
information.
Grid Control Examples and API on page 1099 describes how to customize grid behavior using the client-side
AJAX API.
See the following topics for more information about grid controls:
3. Drag a New Section from the left sidebar and drop it in the location where you want the grid control to
appear on the page. Optionally edit the Section Title in the section's Properties menu. See Adding and
configuring sections on page 498 for details.
4. From the Available Components Grid Fields section of the left sidebar, select Grid Control and drag it
to the new section as shown in the example below:
Next, configure the grid component as described in Configuring a grid control on page 513
1. Open the Configure Grid Control page in one of the following ways:
• Navigate to the page containing the grid and click Configure Grid:
• Navigate to the Pages table in the object view page and select Config next to the page containing the
grid control:
• Check Required in Grid for fields you want users to enter a value.
• Check Read Only for fields that users should not be updated on this page. This has no effect on required
columns.
• Optionally specify sorting for columns.
• Configure lookup fields for related records:
• Choose Selector or Picklist from the first drop-down menu.
• Select Enable Quick Create if you want to be able to create a related record using Quick Create.
• Select the list view to use to display the related records.
• Optionally specify custom JavaScript code to be executed when a grid row is added, updated, or deleted.
For more information, see Grid Control Examples and API on page 1099.
8. Click Save.
The following controls for creating, deleting and editing are available to users with the appropriate permissions:
• Run JavaScript.
• Open a URL in a new browser window.
To manage buttons, click Buttons in the ribbon on an object definition screen to navigate to the Buttons table
and select one of the following:
• Display Label — Enter the text that will display on the button.
• Button Name — Optionally enter the button's name (used as HTML tag "name"). Defaults to Display
Label with an underscore for each space..
• Behavior — The action to perform. Select one of:
• Run client-side JavaScript
• Open URL in new window
• Show In — Specifies whether this button is displayed on desktops, tablets, and/or smart phones. Displays
on all devices by default. Deselect a device type if you do not want the button displayed on it. Devices
are represented by icons in the following order: desktop, tablet, smart phone. The Buttons section of a
Setup Application page contains a Show In column that displays your choices.
• Toolbar Responsive Overflow Rule — Enables you to control how the buttons (custom buttons and
workflow action buttons) are positioned in relation to the overflow menu. Depending on your requirement,
you can choose one of the options from the drop-down list.
1. Always show in overflow menu — Forces the button in the overflow menu irrespective of available
space.
2. Never show in overflow menu — Forces the button in the toolbar irrespective of available space.
3. Show in toolbar when there is space — Places the button in the toolbar if there is space.If not, the
button is placed in the overflow menu. This option is selected by default.
Note: You must ensure that there is enough space on your page when you choose the Never show in
overflow menu option.
• Button Script or URL — The JavaScript template or the URL template. Both templates may include
record's tokens to be replaced with actual values at runtime. See Working with templates on page 350
for information about templates.
• Show button – Condition formula — Add a conditional formula. This conditional formula is evaluated
before adding a button to the page. The button will be added only if the evaluation results in Boolean
value TRUE.
With the condition formula feature, you can dynamically decide whether to add a button depending on
a record's workflow status field, user's role, and so on.
• Add to Pages — Select the pages to which you want to add the new button.
The following screen shows the properties of a Extend button that appears for a title with status as Checked
Out.
You can add or remove buttons from a page by clicking the Properties link for the page in the page table on
an object view page.
You can add any HTML, CSS, and/or JavaScript to customize the header and footer. If you want to use images
or refer to a CSS, you should upload those as hosted files first. See Hosted files on page 617 for details.
You can use the same techniques to customize the sidebar for an application (see Custom sidebar on page
283) and to customize the user interface, for example, by executing custom JavaScript, you can change the
color of or hide certain Rollbase HTML elements. See Working with templates on page 350, Formulas on page
373, and Client-side JavaScript on page 1150 for more information.
Follow these steps to modify the header and footer:
For example, the custom header and footer shown above uses a hosted graphic and locally declared
styles. The HTML Header defines my-header and my-footer classes as follows:
<style>
.my-header {
background: #eee;
margin-bottom: 10px;
padding: 10px;
margin-bottom: 25px;
font-size: 25px;
font-weight: bold;
padding: 35px;
border-radius: 5px;
background: #00b7ea;
background: -moz-linear-gradient(top, #00b7ea 0%, #009ec3 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#00b7ea),
color-stop(100%,#009ec3));
background: -webkit-linear-gradient(top, #00b7ea 0%,#009ec3 100%);
background: -o-linear-gradient(top, #00b7ea 0%,#009ec3 100%);
background: -ms-linear-gradient(top, #00b7ea 0%,#009ec3 100%);
background: linear-gradient(to bottom, #00b7ea 0%,#009ec3 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00b7ea',
endColorstr='#009ec3',GradientType=0 );
color: #fff;
}
.my-footer {
background: #eee;
margin-bottom: 10px;
padding: 10px;
margin-bottom: 25px;
font-size: 12px;
font-weight: bold;
text-align: center;
padding: 15px;
border-radius: 5px;
color: #fff;
background: #45484d; /* Old browsers */
background: -moz-linear-gradient(top, #45484d 0%, #000000 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#45484d),
color-stop(100%,#000000)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #45484d 0%,#000000 100%); /*
Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #45484d 0%,#000000 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, #45484d 0%,#000000 100%); /* IE10+ */
background: linear-gradient(to bottom, #45484d 0%,#000000 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#45484d',
endColorstr='#000000',GradientType=0 ); /* IE6-9 */
}
</style>
<div class="my-header">
<img src='{!#HOSTED_FILE.53382#url}' border='0' align='absleft'/>
Great Reads Check Out System
</div>
You can change a tab to be a child menu by adding a parent tab to it. See Changing a tab to be a child menu
on page 520 for details.
You can promote a child menu to be a tab by removing its parent tab. See Promoting a child menu to a tab on
page 521 for details.
You can customize the icons used for tabs and menus when using the Modern - Vertical Menus UI blueprint.
See Customizing icons for the Modern -Vertical Menus UI blueprint on page 523
1. Navigate to an application setup page that uses the tab you want to change:
• To navigate to settings for the current application, click App Settings from the application switcher.
• To navigate to settings for a different application, hover your mouse pointer over the application in the
application switcher and click the settings icon.
5. Click Save.
The tab is now a child menu of the Manage Users tab in the application menu bar:
1. Navigate to an application setup page that uses the tab you want to change:
• To navigate to settings for the current application, click Current App Settings from the application
switcher.
• To navigate to settings for a different application, hover your mouse pointer over the application in the
application switcher and click the settings icon.
2. Click Tabs in the ribbon. To edit a child menu, you must edit its parent tab. This procedure uses the Library
Members child menu under the Manage Users menu item in a Library application as an example, so the
tab to edit is Manage Users:
3. From the Tabs table, click Edit in the row for the parent tab.
A page opens that allows you to edit tab properties.
4. in the Menus table, click Edit in the row for the child menu you want to promote:
5. From the Parent Tab drop-down menu, select None (top level tab).
6. Click Save.
• Configure them to display two letters instead of one. For tabs with one word in their names, the icon contains
the first two letters of the name. For tabs with more than one word in their names, the icon contains the first
letter of the first two words.
• Configure an individual tab to use a font icon. You can select a font icon from Bootstrap Glyphicons or Font
Awesome icons. Progress recommend Font Awesome icons, which are SVG icons that work well with
resizing for different font size and work well with different themes.
• Configure an individual tab to use a custom image as its icon.
To configure tab icons to display two letters, set the value of the property
rb.newui.options.numOfCharsInTabDefaultIcon to 2. You must set the value of this property in a
custom sidebar script that executes before the UI starts, for example:
<script id="executeBeforeUIStarts">
rb.newui.options.numOfCharsInTabDefaultIcon=2;
</script>
The following screen shows an expanded sidebar where the Devices tab uses a font icon:
The following screen shows a collapsed sidebar where the Devices tab uses a custom icon:
UI blueprints
UI blueprints allow you to set how the application renders in the New UI. This is called the UI blueprint for the
application. At a high level, a UI blueprint is how the application navigation and various menus inside the
application are rendered. The page content does not change across blueprints.
The Traditional blueprint has a Rollbase menu (collapsed by default), a header, which includes the application
switcher and the application tabs and menus, and a footer:
The Modern - Vertical Menus blueprint, which is the default for new applications, has a sidebar that includes
the application tabs and menus drawn vertically, a header that includes the application switcher, and no footer.
The sidebar has two states: Expanded and collapsed (see screens below). This blueprint is adaptive; it renders
differently based on the device.
The following screen shows the Modern - Vertical Menus blueprint with the application switcher selected.
The following screens show the Modern - Vertical Menus blueprint on a desktop in its two states. Open the
sidebar by clicking the hamburger menu at the top left of the screen. Expand or collapse the sidebar by clicking
the hamburger menu.
The following screen shows the Modern - Vertical Menus blueprint on a smart phone.
You can customize the tab icons for the Modern - Vertical Menus UI blueprint. See Custom icons for tabs in
Modern - Vertical Menus blueprint for more information.
To set the UI blueprint for an application:
1. Navigate to the Setup Application page for the application.
2. Click Edit.
3. In the New UI Specific Settings area, select the UI blueprint from the UI Blueprint drop-down menu:
4. Click Save.
You can also set the UI blueprint for an application using Live Preview on page 531.
The UI blueprint for each application appears in the application list on the applications setup page:
Live Preview
Live Preview is a tool where you, as an administrator, can preview changes to various aspects of an application
on the fly without disturbing any users. The full live application is available to change and review. This helps
to improve your productivity when designing the application's user interface.
To open Live Preview, do one of the following:
• If you are using the Traditional blueprint, click Live Preview from the Rollbase menu:
• If you are using the Modern - Vertical Menus blueprint, expand Administration in the sidebar and click
Live Preview:
• The type of device to preview: smart phone, tablet in portrait mode, tablet in landscape mode, or desktop.
• The UI blueprint for the application. See UI blueprints on page 525 for more information.
• The theme for the application. See Working with themes on page 578 for more information about themes.
• The field label setting. This specifies whether to place field labels to the left of field values or above field
values based on the device. See Customizing field labels on page 553 for more information about field label
settings.
• The card templates used to display record lists on different mobile devices. See Cards and card containers
on page 538 for more information about cards.
• Toggle the text direction. See Language support on page 815 for more information about language support
and text direction.
Click the save icon to save your changes or click the X icon to discard your changes and close Live Preview.
The following screen shows the Live Preview interface. In this example, the user has selected the smart phone
interface, selected a different theme, and selected a user-defined card:
When viewing a record list page on a mobile device, it is rendered using a card container by default (see Cards
and card containers). To switch the view to the normal record list view, click the Switch to Grid button:
To switch back to the card container, click the Switch to Card button:
• Rollbase renders record list pages on mobile devices using cards and card containers. See Cards and card
containers on page 538 for information about cards and card containers. See Creating and editing cards on
page 539 for details about creating and editing cards.
• Tabs, page sections, views, and buttons are tailored to the device(s) on which they will be visible. See
Tailoring page components and views to devices on page 551 for more information.
• You can position field labels above field values on specified devices. You can also hide individual field
labels. See Customizing field labels on page 553 for more information.
• Rollbase includes client-side JavaScript functions for detecting mobile devices. See Functions on page 1158
for details.
• Rollbase includes CSS classes for detecting mobile devices. See Custom CSS on page 581 for details.
• The default font size on a mobile device is the desktop font size plus 2 (14pt by default).
• The Rollbase menu:
• Is rendered in non-administrative mode.
• Includes a Log Out menu item
• Log Out and Rollbase Forum are under the userName menu item in the Modern - Vertical Menus
UI blueprint.
The following screen shows the Rollbase menu (also called the sidebar) items and application tabs, in the
Modern - Vertical Menus UI blueprint on a smart phone:
• When displaying in grid mode, you can sort columns (short press on column header) and change
column order by pressing longer and dragging a column to the desired location.
• The view selector does not contain any administrative actions (cannot edit, color code, or clone a view).
• The view selector is not displayed if there is only one view available.
• Global search is rendered in non-administrative mode.
• The page menu only contains the new record menu item when using the Traditional UI blueprint. When
using the Modern - Vertical Menus UI blueprint, there is no page menu.
• The page options menu is not displayed.
• Inline editing is disabled.
• Only the refresh action is available for charts and gauges.
• There is no user profile menu.
• The Rollbase menu does not have the Recycle Bin or Recent Items menu items.
• When displaying a record list page in grid mode:
• Buttons on the page toolbar have no text.
• The list component has no Actions column.
• Vertical — A vertical, scrollable list of cards. Each card consumes the width of the screen. You can use
vertical card containers on smart phones and tablets.
• Horizontal — A scrollable grid of cards. Each card is has fixed dimensions; you can configure the dimensions
in the card editor. You can use horizontal card containers on tablets and desktops.
By default, a vertical card container will render with the default card. It displays the record name and a way to
drill down to individual records:
You can change the view to the regular record list view (grid) by clicking the icon at the top right, and you can
toggle the view back to the card container view. You can create your own cards from a selection of existing
designs and layouts or from scratch. See Creating and editing cards on page 539 for details.
Creating a card
There are four ways to create a card:
• Start with an existing card design — Allows you to create a card quickly and easily by selecting fields to
display in pre-designed components
• Start with an existing card layout — Allows you to choose a column layout for the card and select fields to
display in each column
• Start with a blank screen — Allows you to design your own card layout and select fields to display.
• Start with any of the above options and edit the resulting HTML in any HTML editor.
To create a new card:
1. Decide which object type for which you want to create the card and open a record list page for that object
type.
2. Open Live Preview and select a device.
3. Click + Create a New Card:
5. Select a pattern for the card. You can select an existing design in the Design tab or you can select an
existing layout or a blank card canvas from the Layout tab. The following screens show vertical card designs
with an example on a smart phone and horizontal card designs with an example on a tablet.
6. Select the device(s) for which you want to create the card. Depending on the card container type, you can
select smart phone, tablet in portrait mode, or tablet in landscape mode.
7. If you selected a design, click Next and map components in the card to fields as described in Mapping
components to fields on page 543. If you selected a layout, or after mapping components to fields, click +
Create a New Card and edit the card in the card editor as described in Editing a card in the card editor on
page 544
8. Type a name for the card in the Card Name field and click Save to save the card.
Editing a card
To edit an existing card, click the edit icon next to the card:
The properties Select Desktop Card, Select Tablet Card, and Select Smart Phone Card let you select the
card to user for tablets and smart phones. Click Create to create a new card. Click Edit to edit the selected
card.
See the following topics for details about mapping components to fields and using the card editor:
• Mapping components to fields on page 543
• Editing a card in the card editor on page 544
In this example, Rollbase automatically populated the image component with the Photo field from a Room
object because it is the only Image field in the object definition. If there were multiple Image fields in the object
definition, you could choose from among those fields in the drop-down list. Rollbase also automatically populated
the rating component with the Rating field. Again, if there were multiple Integer or Decimal fields in the object,
you would be able to select any of them from the drop-down list. For each component, either select a field or
select Ignore field.
When you are finished mapping fields, click + Create a New Card. The card opens in the card editor. You can
either save the card or you can continue to edit the card as described in Editing a card in the card editor on
page 544
The screen below shows the card editor for a new card created from the 2 Column layout. When you create
a card with this layout, the card is pre-populated with an Object Name Label, an Object Name value, and an
object view link that drills down to the View page for a record. You keep, edit, or delete these as desired.
The card editor includes several card tools, available from the Card Tools area in the sidebar:
• Add Object View Link — Places an object view link on the card. An object view link drills down to the View
page for a record.
• Add Rating — Lets you add a star rating component to the card. A star rating component can represent
an Integer, Decimal, Currency, or Percentage field with a range of values between 1 and 10, or a Formula
or Expression field that returns an Integer or Decimal value between 1 and 10. You can select an icon for
the component (defaults to a star), an icon color, and apply CSS styles to the star rating. Preview Rating
shows you what the resulting component will look like. If you select the default icon or a Font Awesome star
icon, Decimal values will render half stars if the decimal part of the value is greater than or equal to 0.5.
• Add Percentage Bar — Lets you add a percentage bar to the card. A percentage bar can represent an
Integer, Decimal, Currency, or Percentage field with a range of values between 0 and 100, or a Formula or
Expression field that returns an Integer or Decimal value between 0 and 100. You can select colors for the
bar, apply CSS styles to the bar container, and specify whether to display the percentage value and where
to display it. Preview Percentage Bar shows you what the resulting component will look like.
• Add Color Side Bar — Lets you add a conditional color side bar to the card based on a Boolean value. A
color side bar can represent a Formula or Expression field with a Boolean return type or a Checkbox field.
You can choose the color for the bar when value is true or false and you can choose the bar size. Preview
Color Side Bar shows you what the resulting component will look like.
• Add Card Dimension — Lets you set the dimensions of a card to be displayed in a horizontal card container.
This tool is not available when editing a card to be displayed in a vertical card container. You can set the
card width for desktop and tablet devices, the card height, and CSS styles to apply to the card container.
The screen below shows the Add Card Dimension dialog:
• Add Text Limit —Lets you limit the amount of text displayed for text fields. You can limit the text by specifying
a line count or by specifying a character limit. The screen below shows the Add Text Limit dialog:
At any time while editing a card, you can click the Code View button to view and edit the HTML source:
You can edit the HTML source in the card editor or you can copy the HTML source and edit it in a different
HTML editor.
When you insert a field using the card editor, Rollbase generates the following HTML fragment (value or label):
<span data-column-id=”fieldId” data-column-type=”value”>
<span data-column-id=”fieldId” data-column-type=”label”></span>
For example, the following HTML fragment was generated for a label and value for a City field. Note that the
data-column-id attribute uses the integration name of the City field, which is city.
You can use the span element to simulate what the card editor does, especially if you want to work in your
own HTML editor.
Note: If you are planning to work in your own HTML editor, you can obtain the integration names for the fields
you want to use by creating a card from a blank canvas, adding a field label or value for each field to the card,
and viewing the HTML source. The source will contain the integration name of each field in the data-column-id
attribute. Copy the source and paste it into your HTML editor to keep the integration names available.
The list of tabs for an application shows the settings for this property in the Show In column:
You can specify on which devices a page section is visible by editing the Show In property for that section in
the page editor:
When creating or editing a view, you can select the devices on which a view is available by selecting devices
in the Show In property:
The table of views for an object definition has a Show In column that displays the devices selected for each
view.
When you create or edit a button for an object, you can select the devices on which it will be visible in the Show
In property:
The Show In property is displayed in the table of buttons in the object definition. See Using buttons on pages
on page 515 for more information about buttons.
The following screen shows an application page with labels above field values on a smart phone:
You can also hide individual field labels on View pages. This is useful for instances where the label is redundant,
for example, an image field.
To hide a field label, open the View page in the page editor and select the Hide Label property for the field:
• Responsive application menu bar with overflow. If the screen width is too narrow to display all tabs, the
rightmost tab(s) move into an overflow menu:
• Vertical and horizontal responsive design modes for pages with multiple columns (except Record List pages).
These modes define how multiple columns are displayed on different screen widths. Vertical responsive
design is the default. See Vertical and horizontal responsive design on page 557 for details.
• Responsive dashboard pages. See Responsive dashboard pages on page 560 for details.
• Responsive page title and toolbar. See Responsive page title and toolbar on page 559 for details.
• Responsive images
Image fields are responsive by default. You can control responsiveness and maximum size for an image
by setting properties in the page editor for the image field. If the Responsive property is selected (the
default), you can set the Max Width property to control the maximum width of the image. The Responsive
property only affects desktop devices; images on mobile devices are always responsive. To make an image
non-responsive, deselect the Responsive property.
• Responsive charts
Charts are responsive and are auto-scaled to fit the available space. Auto-scaling is done only if the available
space is less than the configured chart dimensions. Otherwise, the chart will always be rendered with the
configured dimensions. To enable responsive charts, the chart property Fit to Container Size must be
selected (selected by default). See Creating charts on page 471 for more information.
Note: Progress recommends using one, two, or four columns on View, New, and Edit pages.
For example, if a page contains four columns, the columns display as shown below on a large device:
Using vertical responsive design on a medium device, the columns display as shown below:
Using vertical responsive design on a small device, the columns display as shown below:
Using horizontal responsive design, the columns display as shown below on a large device:
Using horizontal responsive design on a medium device, the columns display as shown below:
Using horizontal responsive design on a small device, the columns display as shown below:
When using vertical responsive design, the recommended setting for Navigation Order (a page property) is
Top to bottom, then left to right. Otherwise tab navigation through fields will not behave as the user expects
on smaller screens. For horizontal responsive design, the recommended setting for Navigation Order is Left
to right, then top to bottom to achieve the expected behavior.
• On medium and large devices (width is 769px or greater), the width is shared equally by both parts.
• On small devices (width is 768px or less), the page title consumes 30% of the width and the toolbar consumes
70% of the width.
Administrators can override these proportions at the application level to change the percentage of space
occupied by the page title to give the toolbar more space to display actions in the toolbar rather that in its
overflow using the following CSS classes:
• .rbs-objectViewTitle — CSS class to customize the width of the page title in a record view page
• .rbs-objectEditTitle — CSS class to customize the width of the page title in a record edit page
To customize the width of the page title for an application, add custom styles to either the custom header or
to the custom sidebar. The following example changes the width of the page title to consume 20% of the screen
width on view pages:
<style>
@media only screen and (min-width: 769px) {
/* Device is Small, medium, large */
.rbs-objectViewTitle,.rbs-objectViewTitle {
width: 20%; /* Rest of space will be consumed by toolbar buttons and overflow */
}
}
@media only screen and (max-width: 768px) {
/*Device is Extra Small */
.rbs-objectViewTitle,.rbs-objectViewTitle {
width: 20%; /* Rest of space will be consumed by toolbar buttons and overflow */
}
}
</style>
For information about adding code to custom headers and sidebars, see Header and footer on page 283 and
Custom sidebar on page 283.
• On desktops and on tablets in landscape mode, the page will display two columns.
• On tablets in portrait mode and on smart phones, the page will display one column.
The responsive mode is on by default. If you want to go back to Fluid rendering (HTML table rendering) for
dashboards to be compatible with the way they were in the Classic UI, you can set the Render Mode property
on the page in the page editor. This property is only available if the page has two columns.
The screen below shows where to set the Render Mode property in the page editor.
• To create a view, click New View. The New View page opens.
• To edit a view, click Edit next to the view. The Edit View page opens.
The View Name section contains the following:
• Hide this View from View Selector — When selected, this view is not available in the view selector on
application pages.
• Hide count of total records for this View — When selected, users will see better performance for
complex views with many records.
• Private — When selected, this view cannot be published as part of an application or be used in other
components such as triggers and templates.
• Show In — The types of devices in which this view is available (desktop, tablet, smart phone). The
following rules apply:
• By default, existing views are available on desktops and tablets but not on smart phones. To enable
a view on smart phones, you must manually enable it.
• If there are no views available on tablets or smart phones, Rollbase uses the default view for rendering
data (at least one view is mandatory). By default, the default view is enabled for all devices and the
setting is disabled for editing.
Adding columns
When you create a new view, the record name field is automatically added to Selected Columns. If you do
not include the record name field in the view, Rollbase displays a warning message asking if you are sure you
do not want to include it. The record name field provides a link to drill down to the record's detail page, which
is why it is typically not a good idea to exclude this field from your views.
You can include templates and formula fields in a view. However, this might result into decreased performance
due to a high volume of server-side calculations.
You can define which fields you want appear as columns in your view. For example, you might want to hide
this column in views exposed in external portals. See Field actions on page 308 for more information.
Move the columns you want in the view to the Selected Columns list. Use the arrows on the right to change
their position in the view:
Use the checkbox labeled Show "Actions" column in this view to specify whether or not you want users
who can access this view to see the standard Actions column that contains edit and delete controls:
The Sorting and Grouping section of the Edit View page allows you to specify sorting and grouping:
• Group By — Select a field from the first drop-down list if you want records grouped by that field. Select
Ascending or Descending from the second drop-down list to specify the order in which grouped records
will appear.
• Sort By — Select a field in the first drop-down list to sort records by that field. Select Ascending or
Descending from the second drop-down list to specify the direction in which records will appear.
• ...then by — Select a column and direction to further sort records in the view.
• Disable dynamic records sorting by clicking on the links atop of columns. — Select this check box
to disable dynamic sorting in a view. See Column data options on page 578 for more information.
In the following screen, the view groups Title records by Author; within each group, the records are sorted by
Title and then by Status.
• The calculated subtotal for the set of records shown on the current group (if grouping is enabled). If the
current group spans multiple pages, the subtotal is calculated for all pages.
• The calculated amount for the set of records shown on the current page.
• The sum of amounts for all records in this view on all pages (grand total). This is not available for formula
fields.
You can turn off any of these three ways of totaling for the view you are editing.
Note the following limitations:
• Due to performance considerations, a grand total cannot include formula fields. Totaling by formula fields
is only available for subtotals and page totals.
• The grand total does not display for Average, Min, Max, Variance and St. Deviation when you combine
Event or Task fields with other fields.
In the following screen, Furniture record columns are totaled by Total for Quantity:
Filtering views
You can filter a view to display records that meet certain criteria.
Filter criteria
When defining a view, you can add detailed filter criteria to narrow the result set. This filtering mechanism is
the same that Rollbase uses for object-specific searches and for reports to determine which records are shown
in the output.
The filter mechanism allows you to add up to five filters by selecting a field, an operator, and a value. You can
additionally filter by a date interval.
For example, in the filter criteria shown below, the filter specifies records (in this case, library book titles) where
the title's Status field equals Available.
The operators available depend on the selected field type. The operators are: equals, not equal to, less
than, greater than, less or equal, greater or equal, starts with, contains, does not
contain, is one of, is not one of, is empty, and is not empty.
The Filter Conditions parameter allows you to control how each of the filters is used to determine the output
of the view:
• All (AND): Selecting this condition means that all filter conditions must be met in order for a record to display
in this view.
• Any (OR): Selecting this condition means that at least one of the filter conditions must be met in order for
a record to display in this view, but it doesn't matter which one.
• Expression: Expressions allow you to specify how filters should be evaluated together to determine whether
or not a record should be shown in the view. To define an expression, use the numerical value of the filters
(1 through 5) along with AND, OR, and NOT keywords and parentheses "(" ")" to group subexpressions
together. For example:
• (1 OR 2) AND 3 - Only show records that match filter 3 and at least one of 1 or 2
• (1 AND 2) OR NOT 3 - Only show records that either match both 1 and 2, or do not match 3.
• (1 AND 2) OR (3 AND 4) - Only show records that match both 1 and 2, or both 3 and 4.
• (1 AND (2 OR 3)) OR NOT 4 - Only show records that do not match 4 or those that match 1 and
either 2 or 3.
• Formula: The Formula filter condition allows you to specify a custom filter using the syntax of a SQL WHERE
clause. The length of the filter formula must not exceed 500 characters. This option is not available for
OpenEdge services. For more information about filtering by formula, see Filtering by formula on page 569.
• Search criteria: The Search criteria condition allows you to filter using OpenEdge ABL syntax. This option
is only available for OpenEdge services. For more information about filtering by search criteria, see Filtering
OpenEdge Service objects by search criteria on page 570.
Some fields have special tokens that can be used in filters. Do not use quotation marks around tokens or
keywords.
• For text fields, you can create "or" filters by using the is one of operator and separating multiple values
with commas. For example, Sales, Marketing looks for either Sales or Marketing.
• For user lookup fields, use CURRENT_USER to represent the current user.
• For date fields, you can use special tokens derived from the current date:
Token Description Example
Note: The value of the TODAY token is 12PM+1ms of the current day in the time zone of the current user
for date/time fields; for date fields, its value is either the beginning (for the greater than operation) or
the end (for the less than operation) of the current day.
You can add or subtract integer numbers from tokens to specify a date not in the current time period. For
example:
• To filter by the first day of next week, use the condition WEEK+1
• To filter by the current week (from Sunday to Saturday), use the conditions date>=WEEK AND
date<WEEK+1
• To filter by the previous month, use the conditions date>=MONTH-1 AND date<MONTH
• To filter by the previous and current year, use the conditions date>=YEAR-1 AND date<YEAR+1
Filtering by formula
While filtering views based on expressions offers a lot of flexibility, it does not cover all possible filtering scenarios.
For this reason, Rollbase offers filtering by a formula. To filter a view by a formula, click the drop-down menu
next to Filter Conditions and select Formula:
The page displays the Formula Helper, where you can define the formula.
You write a filter formula using the syntax of a SQL WHERE clause. The formula may include any stored fields
(i.e. non-dynamically computed fields), SQL operands (including LIKE, IN, AND, OR, and NOT), helpers (such
as the current user ID, customer ID, portal user ID, etc.) and the following special functions:
A filter formula can include tokens derived from the current date as shown above.
Note: The length of a filter formula must not exceed 500 characters.
For information on ABL operations and functions, refer to the OpenEdge ABL Reference guide in the OpenEdge
documentation set.
Inline editing
Records in a view can be edited inline just like fields on view record pages.
You can choose to disable the inline editing option for the entire List View grid by selecting the Disable Inline
Edit checkbox in Page Designer. The Disable Inline Edit option is disabled by default.
This property is available for all record list views and related lists. It is applicable only for NewUI.
Dynamic filtering
You can dynamically apply a filter to a view on an application page. This includes views on record list and
selector pages and lists of related records on view pages. To define a filter, click Filter in the toolbar and select
one of the options from the drop-down menu.
This allows you to temporarily modify the filter conditions of the view without changing the saved version.
For information about standard filters and filter expressions, see Filter criteria on page 567.
For information about formula filters, see Filtering by formula on page 569.
Click Apply Filter to reload the view once you have made changes and click Clear Filters to go back to the
default filter conditions of the saved view.
Administrators can control whether the control for advanced filter options (Standard, Formula, and Expression)
is visible on the page by setting the property Hide Advanced Filtering on the view component in the page
editor. They can also disable filtering on the page by setting the property Disable Filtering on the view control.
Administrators can also control whether advanced filter options are available using the following JavaScript
properties:
• showAdvancedFilterTypes on page 1163 — Determines whether the control for advanced filter types is
displayed
• showBooleanOperators on page 1164 — Determines whether the control for Boolean operators is displayed
The Color Code View page opens. You can define one or more filters and select the color to use for each. If
the record meets more than one criterion, the first applicable color is used. The following example shows two
filters, one where Author starts with A and the second where Author starts with B:
• Moving columns — To move a column, drag the column header to a different location. The new column
order is only valid for the current login session.
You change the theme of an application on the application setup page from the Theme Preview mode. The
theme is applied to that application for all users. In the Theme Preview mode, three color dots are displayed
before each theme name. These are the main colors of the theme. See Using the Theme Preview mode on
page 286 for more information.
The following screen shows an application in the Theme Preview mode:
Note: You can further customize the user interface of an application by using custom CSS. See Custom CSS
on page 581 for details.
For detailed descriptions of the Rollbase AJAX APIs, see Client-side AJAX API on page 1064. For detailed
descriptions of the Rollbase JavaScript APIs, see Client-side JavaScript on page 1150.
Custom CSS
You can use custom CSS to modify certain aspects of the user interface for a particular application. Add the
custom CSS to either the application's custom header or to the application's custom sidebar. You can also use
custom CSS to modify the user interface for all applications in a tenant. This requires you to upload a CSS file
as a hosted file and specify the hosted file as the CSS Stylesheet on the Account settings on page 801 page.
When you add custom CSS to an application or to a tenant, you are overriding the defaults in the default
Rollbase CSS files. You can view the contents of these files to gain insight into customizations you want to
make.
The main CSS file for the New UI is newui.css. There is also a CSS file for each built-in theme. The files are
in the following locations:
• .rbs-objectEditTitle — CSS class to customize the width of the page title in a record edit page
See an example that uses these classes.
You specify the space consumed as a percentage of its container, except for rbs-editField-valueContainer,
which is specified as a percentage of the width consumed by the field value.
Default values for the field label, the field value, and the editable field value depend on the screen width.
You can see the column layouts by adding &demoFieldsLayout=true to the end of the URL for the page. The
screen below shows the space consumed by field labels and values on a view page:
The screen below shows the space consumed by field labels, values, and editable values on an edit page:
Other page elements, such as section headers and titles, are changed proportionally to the default font. For
example, if a title was rendered at 28px for a default font size of 14px, it would be rendered at 20px for a default
font size of 10px.
UI Blueprint options
Based on the selected UI template, object view title will change to red for Modern Vertical BP and green for
traditional.
.rbs-ui-template-type-2 .rbs-objectViewTitle { color: red; }
For information about adding code to custom headers and sidebars, see Header and footer on page 283 and
Custom sidebar on page 283.
Custom themes
Rollbase includes several built-in themes that were built using Telerik Kendo UI. You can customize any of
these themes to match the look and feel of your website using the Kendo UI ThemeBuilder, a tool that lets you
modify Kendo UI themes.
See the Kendo UI ThemeBuilder documentation for details about modifying themes.
You can also customize built-in themes using custom CSS. When you add custom CSS to an application, you
are overriding the defaults in the default Rollbase CSS files. You can view the contents of these files to gain
insight into customizations you want to make. The location of the CSS files for the built-in themes are in
[Rollbase_Home]/prod1/css/newui/. You can also see the CSS files used on a particular page by
viewing the page source in your browser.
Rollbase includes FontAwesome icons, which are scalable vector icons that
chttps://demos.telerik.com/kendo-ui/themebuilder/an be customized for size, color, drop shadow, and anything
that can be done with CSS. See the following resources for instructions and examples of using FontAwesome
icons:
• http://fortawesome.github.io/Font-Awesome/cheatsheet/
• http://fortawesome.github.io/Font-Awesome/examples/
As shown, the this reference can be used inside event handlers to access or modify the properties of the
relevant input field.
Tips for writing event handling scripts:
• You cannot use form in a Page's onload script. Instead, note that the HTML form used to edit or create an
object record is always named theForm.
• A good practice is to verify that the JavaScript function you are calling exists on the current page.
• Use prefixes to avoid naming conflicts. Note that Rollbase JavaScript system functions have the prefix rbf_
and system variables have the prefix rbv_.
• Keep in mind that disabled HTML controls do not send values upon HTML form submit.
• It is important to use the integration code of the selected picklist option rather than the field itself in formulas.
That field is replaced with a system-generated ID that is different from installation to installation, so you
cannot rely on it in formulas when publishing your application.
The Event Handlers Helper allows you to select names of other object fields and values or integration codes
for picklists and lookups. Select a field from the drop-down menu. The value to use in JavaScript displays in
the center field. Note that, unlike similar helper components for templates, these helper tokens contain just the
fields' integration names rather than template tokens. These names can be used to refer to HTML elements
in client-side JavaScript.
To view how your event handling code appears in generated HTML at runtime, click Debug to open the debug
window. This window displays the actual field's HTML and renders the component below.
Before testing HTML event handlers, turn on notifications about JavaScript errors in your browser. Note that
generated HTML event-handling code will be enclosed in double quotes, as shown in the onfocus method
above. If you need to use a double quote inside your code, precede it with a backslash instead, such or consider
using a single quote.
Try to keep your event handler code relatively short. For longer handlers, you can call JavaScript functions
inside custom script components in your page(s).
You can use this in the body of event handlers to refer to the field and its properties. You can also pass this
as parameter to any custom JavaScript functions that need to work with this field.
Event handling code is stored per field. Once specified, event handling code will be used for all new, edit, and
status changes pages.
This code first verifies that the loginName field exists in the current form and has no value specified by the
user.
You can use the prefix form in front of any field integration name to reference that field in the DOM. For
example, in the above code we reference the loginName field as form.loginName.
Disabling fields
Often, behavior of one field should depend on a selection made in another field. Consider the example below,
in which there are three fields:
• Club Member (checkbox)
• Membership Fee (currency)
• Member Since (date)
The last two fields should only be available for the user to enter data if Club Member is checked.
The steps below describe how to accomplish this:
<script>
function my_showClubControls(form) {
var isMember = form.club_member.checked;
rbf_setFieldDisabled('membership_fee', !isMember);
rbf_setFieldDisabled('member_since', !isMember);
}
</script>
2. Add event handling code to the onclick event of the Club Member check box (you can pass form as a
parameter to JavaScript functions):
3. For consistency, add the same code as above to the page's onload handler:
The Membership Fee and Member Since fields will be enabled or disabled, depending whether the check
box Club Member is checked.
1. Create a picklist named Membership Type with three values. Each of the values must have an integration
code as shown below:
<script>
function cust_membFee() {
with (document.theForm) {
if (membership_fee.value=='') {
var code = membership_type.options[
membership_type.selectedIndex].getAttribute('code');
if (code=='A')
membership_fee.value=1000;
else if (code=='C')
membership_fee.value=500;
else
membership_fee.value=200;
}
}
}
</script>
3. Add the following code to the onchange event handling code for the Membership Type picklist:
Now, when the Membership Type option is selected and the Membership Fee box is empty, this box will
be prepopulated with a new value depending on the selection.
<script>
function cust_membFee() {
with (document.theForm) {
if (membership_fee.value=='') {
var code = membership_type.options[
membership_type.selectedIndex].getAttribute('code');
if (code=='A')
membership_fee.value='{!#SETTINGS.admiral_fee}';
else if (code=='C')
membership_fee.value='{!#SETTINGS.captain_fee}';
else
membership_fee.value='{!#SETTINGS.sailor_fee}';
}
}
}
</script>
Examples
The examples in this section demonstrate use of Rollbase AJAX APIs.
• The object has a picklist with the values Not a member (code NO) and Club member (code YES)
• The page's Membership Info section should be shown if Club member is selected and hidden otherwise.
To accomplish this, follow these steps:
1. In the page editor, add a script component with the following script to the Edit page (see Editing pages on
page 497):
function customizeEdit() {
var sectionID = rbf_getSectionIdByTitle("Membership Info");
var code = rbf_getPicklistCode("membership");
rbf_showOrHideSection(sectionID , code=="YES");
}
A simple lookup
Consider the following example: A Rollbase page includes a lookup field (see Relationships between objects
on page 317) for a property and an amount for a proposed mortgage. Upon selection of the property, we want
to use the property's value as the default for the mortgage amount. This means a server-side trip using the
AJAX API, as illustrated below.
1. Create the objects Property and Mortgage, with a one-to-many relationship between Property and Mortgage
(one property can have more than one mortgage)
2. For the Property lookup field in the Mortgage object definition, implement the following onchange event
handler:
if (typeof cust_populateAmount=='function')
cust_populateAmount();
3. Add the following script component to the New Mortgage page using the page editor:
<script>
function cust_populateAmount() {
var propId = document.theForm.R4388623.value;
rbf_getFields("property1", propId, "appraisal_amount",
cust_callbackAmount);
}
Now, when the Property lookup field is updated, it triggers an AJAX call to Rollbase and assuming that the
requested record exists and the user has appropriate access rights, the value of the appraisal_amount field
will be set as the default to the amount field.
A financial calculation
While formulas provide a powerful way to display calculations on View pages, they are not so useful on Edit
pages, since formulas cannot dynamically use changes made by a user while entering data into a form. However,
formulas can be used on Edit and New pages as placeholders for dynamically calculated values, even though
the actual calculations now have to be performed on the client side using HTML events and the JavaScript
API.
Consider the example of an object that has three fields:
However, when the user changes the content of the two editable fields (Rate and Amount), the content of the
formula field does not change. To have the field change, you need to add a financial calculation similar to the
following:
1. Add a script component to the Edit and New pages (see Editing pages on page 497):
function cust_interest() {
var m = rbf_getFloat(rbf_getFieldValue("amount"));
var r = rbf_getFloat(rbf_getFieldValue("rate"));
var interest = m*r/100;
rbf_setFieldContent("interest",
rbf_formatCurrency(interest));
}
3. Add the same code to the onload script on the Edit page for consistency.
Now the content of the Interest field will be dynamically updated on the Edit and New pages in a consistent
manner with the View page.
Note: When working with Script components, you can use the Test EVAL[] Block button to debug/develop
server-side script.
Typically, server-side API execution is faster and it is not subjected to a limit on the number of AJAX calls
allowed per login session. A client-side API is used whenever user input can only be made available during
runtime and not when the Web browser page is rendered.
Access control
Since the client-side API gives users (or portal users) access to underlying data, functions that access and
modify the data are subjected to access permissions. If the current user does not have sufficient permissions,
the API call will fail.
See Security and access control on page 719 for more information about access control and permissions.
See Client-side AJAX API on page 1064 for the available APIs and permissions required for each.
Rollbase portals
Portals are essentially external-facing web applications built using the same components as standard Rollbase
applications. Portals typically run on a corporate website or intranet. You can create portal pages to display
dynamic lists of records, to allow creation of records through custom forms, and to invoke triggers and custom
business logic.
For a video tour of creating a portal, see "Creating a Public Web Portal for a Progress Rollbase Application"
.
You can create any number of portals for an application and publish them as a part of the application XML.
For information on publishing applications, see Publishing and distributing applications on page 765.
Portals are different from normal Rollbase applications in three significant ways:
• Portals can be accessed by anyone with internet access, although a portal can require users to register
and/or log in. See Portal security on page 610 for more information.
• Portals do not run within the normal Rollbase environment, which typically displays application objects in a
tabbed interface. Instead, they consist of a set of pages that are linked together to form a cohesive website.
• Portals can adopt the look and feel of any existing website in which they are embedded. See Creating a
custom header and footer on page 607 for more information.
The following graphic illustrates the differences between Rollbase application and portal usage:
Portal visitors
A portal can allow authenticated or non-authenticated visitors:
• Portals for authenticated visitors include a login page. When you create a Login Form portal page, you
select which type of user account to support. Each Login Form only accepts logins from one type of user
account:
• Users - accounts created for your tenant as Rollbase User records.
• Rollbase object records - accounts created for objects with the Portal User attribute. This allows users
who do not have Rollbase accounts to use a portal as authenticated portal visitors. For more information
about this type of user account, see Creating a portal user on page 611.
This portal does not require a visitor to log in. See Creating portals without authentication on page 613 for more
details about developing this portal.
You also need to identify the type of user(s) who can access the portal, determine the types of records they
can access, and specify the appropriate permissions. Setting permissions for portals requires careful planning
to ensure that portal users can access information they are supposed to access and that they cannot access
information they are not supposed to access. Even portals without authentication require setting permissions.
See Creating portals without authentication on page 613 and Creating portals with authentication on page 614
for examples.
Building a sophisticated and easy-to-use portal often requires significant knowledge of web design, HTML,
CSS, and JavaScript.
Creating a portal
Follow these steps to create a portal:
1. From the Setup Application page for your application, select Portals from the ribbon.
The page scrolls to the Portals section:
• Include Kendo UI: If this box is checked, Rollbase will add Kendo UI-related CSS and JS files for the
portal. If you only want to use a few Kendo UI features, leave this box unchecked and include only the
files required for those features. This will result in a lighter page that loads faster. For example, currently
the entire Kendo UI library is 2,594KB and the two color picker JS files total 33KB. See
http://www.telerik.com/kendo-ui for more information.
• Right to Left Text Direction: If this box is checked, Rollbase will use right-to-left text direction. This is
intended for portals that use a language written from right to left, such as Arabic or Hebrew. This is an
experimental feature.
• Language: Select the language for the portal pages.
• Date Format: Select the date format to use in this portal in display and input fields.
• Time Zone: Select the time zone for this portal. All date/time field values will be adjusted to this time
zone.
• Description: Provide a description for this portal.
• Login URL: Use this setting only for portals embedded into other websites that require authentication.
This is the URL for logging into the portal.
• Add to Applications: Select the applications to which this portal will be added.
4. Click Save.
Rollbase creates the portal and a new, empty generic page that is the default main portal page. Depending
on your requirements, you can edit this page to add content to it, or you can assign a different main page
to the portal and delete this page.
5. Create portal pages for the portal.
6. If you are planning to use a portal as part of your website--rather than embedding it in one of your website's
pages using an HTML iframe--configure the header and footer to adopt the look and feel of your site. See
Creating a custom header and footer on page 607 for more information.
7. Configure Portal security on page 610.
• Generic Page - A page in which you can embed list views (list of records of a specific object type) and
arbitrary web content, such as HTML or JavaScript. A new page is initially empty.
• Search Results Page - A page used to display the results of a search within a portal. A new page
contains a list of objects.
• Object View Page - A page to view a single record of a specific object type. A new page is initially empty.
• Object Create Page - A page to create a single record of a specific object type. A new page contains
a submission form.
• Object Edit Page - A page to edit a single record of a specific object type. A new page contains a
submission form.
• Object Selector Page - A page in a popup window that is used to select related records when using a
lookup field in an Object Create or Object Edit page. A new page contains a list of objects.
• Login Form - A page specifically designed to allow portal users (Rollbase users and records with the
Portal User attribute) to log in to a portal. A new page contains a login form with a user name and
password.
• See Portal security on page 610 for more information about portal users.
• Take Survey - A page where portal visitors can answer survey questions. You can only create a Take
Survey page if the application for which you are creating the portal contains at least one object with the
Survey attribute. A new page contains a list of survey answers. You must configure a Take Survey
page to specify the survey record to use. See Portal page actions on page 605 for instructions. Portal
visitors must log in to the portal to take a survey.
4. From the Object Type drop-down list, select the type of object to which this page should be associated:
• For a Login Form, the list includes existing Rollbase users and objects with the Portal User attribute;
you are creating a login page for a specific type of portal user.
• For a Take Survey page, the list includes objects that have the Survey Taker attribute.
• For any page type other than Generic Page, Login Form, or Take Survey, the list includes all available
objects.
5. Click Save.
After creating a portal page, you can modify it so its behavior meets your requirements.
Modifying a portal page includes:
• Editing the page
• Modifying portal page properties
• From the portal view, click Edit in the table of pages next to the page you want to edit.
• From the portal page view, click Edit.
Editing a portal page is similar to editing an application page. See Editing pages on page 497 for more information.
On the portal page editor, you can:
• Drag a new section from the left column onto the page.
• Drag an HTML component onto the page. See Adding an HTML component to a page on page 353 for more
information.
• Drag a script component onto the page. See Adding a script component to a page on page 353 for more
information. The script component can be an EVAL block; see Adding an EVAL block to a portal page on
page 601 for an example.
• Drag any of the components under Available Components onto the page. The available components vary
depending on the page type and the object with which the page is associated, if any.
• In the above graphic, an Object View page is associated with the Title object. The page displays a Title
and a link to the All Titles portal page.
• Add search forms. Pages with search forms require further configuration; see Portal page actions on page
605 for details.
• Specify properties for page components. For example, you can specify which view to use to display a list
of objects. The graphic below shows the possible views that can be used to display a list of Titles.
• From the portal view, click Edit in the page table next to the page you want to edit.
• From the portal page view, click Edit.
The page editor opens.
2. Drag New Script Component from the left column to the location where you want to add the #EVAL[ ]
block.
A new <Script Component> appears in the page. The component can be in its own section or can be
added to an existing section, depending on the page type and existing content. In the following graphic, the
component is added to the default section of a generic page:
4. Add the JavaScript #EVAL[ ] block to the text area. You can use the Template Helper to generate tokens
for IDs, URLs, and links you want to use in the block.
5. When you are finished adding the #EVAL[ ] block, click Save in the Edit Script dialog and click Save in
the page editor.
#EVAL[
function f1() {
var arr = rbv_api.selectQuery("SELECT id,name,author FROM title_lb", 1000);
var buff = '<table cellpadding=5><tr><th>Title</th><th>Author</th></tr>\n';
for (var k=0; k<arr.length; k++)
buff += '<tr><td>
<a href="portal.jsp?c={!#CURR_CUSTM.id}
&p={!#PORTAL.125233463.#id}&g={!#PORTAL.125233463.127055194#id}
&id='+arr[k][0]+'">'
+arr[k][1]+'</a></td>'+'<td>'+arr[k][2]+'</td></tr>\n';
buff += '</table>\n';
return buff;
}
f1();
]
• From the portal view, in the table of portal pages, click Properties in the row of the page you want to view
or edit.
• From the portal page view, select Properties from the More actions drop-down menu.
The Page Properties page allows you set the following properties for the selected page:
Only logged in portal users can Portal user must be authenticated; All except Login Form
access this page otherwise, the user is redirected to
this portal's Login page.
Destination Page Page to which to redirect visitor Object Create, Object Edit, Login
after form submission Form, Take Survey
• View - Preview the selected page in a pop-up window. For Object View and Object Edit pages, you are
prompted to select an existing record.
• Edit - Edit the selected page in the page editor.
• Clone - Clone the selected page and edit the new page in the page editor.
• Del - Delete the selected page (not available for the current main portal page).
• Copy To - Clone the selected page and assign it to a different portal.
• Properties - Opens the selected page's Page Properties page; available properties vary depending on
the page's type. See Portal page properties on page 604 for more information.
• Config - Configure options for specific types of pages and page content:
• For a Take Survey page, to specify the survey record to use and the number of columns on the page.
• For a page containing a search component (Detailed Search or Search Form), to specify the object
type to search, the search results page, the field(s) to search, and the search criteria (starts with,
contains, etc.).
• From the portal view, in the table of portal pages, click Properties in the row of the page you want to
view or edit.
• From the portal page view, select Properties from the More actions drop-down menu.
The Page Properties page opens. The HTML Events Handlers section of this page includes the Template
Helper:
2. From the first drop-down field (Title in the above graphic), select the portal for which you want to create the
page's URL:
The Template Helper displays the token to use for the page's URL:
For Generic or List pages, you can use this token directly in user interface templates.
For a View or Edit page, which displays a single record, you must add the ID of the record being edited or
viewed. To do so, append the URL's id parameter to the token:
{!#PORTAL.125233463.125233479#url}&id={!id}
1. Develop or obtain the HTML code for the header and footer. If you do not already have HTML code to use
for the header and footer, the easiest way to get started is to select a page on your website to use as a
template. View the HTML source of this page and remove any central content where you would like your
portal content to appear. All HTML code above this content should be used as the header and all HTML
code below should be used as the footer.
2. If any code in your portal header or footer HTML contains references to external files such as images,
JavaScript files, CSS files, or links to other pages using relative URLs (such as "../images/myimage.gif",
"../index.html", etc.), do one of the following:
• Switch to fully qualified URLs, including the full path to each external file. For example, you would change
"../index.html" to "http://www.mycompany.com/index.html".
• Include the following element in the <head> element of your header: <base
href="www.mycompany.com"> …, where mycompany.com is your website's URL (the full path to
the directory where your content can be found if the relative URLs were added to the end of it). The
base element tells any relative URLs to use the specified path as the root and is the only way relative
URLs will resolve to the correct domain.
3. If you have enabled the HTTPS setting for the portal, verify that your HTML code either uses a base URL
with HTTPS support or that all of the images and files referenced in the header and footer use fully qualified
HTTPS URLs.
4. When your header and footer HTML is ready to add to the portal, from the portal's view page, select Header
and Footer from the More actions drop-down menu:
5. On the Header And Footer page, paste the HTML for your header into the HTML Header area.
6. Paste the HTML for your footer into the HTML Footer area.
7. You can choose to include the default stylesheet named portaltheme.css above the header in each
portal page. From the Include Stylesheet drop-down list, select portaltheme.css to include the default
portal stylesheet or select None if you do not want to use the default stylesheet.
8. If desired, you can customize the header and footer using merge fields, such as
{!#CURR_USER.firstName} in the HTML code for the header and footer. If you want to include merge
fields, use the Template Helper to create the code for each merge field. In the graphic below, the user has
selected the current portal users's name to generate the merge field to include in the header or footer:
For more information about merge fields, see Adding business logic on page 349.
9. Click Save.
Your portal pages will now contain the custom header and footer you created.
3. Click Save.
The page you selected is now the main portal page.
1. On the portal's view page, in the Pages table, click Assign Pages.
The Assign Pages page opens:
2. Select the page(s) you want to add to your portal from the Available Pages column and click to move
the page(s) the Selected Pages column.
3. Click Save.
Note: You can also remove pages from your portal by selecting them from the Selected Pages column and
clicking to move them to the Available Pages column.
Portal security
Portals have several facets of security:
• Access control: Access rights for portal users are set for user accounts in the following ways:
• For accounts based on Rollbase User records, access rights are specified for that user's role.
• For accounts created for objects with the Portal User attribute, access rights are specified for the Portal
User role. These permissions cannot be relationship-based and they cannot include
Location/Department/Function (LDF) filters.
• Access rights for records created by portal users are set for the Record Creator pseudo-role. See The
Record Creator role on page 742 for information about the Record Creator role.
• As an additional security measure, you can specify a whitelist of IP addresses to be checked when a portal
user logs in. For information about the additional security setup and administration, see Advanced setup
and administration on page 791.
The login session for portal user expires after a certain period of inactivity. Rollbase Private Cloud customers
can configure this time interval. See shared.properties on page 926 for more information.
Administrators can login into a portal as a selected visitor from the portal view page by clicking the login form
page name under Login As in the More actions drop-down.
Setting permissions for portal user objects requires careful planning to ensure that portal users cannot access
information they are not supposed to access. See Creating portals with authentication on page 614 for examples.
1. Create a new object definition and a tab for that object in your application, selecting the Contact attribute
from the Attribute table and the Portal User attribute from the Advanced Attribute table. See Creating a
new object definition on page 298 for details about creating an object definition.
2. Edit the object's New page to add the Login Name and Password fields to it. See Editing pages on page
497 for details about adding fields to a page.
3. Edit the object's Edit page to add the Login Name and Password fields to it. See Editing pages on page
497 for details about adding fields to a page.
4. Launch your application and select New <object> from the object's page menu. In the following graphic,
the new object definition is named PortalVisitor:
5. Create records for the new object definition, specifying the Login Name and Password fields. These fields
are the credentials for each portal user account. Create a record for each person who will be a portal user.
When you create a Login Form portal page, you can specify the object. In the following graphic, only user
accounts based on PortalVisitor records can log in to the portal:
To create this simple but fully functional portal, take the following steps:
1. Create a new portal as described in previous sections. This generates the main page.
2. Edit the main page and add a Detailed Search component to it. This is automatically available in the
Available Components section of the page editor. Add an HTML component with a welcome message.
3. Create a Search Results page for the Title object. Rollbase automatically places a list of Title records onto
this page.
4. Configure the main page to search for Title records. See Portal page actions on page 605 for more information.
5. Create an Object View page for the Title object.
6. Edit the Object View page and add and arrange fields as desired. See Editing portal pages on page 599 for
more information.
7. Edit the Object View page to add links to the Search Results page and the main page. Links to these
pages are automatically available in the Available Components section of the page editor; edit each link
to change the text as desired. See Editing portal pages on page 599 for more information.
8. Finally, add View permission to the Title object for the Portal Guest role. Unless the proper permissions
are assigned to the Portal Guest role, visitors your portal will not be able to view records.
Example 1
Consider the following example:
You want to use a Rollbase portal to allow non-Rollbase users to respond to an invitation to an event. Each
invited person can log in to the portal and indicate whether they will attend the event.
To build such a portal, create the following:
• An object named Invitee with the Portal User and Contact attributes. See Creating a portal user on page
611 for details about creating this type of user account.
• A Radio Button field in the Invitee object named Will Attend with the values Yes and No.
• A record of the Invitee type for each person to invite, including the Login Name and Password fields.
• On the Invitee object, set the Portal User permissions to View and Edit.
The next step is to create a portal and portal pages. The following graphic illustrates the required portal pages
and the typical navigation between them:
Login page Invitee Login Form Allows a registered invitee to log in to the portal; destination page is
Invitation Response page
Invitation Response page Invitee Object Edit Allows a logged-in invitee to select a Yes or No button and submit t
response
Now, each invitee can log in to the portal and submit a response to the invitation.
Example 2
Consider the following, more complex example, where a portal user can:
• Register for access to a portal.
• Log in to that portal through a login form.
• View his/her information.
• Create comments.
• View the list of his/her own comments (but not comments created by other visitors).
To build such a portal, create the following:
• An object named Visitor with the Portal User and Contact attributes. See Creating a portal user on page
611 for details about creating this type of user account.
• An object named Comment with a Text Area field.
• A one-to-many relationship between Visitor and Comment.
The next step is to create a portal and several portal pages. The following graphic illustrates the required portal
pages and the typical navigation between them:
In this design, any portal user can create a new Visitor record - this represents self-registration. But the View
privilege is granted only to the Record Creator. This means that an authenticated visitor can only view their
own personal record. If a visitor tries to access data of another visitor, they'll be denied access.
You can assign permissions to the Record Creator role from the Permissions section of an object definition's
details page.
You can assign permissions through the relationship between the current user and records the same way as
you can between a regular user and records (see Role-based access control on page 724).
Hosted files
As with most websites, in portals you often need to make use of and reference files such as images, Flash
movies, JavaScript, CSS, etc. These files are typically referenced in web pages through <IMG>, <SCRIPT>
and other HTML tags. Rollbase provides a convenient way to host and reference arbitrary files through a
mechanism called Hosted Files.
For example, using this feature, you can upload and use third party and custom JavaScript and CSS libraries
in your portals to create a unique user experience and look and feel. JavaScript hosted files can be very useful
in development of both client-side and server-side scripts. You can preview these files while working in the
formula editor using the drop-down list View JS Hosted Files.
Hosted files can be included as part of published applications just like other application components (e.g.
portals, objects, etc.)
Hosted files are most often used in portal pages, but they can also be used in Rollbase object pages.
You can prepare a CSS Stylesheet with all tags used by the Rollbase UI (see Rollbase CSS Styles for the
Classic UI on page 1331) and upload this CSS as hosted file. In this case, you could use hosted CSS to customize
the appearance of all pages in your tenant. For information on hosting CSS, see Advanced setup and
administration on page 791.
You can reference hosted files using merge fields in various scenarios such as in template and formula fields,
HTML and script components in pages, as well as within email and document templates. Using hosted file
tokens in email templates provides a convenient way to add email attachments. See Hosted file tokens on
page 619 and Using hosted file tokens on page 619for more information.
Filename [image] Any template field or page-level HTML <img> tag with URL to an
HTML or Script component, for image file. This works similarly to
example: <img shared Image fields.
src='{!#HOSTED_FILE.7034090}'
border='0'
align='absmiddle'/>
Filename [text] Any template field or page-level Entire text of the hosted file. This
HTML or Script component, for approach has many possible
example: usages, such as using custom
{!#HOSTED_FILE.13687907#text} JavaScript libraries in server-side
formulas.
You can create a server-side formula which uses this file by using the hosted file's filename[text] merge token
and invoking the function, as follows:
{!#HOSTED_FILE.499203#text}
my_func({!num1}, {!num2});
If you use the formula debugger to debug this formula, it will be parsed in the following form:
function my_func(x, y) {
return x+y;
}
my_func(100, 200);
Note: When using JavaScript functions in server-side formulas, do not use a standalone return statement;
doing so will cause an error. The result of the very last JavaScript statement (typically a function call) will be
used as the formula result.
For information about server-side APIs, see Server-side API on page 989.
When deciding how to expose Rollbase application data to users on tablets and smartphones, it is important
to weigh the necessary functionality against the resources and skills available within your organization.
Requirements for mobile support vary widely. Rollbase Web applications provide responsive design, making
it possible to simply allow mobile users to access the application from a browser. Rollbase also supports
adaptive features; you can detect the type of device and customize the experience accordingly. On the other
hand, to use native OS features that are not available to browser-based applications or to distribute an application
from Apple, Android, or Windows app stores, you can take advantage of the Rollbase integration with the
Telerik platform to build a hybrid mobile app. In this case, it is important to consider time constraints and the
skill set required because designing and developing a mobile app with a good user experience can be complex,
especially for smartphones.
In summary, the options available to support mobile users include:
• Rollbase responsive and adaptive user interface — Rollbase's user interface provides an out-of-the-box
Web UI that works well across various device sizes and platforms. See Responsive user interface on page
555 for more information. You can create one design that runs well on a variety of platforms with minimal
effort. You can tailor the workflow and user experience based on whether users access the app from a
desktop, tablet, or mobile phone. See Adaptive user interface on page 534 for more information about
customization.
• Building a hybrid mobile app with Telerik Platform — The Telerik Platform makes it easy to create apps
™
that use native OS features and/or can be distributed in app stores. The Telerik Platform provides an
integration with Rollbase that allows you to access Rollbase data from a native or hybrid mobile app. Rollbase
generates metadata catalogs that provide the schema necessary for a mobile (or any external) app to create,
update, and delete records and a Progress Data Service that handles the requests. Use of the Progress
Data Service and data catalogs provide an alternative to calling Rollbase APIs directly.
See the following for related information:
• Watch a video that demonstrates how to access Rollbase data from a hybrid mobile app.
• To use Progress Data Catalogs with the Telerik Platform, see Using the Telerik Platform to create a
mobile app on page 622
• For general information on the CDO standard (maintained by Progress Software) see
http://clouddataobject.github.io/
Note: Rollbase Mobile-Web enabled application — For customers using the Rollbase Classic UI, this legacy
option supports non-customizable, Rollbase-generated mobile apps that you can enable per Rollbase Web
App. This functionality was formerly known as Mobile Edition and offers none of the responsive or modern
design options of those available in the new Rollbase UI. You choose the application objects and the associated
views exposed to users through the mobile app, but you cannot change the look and feel of the mobile app
itself. Users logging in to their usual application URL with a mobile device will be redirected to the mobile-web
application. See Mobile-Web enabled applications on page 654 for details.
• Progress Data Service URL: The server location of Progress Data Services. Navigate to Setup
Home > Applications Setup > API to find this URL.
• The location of the catalog:
• If you download the catalog locally, you can browse and upload it in Telerik Platform.
• To use the catalog stored by Rollbase, find the URL on the Progress Data Catalog view page.
Navigate to Setup Home > Applications Setup > Progress Data Catalogs to find this URL.
3. Identify the integration name of the object and the fields that you want to display. You can find these
names by viewing the object definition:
• In your Telerik Account, create a mobile app using one of the following approaches:
• Build the screens first as described in Using the Views first approach on page 624.
• Use the sample Progress Data Service project as described in Creating a mobile app using Code and
the Progress Data Service template on page 645.
Watch a video that demonstrates how to access Rollbase data from a hybrid mobile app.
To use Kendo UI controls in your app, you write code to bind the widgets to objects corresponding with those
in the Progress Data Catalog that you create in Rollbase. Examples illustrating use of PDOs and JSDOs are
available from the gitub site, http://clouddataobject.github.io/. The Progress Data Objects Guide and Reference
contains the latest documentation describing how to access JSDOs from Kendo controls.
For more information on the Telerik Platform, see the following documentation:
1. Create the catalog from Setup Home or from the application setup page:
• Navigate to Setup Home. From the Applications Setup section, select Progress Data Catalogs. Or,
• Navigate to the application setup page Catalogs section.
• The menu bar down the left side provides global features for building the app, such as Views and Code.
• The menu bar displayed for the Views selection provides access to a menu of functions for building the
app using Views.
• The left pane beside the Views menu displays options associated with the current menu choice, such
as a function for adding views with Manage Views selected and a list of views that are currently created
for the app. Initially, this pane shows a starting view (Home View) for you to use to create your first view
(not used in this example).
• A center pane (if displayed) shows properties associated with an app element selected in the left pane,
such as, initially, creation of the starting view.
• A right pane (if displayed) that provides a simulated display of the currently selected view using one of
the available device simulators.
Next, Add a Progress Data Service provider on page 626 so that the app can connect to Rollbase.
1. With the app open in the Views window, click Data Providers:
2. Click Add Provider and select Progress Data Service from the drop-down menu.
The Connect to a Progress Data Source dialog opens:
• Provider Name — The name to be used when referencing the provider in app code. The name can only
contain letters and numbers with no spaces. Defaults to progressDataProvider.
• Provider Title — The name Telerik Platform will display for this provider. Defaults to Progress Data
Service.
• Service URI — The server location of Progress Data Services. See how to locate this URI.
• Catalog URI — The location of the catalog. See how to locate this URI.
• Catalog File — Allows you to upload the catalog file to your Views project either from the location
specified by a URI (typically, Catalog URI) or from a physical file location that you browse to. This allows
you to select objects and fields wherever you need to enter them as values for view properties, but if
anything changes in the Rollbase application, you will have to re-upload the catalog. If you access the
catalog from its URI without uploading it, you must enter the names of these resources manually, but
Rollbase automatically updates the catalog whenever there are changes to the application.
• Authentication model — Select Form from the drop-down list.
The following screen shows the dialog with values:
4. Optionally, you can select Add an "Authentication" view to my app, which creates a login screen for you.
See Create or configure an Authentication view on page 630 for details.
5. Click Add.
Either the new provider information displays in the center pane, or if you selected Add an "Authentication"
view to my app, the new view appears in the left pane and the new Authentication View properties display
in the center pane, with the General option selected to show the General Settings.
1. With the app open in the Views window, select the Manage Views tab and click Add View:
The new Authentication View properties display in the center pane, with the General option selected to
show the General Settings:
Note: You can only modify this field before clicking Apply.
b) Optionally, change the value in the Title field, for example to Log In, which changes the label for the
view in the left pane and specifies the heading that displays in the app screen for this view.
c) Expand the Navigation node and select Include this view in the app navigation. By default, an icon
is selected to represent this view in app navigation. Optionally, you can change this icon by opening and
selecting a different icon, as shown below:
d) Expand Data Binding and verify that a Progress Data Service provider is selected, or create one if
you have not already done so. See Add a Progress Data Service provider on page 626 for details.
4. Under Authentication View, click the Sign In option to scroll to the Sign In Screen properties, then expand
and change the settings as follows:
a) Expand Email. In the Textbox label field, optionally change the label you want to appear for the field
representing the user name. For example, you might enter Progress ID for connecting to a Progress
Data Service for Rollbase. Optionally, enter text in the Help text field. This text will appear in the field
in the app.
When editing a view, you can click Apply at any time and test it in the device simulator. For example, if
you click Apply now, the screen below shows the Authentication view after typing Progress ID (along
with the previously suggested settings):
Note: The Authentication View properties scroll back to the General Settings after you click Apply.
Note also that the Register button, if it appears as displayed in the simulation, is not needed for this
example app.
b) To remove the Register button, expand Configuration / Options and deselect Enable "Register"
screen. This disables the Register button from the view—click the Sign In option, again, to continue.
c) Expand Password. In the Textbox label field, optionally change the label you want to appear for the
field representing the password. Optionally, enter text in the Help text field. This text will appear in the
field in the app.
d) Expand Confirm button. Optionally, change the label you want to appear on the confirm button, for
example, to Log In.
e) Expand Redirect and select the view to display after a successful log in, if you have created one. (We
return to this step, later, after creating a Master Detail view.)
5. Click Apply.
The device simulator displays your changes similar to the following screen, which shows the completed
Authentication view in the device simulator with the device iPhone 6 selected:
To test the view, enter a valid Progress ID and password in the device simulator.
Note: You can only modify this field before clicking Apply.
b) Optionally, change the value in the Title field, for example to Library Titles, which changes the
label for the view in the left pane and specifies the heading that displays in the app screen for this view.
c) Expand the Navigation node and select Include this view in the app navigation. By default, an icon
is selected to represent this view in app navigation. Optionally, you can change this icon by opening and
selecting a different icon.
d) Expand the Data Binding node. And do the following:
• Verify that the Progress Data Service provider you want to use for this app is selected in the Provider
field. You can also create a Progress Data Service provider at this point if you have not already done
so, then return to finish creating this view. See Add a Progress Data Service provider on page 626 for
details.
• In the Content type field: If you are accessing the Progress Data Catalog directly from its URI, enter
the integration name of the Rollbase object type for which you want the view to display records, for
example, Title. See how to locate the integration name. If you uploaded the Progress Data Catalog,
select the object integration name from the selector list.
4. Under Editable List View, click the List option to scroll to the List Screen properties, then change the
settings as follows:
a) In the Heading text field: If you are accessing the Progress Data Catalog directly from its URI,enter the
integration name of the Rollbase field whose value you want to display in the list for each record of the
Rollbase object, for example, name. If you uploaded the Progress Data Catalog, select the field integration
name from the selector list.
b) Leave the Configuration settings unchanged.
c) Expand Item Action, and ensure that Open item details is selected.
d) Click Apply to update the app with these changes to your Master Detail view.
Telerik Platform saves your changes and the device simulator displays the resulting view. The device
simulator cannot display Rollbase data until you log in, so ignore the loading icon. Also, before seeing the
data, you need to set your Authentication (now Log In) view to navigate to this Master Detail (now Library
Titles) view after a successful log in.
5. Select the Log In view in the views pane, and follow these steps to set navigation for a successful log in:
a) Under Authentication View, click the Sign In option to scroll to the Sign In Screen properties.
b) Expand Redirect and select Library Titles, as follows:
6. In the Log In view simulation, enter your Progress ID and Password credentials, then click the Log In
button.
The Library Titles screen displays in the device simulator showing the list of titles from your Progress
Data Service, similar to the following:
Note that if you select any of the items in the list, the simulator displays an empty Detail screen. You need
to add fields whose values you want to display for any item that you select.
7. In the views pane, select the Library Titles view to open its properties.
8. Under Editable List View, click the Detail option to scroll to the Detail Screen properties, then change the
settings as follows:
a) Under the Heading text property, select Static to use the default, or enter your own literal value, for
example, Title Information, which displays as the heading for the detail screen.
b) For each field that you want to display in the detail screen, click + Add Field and select a text and visual
element, such as Short text, to use for the field.
A group of field properties appears below + Add Field for each field you create, in the order you created
it, identified by the type of field element (such as Short text) that you chose to represent its value. All
element types contain a Name, Data Binding or Text, and optional Format setting. For the Short text
fields used in this example, there is also a Label setting to identify the field.
c) For each field element, enter a unique value for the Name property. The app code will refer to this name.
Note: You can only modify this field before clicking Apply.
d) For each Short text element, enter a value to display as a label for the field, such as Title:,
Author(s):, or Publisher:, as you will see in the example screen.
e) For each field element: If you are accessing the Progress Data Catalog directly from its URI, enter the
integration name of the Rollbase field whose value you want to display for the record associated with
the item that is selected in the list, for example, name, Author_s_, or Publisher, whose values you
will see in the example screen. If you uploaded the Progress Data Catalog, select the field integration
name from the selector list.
9. Once you have finished the settings for your Detail Screen properties, click Apply to save them.
10. Select the Log In view in the views pane and, again, enter your credentials (if they are not already entered)
in the device simulator, then click the Log In button.
The Library Titles screen, again, displays in the device simulator showing the list of titles, as shown in Step
6 on page 637.
11. If you select the second item, Through the Glass Looking, the new Title Information screen displays in
the device simulator, similar to the following:
Next, configure navigation for app start up and customize your app with code.
Next, Configure navigation and extend the app with Code on page 641.
1. With the app open in the Views window, select Navigation Layout.
Navigation options display in the center pane:
The Telerik Platform deletes the view from the list after you confirm that you want to do this.
Note: This Delete option is disabled if the view is part of app navigation or referenced in other views of
the app.
The device simulator also now displays your app without the Home View in its navigation panel:
6. When you are satisfied with the app, click Commit changes in the menu bar. This commits all of your
changes to source control.
To add custom code to the app, select Code from the menu. The project opens in the Code window, formerly
known as AppBuilder. The Project Navigator pane displays the source code for the views and data provider
you created. You can add custom code, build the app, and run the app in the device simulator as you make
changes:
Note: If you add custom code to the app, you must add it between the comments starting with
START_CUSTOM_CODE and ending with END_CUSTOM_CODE (the rest of the comment is based on the name
of the component).
If you reopen the app, custom code added elsewhere in the source files is likely to be lost.
Creating a mobile app using Code and the Progress Data Service
template
Follow these steps to try a sample mobile app that accesses Rollbase data and is built using the Code service:
1. Create an app using the Progress Data Service template, as described in Create the app on page 645.
2. Specify the settings, as described in Configure JSDO settings on page 647.
3. Test your app and see the starter implementation, as described in Test the app on page 649.
4. Bind Kendo UI widgets to the Rollbase data service and access Rollbase data using the JSDO dialect of
the Kendo UI DataSource, as described in the Progress Data Objects Guide and Reference.
For information about creating a mobile app using Views (formerly the Screen Builder), see Using the Views
first approach on page 624.
Note: A project created with the template includes a README.txt file that describes how to use the template
and how to configure settings. This file will be updated periodically, you can check it for the latest information.
After creating the app with the Progress Data Service template, follow these steps in the Code window to
provide the necessary settings:
1. In the Solution pane, navigate to the the scripts folder and expand it.
2. Double-click to open the jsdoSettings.js file.
3. Change the placeholder values for the following settings:
a) serviceURI: The Progress Data Service URL. Typically,
http://<server_location>/rest/jsdo/. In Rollbase, navigate to Setup > Applications Setup
> API to find this value.
b) catalogURIs: The Progress Data Catalog URL. Typically,
http://<server_location>/rest/jsdo/catalog/<Catalog_Integration_Name>.json.
In Rollbase, click the catalog name to view the catalog and find the URL value:
Alternately, if you downloaded the catalog locally, you can include it in your Telerik Platform project and
provide the relative path to the project directory location as the catalogURIs value. For example, in
your Telerik Platform project directory, you can create a new folder, catalogs, upload the file to your
project in that location, and then use catalogs/<Catalog_Integration_Name>.json as a value
for the catalogURIs setting.
c) For authenticationModel, use one of the following:
• form: session-based authentication that accepts the credentials that you use when you log into
Rollbase.
• basic: basic authentication that is similar to form, but requires an additional Customer ID, which
must be appended in the format loginName@custId. To find your Customer ID, open the Rollbase
menu and select Subscription Details. The About Your Account page opens. Customer ID is
listed on the page. See The Rollbase menu on page 32 for more information.
4. For displayFields, use the field integration names for the values you want to display in a
comma-separated list with or without spaces.
5. For resourceName, use the object integration name.
6. Save the file.
The following is an example of the file with the required values set, including three fields:
1. From the menu bar, select Run and the simulator for the selected device.
The simulator opens. This example shows the iPhone 6 simulator.
Note: If you used basic authentication in the JSDO settings, the user name has to be in the format
loginName@custId and the password for your account. To find your Customer ID, open the Rollbase
menu and select Subscription Details. The About Your Account page opens. The Customer ID is listed
on the page. See The Rollbase menu on page 32 for more information.
Congratulations, you successfully tested a mobile app that accesses Rollbase data! What's next? See
http://docs.telerik.com/kendo-ui/introduction to learn more about Kendo UI controls and see the Progress Data
Objects Guide and Reference for information about accessing Rollbase data using JSDOs and Kendo controls.
Secure Log In
Users log in to a hosted or Private Cloud Mobile Web-enabled application from a dedicated mobile login page.
The standard Rollbase login page automatically redirects smart phone browsers to this mobile-friendly page.
Browse Applications
Users who have permissions to access a Mobile-Web enabled app will see it in the list of available applications
when they log in.
Browse Records
Users can select views they have access to and navigate the records in those views. Flagged records will be
shown with the standard flag icon and unviewed records will be shown in bold blue text.
View Records
Selecting a record displays a detail view showing each of the record's values organized into sections defined
by the object's default view page layout. Administrators can customize how this page is organized. Users can
select Email addresses to send emails and phone numbers to make a call directly from their phone.
Global Search
A global text search box at the top of every page in allows quick and easy searching through records for which
the user has access. Results are shown in a pageable list from which the user can drill down to view individual
records.
Enabling Mobile-Web
Navigate to the application definition and from the More Actions drop-down menu, select Set Mobile-Web
Options. Select the check box to enable Mobile-Web and move the menus, or tabs, that contain the views to
expose to mobile users to the Selected Menus list.
Rollbase offers a variety of mechanisms for integration. You can bring external data and external structures
into Rollbase applications and you can make Rollbase metadata and data available to external applications.
Rollbase objects that access data from external data services are called Rollbase external objects.
• Importing data
Note: When using REST or SOAP APIs to create, update, or delete external objects linked to OpenEdge Data
Object Services, you need to supply both the object integration name as a string and an object ID. See the
SOAP and REST APIs described in Metadata API and XML Reference on page 1173, Rollbase REST Methods
on page 1216, and Rollbase SOAP Methods on page 1285.
Limitations
The following limitations apply when creating Rollbase external objects associated with OpenEdge Data Objects:
• OpenEdge Data Objects are only certified with Progress OpenEdge 11.3.2, 11.3.3, 11.5, 11.5.1, and 11.6.
• Only single-table data sets can map to a Rollbase external object.
• Rollbase creates objects with fields that match OpenEdge resource columns. If a field has a name that
cannot be used in Rollbase, such as a field that contains hyphens, it will be skipped.
• Arrays in OpenEdge are not imported.
• OpenEdge Data Objects do not support the following object attributes available in Rollbase:
• Organization
• Portal User
• Approval
• Survey
• Survey Taker
• Queue
For information about the object attributes that an OpenEdge Data Object supports, see Enabling object
attributes for an OpenEdge Data Object on page 676.
• Relationships involving OpenEdge Data Objects support only the following scenarios:
• 1-1 or 1-N cardinality when establishing a relationship between an OpenEdge Data Object and another
OpenEdge Data Object or a Rollbase native object
• 1-1 or N-1 cardinality when establishing a relationship between a Rollbase native object and an OpenEdge
Data Object.
• JSDO supports an Invoke method apart from CRUD operations. Accessing this Invoke method from Rollbase
Object script requires a Client Principal token. This token is “{!#CP_TOKEN}”, and can be used in an HTTP
header under the header name ‘X-OE-CLIENT-CONTEXT-ID’. Example:
var headers = {
'X-OE-CLIENT-CONTEXT-ID' : '{!#CP_TOKEN}'
};
rbv_api.sendJSONRequest('{!ttBPMDomain1151.resourceURI#jsdo}', '', 'GET',
'application/json', '', '', headers);
INTEGER Integer
LOGICAL Checkbox
3. Select A new Object (with Tab) from an External Metadata and click Create.
• OpenEdge JSDO Catalog — The OpenEdge Data Service Catalog file that defines the object. Progress
recommends that you refer to the Enabling support for filtering options and sorting on page 666 to learn
what a Data Service Catalog must include to fully use Rollbase functionality.
• Service URI — The URI for the Web application where the OpenEdge Data Object Service is deployed
• No Authentication — Specifies that no login credentials are required to access the service URI
• Basic Authentication — Specifies that the login credentials you create be used to access the service
URI. If you select this option, you must specify the Login Name and Password you want to use to
access Rollbase.
If you are using Rollbase Private Cloud:
• OpenEdge JSDO Catalog— The OpenEdge Data Service Catalog file that defines the object. Progress
recommends that you refer to the Enabling support for filtering options and sorting on page 666 to learn
what a Data Service Catalog must include to fully use Rollbase functionality.
• Service URI — The URI for the Web application where the OpenEdge Data Object Service is deployed
• No Authentication — Specifies that no login credentials are required to access the service URI
• Use Current User (if OpenEdge authentication is enabled) — Specifies that OpenEdge credentials
are required to access the service URI. This is the default option for users accessing Rollbase using
OpenEdge credentials and this option is not available for non-OpenEdge users.
Note: If the OpenEdge Object Service is configured with Single Point Authentication, Rollbase must
also have OpenEdge authentication configured for it, and as a prerequisite, you (a Private Cloud user)
must copy a set of JAR files from the OpenEdge library to the Rollbase library. For details on how to
implement OpenEdge authentication in Rollbase, see OpenEdge authentication details on page 886.
• Basic Authentication — Specifies that the login credentials you create be used to access the service
URI. If you select this option, you must specify the Login Name and Password you want to use to
access Rollbase.
6. Click Next. Rollbase displays the components defined in the OpenEdge Data Service Catalog.
Note: Rollbase will open the catalog and find appropriate REST services that can be mapped to Rollbase
external objects. Only single-table data sets can map to a Rollbase external object. If a JSDO catalog
contains many resources, you can import all available single-table resources at once or you can select them
one at a time to import them.
7. Select the components you want to use from the Select Components area and click Next.
The new object's details are displayed and the default values are inferred from the OpenEdge Data Service
Catalog.
8. Accept or edit the default values, and for each object you create, specify the fields that should be used as
the Primary Key.
9. Click Create to create the objects.
• From an application page: Select New Application from the Rollbase menu.
• From a setup page: Click New Application on the sidebar.
The Create a New Application dialog opens:
• OpenEdge JSDO Catalog — The OpenEdge Data Service Catalog file. Progress recommends that you
refer to the Enabling support for filtering options and sorting on page 666 to learn what a Data Service
Catalog must include to fully use Rollbase functionality.
• Service URI — The URI for the Web application where the OpenEdge Data Object Service is deployed
• No Authentication — Specifies that no login credentials are required to access the service URI
• Basic Authentication — Specifies that the login credentials you create be used to access the service
URI. If you select this option, you must specify the Login Name and Password you want to use to
access Rollbase.
If you are using Rollbase Private Cloud:
• OpenEdge JSDO Catalog — The OpenEdge Data Service Catalog file. Progress recommends that you
refer to the Enabling support for filtering options and sorting on page 666 to learn what a Data Service
Catalog must include to fully use Rollbase functionality.
• Service URI — The URI for the Web application where the OpenEdge Data Object Service is deployed
• No Authentication — Specifies that no login credentials are required to access the service URI
• Use Current User (if OpenEdge Authentication is enabled) — Specifies that OpenEdge credentials
are required to access the service URI. This is the default option for users accessing Rollbase using
OpenEdge credentials and this option is not available for non-OpenEdge users.
Note: If the OpenEdge service is configured with single point authentication, Rollbase must also have
OpenEdge authentication configured for it, and as a prerequisite, you (a Private Cloud user) must copy
a set of JAR files from the OpenEdge library to the Rollbase library. For details on how to implement
OpenEdge authentication in Rollbase, see OpenEdge authentication details on page 886.
• Basic Authentication: Specifies that the login credentials you create be used to access the service
URI. If you select this option, you must specify Login Name and Password of your choice that you want
to use to access Rollbase.
5. Click Next. The Import an Application from OpenEdge Services page is updated to show the components
defined in the OpenEdge JSDO Catalog.
6. Select the objects you want to import and click Next.
The Import an Application from OpenEdge Services page is updated to show the application's details.
The default values for the application and object names are inferred from the OpenEdge JSDO Catalog.
7. Select Do you want to create a new Tab for the object now to add a tab for your object and Service
object support complex filter and sorting to enable sorting and filtering of fields when viewing application
data. Accept the default values or modify them as per your requirements.
Note: For each object you create, you must have only one field specified as the Record Name field, and
for each object that you create, specify the fields that should be used as the Primary Key. Neglecting this
step will mean that some Rollbase capabilities that rely on finding triggers or related objects cannot be used.
8. Click Create.
The application is created and added to the list of existing application.
To support sorting and filtering, you must ensure that your Business Entity and the associated include file (.i)
with the schema has support for the parameters that are contained in the JSON object:
Note: When you use the following code samples, verify that the formatting of the code is maintained.
Alternatively, you can download the code samples from a Progress Community page.
The following sample include file (customer.i) illustrates a temp-table definition with id and seq fields:
/*------------------------------------------------------------------------
File : customer.i
Purpose :
Syntax :
Description :
Author(s) :
Created :
Notes :
----------------------------------------------------------------------*/
@openapi.openedge.entity.primarykey (fields="CustNum").
DEFINE TEMP-TABLE ttCustomer BEFORE-TABLE bttCustomer
FIELD id AS CHARACTER
FIELD seq AS INTEGER INITIAL ?
FIELD CustNum AS INTEGER INITIAL "0" LABEL "Cust Num"
FIELD Name AS CHARACTER LABEL "Name"
FIELD Address AS CHARACTER LABEL "Address"
FIELD Address2 AS CHARACTER LABEL "Address2"
FIELD Balance AS DECIMAL INITIAL "0" LABEL "Balance"
FIELD City AS CHARACTER LABEL "City"
FIELD Comments AS CHARACTER LABEL "Comments"
FIELD Contact AS CHARACTER LABEL "Contact"
FIELD Country AS CHARACTER INITIAL "USA" LABEL "Country"
FIELD CreditLimit AS DECIMAL INITIAL "1500" LABEL "Credit Limit"
FIELD Discount AS INTEGER INITIAL "0" LABEL "Discount"
FIELD EmailAddress AS CHARACTER LABEL "Email"
FIELD Fax AS CHARACTER LABEL "Fax"
FIELD Phone AS CHARACTER LABEL "Phone"
FIELD PostalCode AS CHARACTER LABEL "Postal Code"
FIELD SalesRep AS CHARACTER LABEL "Sales Rep"
In the OpenEdge Business Entity, the code to process the JSON Filter Pattern is called from the read method
and replaces the generated code for the read method as well as the private applyFillMethod() method.
The following business entity code from OpenEdge illustrates how to process the JSON Filter Pattern and
enable filtering and sorting:
/*------------------------------------------------------------------------
File : Customer.cls
Syntax :
Author(s) :
Created :
Notes :
----------------------------------------------------------------------*/
USING Progress.Lang.*.
USING Progress.Json.ObjectModel.*.
CLASS Customer:
/*------------------------------------------------------------------------------
Purpose:
Notes:
------------------------------------------------------------------------------*/
{"customer.i"}
/*------------------------------------------------------------------------------
Purpose: Get one or more records, based on a filter string
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false",
writeDataSetBeforeImage="false").
@progress.service.resourceMapping(type="REST", operation="read",
URI="?filter=~{filter~}", alias="", mediaType="application/json").
METHOD PUBLIC VOID ReadCustomer(
INPUT filter AS CHARACTER,
OUTPUT DATASET dsCustomer):
END.
ELSE IF filter NE "" THEN
DO:
/* Use filter as WHERE clause */
cWhere = "WHERE " + filter.
END.
IF lUseReposition THEN
DO:
hQuery = DATA-SOURCE srcCustomer:QUERY.
hQuery:QUERY-OPEN.
IF id > "" AND id <> "?" THEN
DO:
hQuery:REPOSITION-TO-ROWID(TO-ROWID(id)).
END.
ELSE IF iSkipRows <> ? AND iSkipRows > 0 THEN
DO:
hQuery:REPOSITION-TO-ROW(iSkipRows).
IF NOT AVAILABLE Customer THEN
hQuery:GET-NEXT () NO-ERROR.
END.
iCount = 0.
REPEAT WHILE NOT hQuery:QUERY-OFF-END AND iCount < iMaxRows:
hQuery:GET-NEXT () NO-ERROR.
IF AVAILABLE Customer THEN
DO:
CREATE ttCustomer.
BUFFER-COPY Customer TO ttCustomer.
ASSIGN ttCustomer.id = STRING(ROWID(Customer))
iSeq = iSeq + 1
ttCustomer.seq = iSeq.
END.
iCount = iCount + 1.
END.
END.
ELSE DO:
IF id > "" THEN DATA-SOURCE srcCustomer:RESTART-ROWID(1) = TO-ROWID ((id)).
DATASET dsCustomer:FILL().
END.
FINALLY:
BUFFER ttCustomer:DETACH-DATA-SOURCE().
END FINALLY.
END METHOD.
/*------------------------------------------------------------------------------
Purpose: Create one or more new records
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false",
writeDataSetBeforeImage="false").
@progress.service.resourceMapping(type="REST", operation="create", URI="", alias="",
mediaType="application/json").
METHOD PUBLIC VOID CreateCustomer(INPUT-OUTPUT DATASET dsCustomer):
/*------------------------------------------------------------------------------
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false",
writeDataSetBeforeImage="false").
@progress.service.resourceMapping(type="REST", operation="update", URI="", alias="",
mediaType="application/json").
METHOD PUBLIC VOID UpdateCustomer(INPUT-OUTPUT DATASET dsCustomer):
END METHOD.
/*------------------------------------------------------------------------------
Purpose: Delete a record
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false",
writeDataSetBeforeImage="false").
@progress.service.resourceMapping(type="REST", operation="delete", URI="", alias="",
mediaType="application/json").
METHOD PUBLIC VOID DeleteCustomer(INPUT-OUTPUT DATASET dsCustomer):
END METHOD.
/*------------------------------------------------------------------------------
Purpose: generic routine for creating/updating/deleting customers
Notes:
------------------------------------------------------------------------------*/
METHOD PRIVATE VOID commitCustomer(
INPUT pcFieldMapping AS CHARACTER,
INPUT piRowState AS INTEGER ):
DEFINE VARIABLE Skip-list AS CHAR NO-UNDO.
BUFFER ttCustomer:ATTACH-DATA-SOURCE (DATA-SOURCE srcCustomer:HANDLE,
pcFieldMapping).
FOR EACH ttCustomer.
BUFFER ttCustomer:MARK-ROW-STATE (piRowState).
END.
IF piRowState = ROW-CREATED THEN
Skip-list = "CustNum".
FOR EACH bttCustomer:
BUFFER bttCustomer:SAVE-ROW-CHANGES(1, Skip-list).
END.
FINALLY:
BUFFER ttCustomer:DETACH-DATA-SOURCE().
RETURN.
END FINALLY.
END METHOD.
END CLASS.
In a Business Entity from the latest release of OpenEdge, you can enable filtering and sorting by replacing the
code in the Read method with the code that processes the JSON filter in a similar way to the above code, which
continues to work in OpenEdge 11.3 or greater.
The following are additional annotations required for this use case in OpenEdge 11.5.1 and 11.6. They must
be added manually.
@openapi.openedge.method.property(name="mappingType", value="JFP").
@openapi.openedge.method.property (name="capabilities",
value="ablFilter,top,skip,id,orderBy").
Note: The ablFilter parameter is considered to always be supported and does not need to be listed in the
values for the capabilities property.
The following is a Business Entity class file from OpenEdge that contains the code to process the JSON Filter
Pattern:
/*------------------------------------------------------------------------
File : Customer.cls
Syntax :
Author(s) :
Created :
Notes :
----------------------------------------------------------------------*/
USING OpenEdge.BusinessLogic.BusinessEntity.
USING Progress.Lang.*.
USING Progress.Json.ObjectModel.*.
/*------------------------------------------------------------------------------
Purpose:
Notes:
------------------------------------------------------------------------------*/
{"customer.i"}
/*------------------------------------------------------------------------------
Purpose:
Notes:
------------------------------------------------------------------------------*/
CONSTRUCTOR PUBLIC Customer():
/* Data Source for each table in dataset. Should be in table order as defined
in DataSet */
cSkipListArray[1] = "CustNum".
THIS-OBJECT:ProDataSource = hDataSourceArray.
THIS-OBJECT:SkipList = cSkipListArray.
END CONSTRUCTOR.
/*------------------------------------------------------------------------------
Purpose: Get one or more records, based on a filter string
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false",
writeDataSetBeforeImage="true").
@progress.service.resourceMapping(type="REST", operation="read",
URI="?filter=~{filter~}", alias="", mediaType="application/json").
@openapi.openedge.method.property (name="capabilities", value="top,skip,id,orderBy").
id = jsonObject:GetCharacter("id") NO-ERROR.
cOrderBy = jsonObject:GetCharacter("orderBy") NO-ERROR.
cWhere = "WHERE " + ablFilter.
END.
ELSE IF filter NE "" THEN
DO:
/* Use filter as WHERE clause */
cWhere = "WHERE " + filter.
END.
IF lUseReposition THEN
DO:
hQuery = DATA-SOURCE srcCustomer:QUERY.
hQuery:QUERY-OPEN.
IF id > "" AND id <> "?" THEN
DO:
hQuery:REPOSITION-TO-ROWID(TO-ROWID(id)).
END.
ELSE IF iSkipRows <> ? AND iSkipRows > 0 THEN
DO:
hQuery:REPOSITION-TO-ROW(iSkipRows).
IF NOT AVAILABLE Customer THEN
hQuery:GET-NEXT () NO-ERROR.
END.
iCount = 0.
REPEAT WHILE NOT hQuery:QUERY-OFF-END AND iCount < iMaxRows:
hQuery:GET-NEXT () NO-ERROR.
IF AVAILABLE Customer THEN
DO:
CREATE ttCustomer.
BUFFER-COPY Customer TO ttCustomer.
ASSIGN ttCustomer.id = STRING(ROWID(Customer))
iSeq = iSeq + 1
ttCustomer.seq = iSeq.
END.
iCount = iCount + 1.
END.
END.
ELSE DO:
IF id > "" THEN DATA-SOURCE srcCustomer:RESTART-ROWID(1) = TO-ROWID ((id)).
DATASET dsCustomer:FILL().
END.
FINALLY:
BUFFER ttCustomer:DETACH-DATA-SOURCE().
END FINALLY.
END METHOD.
/*------------------------------------------------------------------------------
Purpose: Create one or more new records
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false",
writeDataSetBeforeImage="true").
@progress.service.resourceMapping(type="REST", operation="create", URI="", alias="",
mediaType="application/json").
METHOD PUBLIC VOID CreateCustomer(INPUT-OUTPUT DATASET dsCustomer):
DEFINE VAR hDataSet AS HANDLE NO-UNDO.
hDataSet = DATASET dsCustomer:HANDLE.
/*------------------------------------------------------------------------------
Purpose: Update one or more records
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false",
writeDataSetBeforeImage="true").
@progress.service.resourceMapping(type="REST", operation="update", URI="", alias="",
mediaType="application/json").
METHOD PUBLIC VOID UpdateCustomer(INPUT-OUTPUT DATASET dsCustomer):
/*------------------------------------------------------------------------------
Purpose: Delete a record
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false",
writeDataSetBeforeImage="true").
@progress.service.resourceMapping(type="REST", operation="delete", URI="", alias="",
mediaType="application/json").
METHOD PUBLIC VOID DeleteCustomer(INPUT-OUTPUT DATASET dsCustomer):
/*------------------------------------------------------------------------------
Purpose: Submit a record
Notes:
------------------------------------------------------------------------------*/
@openapi.openedge.export(type="REST", useReturnValue="false",
writeDataSetBeforeImage="true").
@progress.service.resourceMapping(type="REST", operation="submit",
URI="/SubmitCustomer", alias="", mediaType="application/json").
METHOD PUBLIC VOID SubmitCustomer(INPUT-OUTPUT DATASET dsCustomer):
END CLASS.
For information about sorting and grouping, see Filtering OpenEdge Service objects by search criteria on page
570.
Object attribute Rollbase fields to map to OpenEdge fields Data type of the field
Workflow Process CHARACTER
Status CHARACTER
Contact First Name CHARACTER
Middle Name CHARACTER
Last Name CHARACTER
Email CHARACTER
Fax CHARACTER
Phone CHARACTER
Location Street Address-1 CHARACTER
Street Address-2 CHARACTER
City CHARACTER
State/Province CHARACTER
Country CHARACTER
Event Event Subject CHARACTER
Duration INT64
Date/Time DATETIME-TZ
Private LOGICAL
Description CHARACTER
Location CHARACTER
Pop-up Reminder CHARACTER
Reminded LOGICAL
Task Task Subject CHARACTER
Due Date DATETIME-TZ
Priority INTEGER
Private LOGICAL
Description CHARACTER
Multi-Currency Currency Code CHARACTER
Rate Date DATE
Lockable Is Locked LOGICAL
Document Document File CHARACTER
Description CHARACTER
You can selectively map the OpenEdge fields in the OpenEdge Data Object resource for a given Rollbase
external object to the corresponding Rollbase fields based on which object attributes you need in your Rollbase
external object. The field names can be of your choice but you must ensure that the number of fields (and their
respective OpenEdge data types) required for enabling an object attribute conforms to the information provided
in the above table. For example, to enable the Multi-Currency object attribute, you must have two available
fields in your Data Object resource (one to store Currency Code and another to store Rate Date).
Example:
To enable the Workflow attribute for your OpenEdge Data Object, add two temp-table fields, such as
PROCESS_ID and STATUS_ID, of CHARACTER data type in your OpenEdge Business Entity. The following is
a section of a Data Service Catalog file (.json) that includes the two example fields:
"version": "1.2",
"lastModified": "Thu Oct 30 03:03:24 PDT 2014",
"services": [{
"name": "WorkflowobjService",
"address": "\/rest\/WorkflowobjService",
.
.
.
"PROCESS_ID": {
"type": "string",
"ablType": "CHARACTER",
"default": "",
"title": "PROCESSID"
},
"STATUS_ID": {
"type": "string",
"ablType": "CHARACTER",
"default": "",
"title": "STATUSID"
},
.
.
.
After you have created a Rollbase external object associated with the OpenEdge Data Object (see Linking
Rollbase external objects to OpenEdge data on page 662), edit your object definition (see Viewing and editing
an object definition on page 301) to add the Workflow attribute and map the PROCESS_ID and STATUS_ID
fields to Workflow Process and Workflow Status:
Each external object maps to a table in the external data source. Before you can follow these procedures, you
must have used DataDirect Cloud to create and test a Data Source definition for the target data source. Before
creating the external object in Rollbase, determine the Data Source definition name, whether the credentials
are stored in the Data Source definition, and whether your data source is case-sensitive with respect to table
and column names. You will need this information when creating the external object.
To create an external object that uses DataDirect Cloud to access data in an external source:
• The login name and password for your DataDirect Cloud account.
• The name of the Data Source definition to use for connection. (The definition must already existing in
your DataDirect Cloud account.)
• Table and column names are case sensitive — select this checkbox to enable case sensitivity.
• Prompt for individual user credentials to access target Data Source — select this checkbox if the
credentials for this data source are not stored in the DataDirect Cloud Data Source definition.
7. Click Next.
The Create Object page opens.
8. From the Select Table drop-down, choose one of the available tables.
9. Enter values for the object name and set the desired permissions.
10. Click Create Object.
The Create Fields page opens:
11. Select the columns to use for creating the object's primary key and the options to create the object's fields.
12. Click Create Fields.
13. Select the appropriate Rollbase type and if desired, edit the label and integration names.
14. Click Create Fields.
The Adjust SQL page opens.
15. Click Preview Query to see what the external object will look like.
16. If the preview is not as expected, edit the SQL query and try again.
17. When you are satisfied with the results, click Save.
Rollbase creates an object similar to an external database object, but with the following limitations:
Note that if you checked the Prompt for individual user credentials check box, every user will need to
enter credentials each time they log in. These are not the DataDirect Cloud credentials, but credentials for
the data source, such as Salesforce, Eloqua, or Hubspot.
• From an application page: Select New Application from the Rollbase menu.
• From a setup page: Click New Application on the sidebar.
2. Click Create from External Data. The Import Application Metadata page opens.
3. Click Convert MS Access Database and click Next. The Upload Database page opens. The file size
cannot exceed 50MB; please contact Rollbase support if you need to upload a larger file.
4. Browse to the MDB file and click Next. The Create Objects page opens.
Note: The Rollbase conversion tool does not support MDB formats older than Access 2000.
Click Create Objects to create eight Rollbase objects and seven tabs in an application called Northwind. The
next step is to map fields from the database to Rollbase objects.
• Create a new Rollbase field. Use this option when mapping to a field where there is no existing field
corresponding to the column in the Rollbase object.
• Map a column to an existing Rollbase field. Use this option when mapping to a field included with an attribute.
For example, the Location attribute contains fields such as City, Country, and ZIP/Postal Code.
• Discard the column. Use this option if you do not want to include the column as a field in the object.
Rollbase reads the metadata from the database and automatically does the following:
• Marks fields that must have a unique value in the Unique Column column. These fields will include the Do
not allow duplicate values in this field property.
• Creates a Unique Fields Combination trigger for each multi-column unique key in the database that
includes all fields in the index.
• Creates relationships from foreign keys.
Note the following when mapping fields:
• By default, Rollbase derives the name of each field from the corresponding column name and puts that
value in the Label column. You can edit the name. If you are mapping a column to an existing field, edit the
name before selecting the field.
• Although the type for a new field is selected by default, you do not have to accept it. Sometimes a different
type (Currency or Text Area) is more appropriate.
• Rollbase maps AutoNumber fields to Auto-Number fields and preserves the values from database rows.
• You can map Hyperlink fields to URL fields.
• You can map Attachment fields to File Upload or Image Upload fields. Rollbase only supports a single
attachment; if a database row has an array of attachments, Rollbase uses only the first attachment from
the array.
• You can map OLE objects to File Upload or Image Upload fields. Rollbase supports basic image types
(JPG, GIF, PNG, TIFF, BMP), TXT, and ZIP files. Rollbase does not support Excel, PowerPoint, Word, or
PDF files.
• Rollbase checks for the maximum number of fields allowed for each data type and you will get an error
message when trying to save the mappings if any maximum is exceeded. You can then change data types
and/or discard some columns from the affected tables.
It is always a good idea to double-check your mappings before proceeding with the data import.
The following screens show example mappings for the Customers and Order Details objects. Note the following
about the mappings:
• Information about each object's primary key is included at the bottom of each set of mappings. Because
Order Details has a multi-column primary key, there will be a Unique Fields Combination trigger for that
object.
• For the Order Details object, Rollbase automatically creates the relationships to the Order and Product
objects based on foreign keys in the database.
When you are finished mapping fields, click Create Fields. Rollbase will create the fields as directed and import
data from the database into object records. When the import is complete, Rollbase will send you an email:
Reviewing results
After the import is complete, you can navigate through the new application's application pages and setup pages
to see the results. You can use the fully functional Rollbase application that preserves both structure and data
from the MDB database.
Relationships between records are preserved as shown below, where a Product has a relationship to a Supplier
and to multiple Order Details:
You can navigate to the Relationships table on the Product object definition page to see the definitions of
the above relationships:
For objects with the Contact attribute, such as Employee in this example, Rollbase created a Record Name
field using the First Name and Last Name fields as shown in the screen below:
You can navigate to the Employee object definition page to see the Record Name Template Rollbase created
for the Record Name field, the attributes you selected for the object, and other information:
Note: Because Rollbase and Salesforce.com use different languages for formulas, you will need to substantially
re-write formulas after completion of the migration process. Only in the simplest cases can formulas be used
as-is.
For a video demonstration of migrating applications from Salesforce.com and the Force.com platform see
http://www.rollbase.com/deforce.shtml.
Note: Salesforce.com limits number of API calls a particular customer can make in 24 hours span. If you're
receiving REQUEST_LIMIT_EXCEEDED error that means that your limit has been exceeded during the import
process. In this case, the Salesforce limit must be reset before retrying.
• From an application page: Select New Application from the Rollbase menu.
• From a setup page: Click New Application on the sidebar.
The Create a New Application dialog opens:
3. Select Create from External Data. The Import Application Metadata page opens.
4. Select Salesforce.com (Force.com) and click Next.
5. Provide your Salesforce.com credentials (Rollbase will not store or reuse your Salesforce.com credentials.
They are only used once to temporarily retrieve your data):
6. Rollbase retrieves the following metadata from your most recently accessed Salesforce.com application:
• Object menus (Web and system menus cannot be extracted because Force.com does not expose them
as metadata).
• Custom objects and most standard objects, including their components:
• Field definitions (including formula fields)
• Relationships
• Page layout definitions (which are converted into Rollbase pages)
7. Use the check boxes to identify the objects, fields, and relationships you want to import from Salesforce.com
into your new Rollbase application.
Note: If a Salesforce object already exists in your tenant, the migration tool will not attempt to import any
components.
Managing databases on page 868 explains how to describe Rollbase databases in the databases.xml
configuration file. In this way you can have multiple databases for different tenants based on different external
tables you want to integrate this with. Using this approach to describe a new database, add a new XML attribute
isExternal:
Marking a database as external allows for the creation of external objects for Rollbase customer tenants
assigned to that database.
• The field creation process is limited as explained in External object fields and attributes on page 693.
• Full text search and search engine indexing is not available for external object fields.
• External records cannot be used as application seed records.
The functionality available for external objects and their fields includes, but is not limited to:
• Configurable pages
• Configurable views
• Detailed search and filtering
• Email and document templates
• Triggers and workflows
• Input validation through triggers and field-level validation
• Reports, charts and gauges
• Unique indexes
• Client-side and server-side API usage
• REST and SOAP APIs
• They rely on a column in the external table that exists, but has not yet been mapped to a Rollbase field in
that external object.
• They do not require a database column in the external table to store data, such as: formulas, templates,
roll-up Summary, and integration links.
The field configuration process is almost identical to native Rollbase object fields. As usual, newly created
fields on external objects can be added to pages, views, reports, and referenced anywhere normal object fields
can be, such as in formulas, templates, triggers, and validations. Creation or deletion of a field in an external
table will most likely require modifying the SQL queries as described in SQL queries for external objects on
page 695. For your convenience, the system will redirect you to the Adjust SQL page after a field is created or
deleted.
You can assign object attributes by mapping fields from particular attribute (such as Contact) to an available
data column. If an attribute box is checked for an external object, all of its fields must be mapped and no column
can be mapped to more than one field. Some fields must be mapped to columns with a specific name. For
example, a workflow Status must be mapped to a column named STATUS_ID.
External relationships
Database tables typically have primary key to foreign key relationships between records. Rollbase can wrap
these relationships the same way as native relationships between objects.
A field of an external object (database column) can serve as a primary key if:
Note that relationships involving external objects support only the following scenarios:
• 1-1 or 1-N cardinality when establishing a relationship between an external object and another external
object or a Rollbase native object
• 1-1 or N-1 cardinality when establishing a relationship between a Rollbase native object and an external
object
To access and manipulate data records in external tables, Rollbase uses SELECT, INSERT, UPDATE, and
DELETE SQL queries. To adjust SQL queries, you must be familiar with SQL, details of your database
implementation, and how Rollbase formulates SQL queries.
Note the following about how Rollbase generates and handles an SQL query:
• Rollbase encloses table and column names in double quotes whenever the names contain characters not
recognized as an identifier by SQL syntax or when the names are reserved keywords. This conforms to the
ANSI standards. Therefore, you must ensure that your external database supports double quotes in an SQL
query.
By default, the latest versions of the databases certified by Rollbase support double quotes in queries. If
your database does not support double quotes for tables and column names, then you must configure it to
do so. For example, as MySQL does not support double quotes by default, you must add ANSI to the
comma-separated values of the SQL Mode property.
• If Rollbase encounters an identifier that is not listed as a reserved SQL keyword or a special character in
its shared.properties file, but in reality is an SQL reserved keyword or a special character in your
database, then the SQL query might result in an error because the column or table name will not be enclosed
with double quotes in the SQL query.
In such cases, you must manually edit the SQL query in the Adjust SQL page or add those SQL keywords
and special characters to shared.properties.
Progress recommends that you verify and add any reserved keywords and special characters in the
shared.properties file before generating SQL queries for External objects. In shared.properties,
you must locate SQLKeywords and SQLSpecialChars code snippets and then add comma-separated
keywords and special characters respectively. You must restart Rollbase for any update in
shared.properties to take effect.
You can use stored procedures with parameters to replace the default INSERT, UPDATE, and DELETE SQL
queries. Rollbase will use these queries exactly the way they're provided. However, since SELECT queries
are necessary for filtering and sorting, a SELECT query cannot be replaced with a stored procedure. The query
or stored procedure must fetch an ID for new records. For Oracle databases, the query can include a sequence
to fetch record IDs.
SQL queries must use actual database column names. To supply data to the database, INSERT and UPDATE
queries must use template tokens for Rollbase fields. To preview available tokens and corresponding column
names use the View Table Columns button which brings up helper information as shown below. The Preview
Query button allows you to see whether a query is working correctly.
If you are using an external database in a multi-tenant environment you need to ensure isolation of customers'
data. You can use the helper tokens {!#CURR_CUSTM.id} and {!#CURR_CUSTM.name} in WHERE clauses.
For instance, if you're using column CUST_ID to store customer's ID, add the following to the SELECT query:
.. WHERE CUST_ID={!#CURR_CUSTM.id}
Please use only tokens listed in the helper table. Other tokens will be ignored, making the SQL syntax invalid.
At runtime these tokens will be replaced with actual values from the records. This offers the most flexible way
to build queries which may include calls to stored procedures.
The following table explains the formats used by different types of data fields for tokens in external queries.
5. For the selected table, optionally select the text column to be used as the Record Name field.
If no column is selected, Rollbase creates the name from the Record Name Template or from the object's
single name if no template is provided.
6. If desired, specify a single numeric unique column as the table's primary key.
7. Click Next.
8. If you have not specified a primary key, select one or more columns from the Available list and move them
to the Composite PK list with the right arrow. Reorder the Composite PK list as desired with the up and
down arrows.
• Singular Name
• Plural Name
• Integration Name
• Optional Description
10. Map columns in the selected table to new fields in the newly created external object. This is similar to
creation of fields while importing data from a CSV file, Excel, MS Access database, or Salesforce.com
object.
Each database column can be mapped to a field in newly created external object. These fields will be added
to the following pages: View, New record, and Edit. If you do not map column to a new field you can create
fields from unused columns later.
Importing data
Importing data is an easy way to add new records, update or delete existing records in bulk, or create new
objects and add records for them.You can import data from spreadsheets and comma-separated value (CSV)
files. For existing objects, the Import option is available from the page menu. You can also configure list views
to display an import link in the section header using the Page Editor. For creating new objects and associated
records, see Importing to create a new object on page 703.
Note the following before attempting an import:
• For picklist fields, Rollbase tries to find existing picklist values with the integration code or display name
that matches the value in the spreadsheet. If none exist and the Create new picklist items during import
check box is checked, Rollbase creates a new picklist value. However, as a precaution against potential
mismatches, Rollbase will not create new picklist values in picklists with a shared source (such as country
and state/province).
• For lookup fields where duplicate values are not allowed, such as those corresponding to the object name
or ID, the file to import from must have a column or field with unique values for each record. (To determine
which fields these are, navigate to the field definition in setup and view the field's Advanced Field Properties.
Do not allow duplicate values in this field will be checked.) When you map such a field during import,
the system will find any corresponding records with the matching record name or ID value and attach them
if found. To map more than one value to a lookup field, separate values with the pipe "|" character, such as
123456|789101. You can import complex data structures with Primary Keys (PK) and Foreign Keys (FK)
and replace the PK - FK with Rollbase relationships, see Importing related objects on page 704.
• Only one import job can be running in a customer tenant at a time; the current job must finish before anyone
can start a new job. Rollbase enforces this limitation for performance reasons.
• You can save the map you use to import with and manage the stored maps from the Data Maps section of
the object definition. In addition to a name, you can set an integration code for your map. Import maps can
also be used for data import through the REST API. For information on REST methods, see Rollbase REST
Methods on page 1216.
• Before importing a large amount of data, Progress recommends testing the process by selecting the Test
import mode that creates a detailed report for the first five rows in your spreadsheet. When you are satisfied
with the results, repeat the import with a larger amount of data.
• For large imports, Rollbase creates a job and places it into a queue for asynchronous processing and then
sends an email to you with results of the import once the job is completed. This message includes a report
detailing successfully imported records and errors encountered during the import process.
Note: To import data faster, Rollbase now enables the customers to set the thread count of the import job
scheduler that runs import jobssimultaneously. See Component specific properties on page 918 for more
inofrmation.
• If a particular spreadsheet row contains errors such as an empty value for a required field, or unparsable
data, that row is ignored, but is reflected in the import report described next.
Import Report
For audit purposes, you can find import reports on the Administration Setup page, in the System Event Logs
section. The first line of an import report contains a timestamp indicating when the import process started. Due
to the queuing mechanism, there may be a delay between when you submit the import and when it actually
begins. Next, the results of each of the first five spreadsheet rows are displayed, by line number:
Started at 06/21/2015 06:16 PM
2: Import error: Field Permit No. cannot accept null values
3: Permit "Test 1" has been created
4: Permit "Test 2" has been created
5: Import error: Error importing data for mechanical_cost Field: For input string:
"1200-1300"
6: Import error: Error importing data for electrical_admin Field: multiple points>
Type Description
Check Box "true", "T", "y", "yes", "1" for true, false otherwise
Picklist (multiple), Group of Check Boxes Integration codes or names of lookup items separated
by commas or '|'
3. Click Choose File to select an Excel Spreadsheet (.XLS) or a comma separated value (CSV) file location.
4. If you selected a CSV file, specify its File Encoding format and CSV File Separator.
Note: By default, the file encoding is ISO-8859-1 and the file separator is a comma.
• Normal — Runs all triggers on creation of new records and creates picklist values while importing rows.
This mode works best for medium-size imports.
• Test — Limits your import to the first five records and displays a detailed report. Use this mode to test
out your mapping before launching large imports.
• Bulk — Optimized for faster processing of large imports. In this mode, triggers are not executed and
new picklist values are not automatically created.
10. Optionally leave the Create new picklist items during import box checked if you want the system to create
new picklist items during import. This box is checked by default, and is not available in bulk mode.
11. Optionally click Save Map to use the same column to field mappings for other imports.
12. Click Submit to start the import process. Files less than 20KB in size will be processed immediately and
the results will display on-screen.
Note: By default, the file encoding is ISO-8859-1 and the file separator is a comma.
3. Enter the Singular Name and Plural Name for the new object definition and optional object properties.
6. Optionally select the object attributes (see Object attributes on page 243)
7. Click Create Object.
8. For each spreadsheet column, select the appropriate action from the first drop-down menu:
• New Field — Create a new field and import a column's data into that field.
• Discard — Rollbase will not use the values in this column.
• Object_name — The lookup field. You must map one column to this menu item as shown in the example
below for a new Title object. Map a column that uniquely identifies each record.
9. From the Field Type column, select a data type for each field.
10. Optionally, change the default names for the new fields.
11. For fields that should contain unique values, check Do not allow duplicates.
12. Click Create Fields.
The data import proceeds. For small spreadsheets, you will see results on the screen. For larger imports,
you will receive an email.
If you no longer need the foreign and primary key fields, you can delete them. When you created the relationship
between the two objects, Rollbase automatically created fields to manage the relationship.
1. From the application menu bar, click the object type for the records of interest.
• If the application uses the Traditional UI blueprint, click the object type for the records of interest from
the application menu bar. If you don't see the object of interest, check the overflow menu.
• If the application uses the Modern - Vertical Menus UI blueprint, click the object type for the records of
interest from the sidebar.
• Normal: Runs all triggers on creation of new records and creates picklist values while importing rows.
This mode is best for medium-size imports.
• Test: Limits your import to the first five records and displays a detailed report. Use this mode to test out
your mapping before launching large imports.
• Bulk: Optimized for faster processing of large imports. In this mode triggers are not executed and new
picklist values are not automatically created.
9. Click Submit to start the deletion process. Small files (less than 20KB) are processed immediately and
Rollbase displays the results:
Exports created in this way are limited to 1000 rows for performance reasons.
You can hide individual export options by adding the following JavaScript code to Application custom header
section (to apply changes to the entire application).
<script>
rb.newui.options.listView.hideXlsExportOption = false;
rb.newui.options.listView.hideCsvExportOption = false;
rb.newui.options.listView.hideGoogleExportOption = false;
rb.newui.options.listView.hidePDFExportOption = false;
</script>
By default all these export options are set to false. As per your requirement, you can modify these boolean
values to hide the export options from the menu.
If you want to hide all the export options, use Hide Export List View property from the Page Designer. These
options are available only in NewUI.
In this section:
Incoming Gmail
Once you have provided your Google credentials and enabled IMAP on your Google account (see Enabling
Google integration on page 708), you can gain limited access to your incoming emails from within Rollbase.
Rollbase will read your Google inbox and display your messages. You have read-only access to your messages.
Messages are not stored in Rollbase.
You can access your email messages from the Email tab in the Rollbase application. You can also use the
page editor to add the Incoming Emails component to any generic page.
The list of messages in your Gmail inbox displays the sender's email address, as well as the subject and date
of the email. Unread messages are shown in bold and starred messages have a star as you would see them
in your Gmail account. This list is sorted by date in descending order.
Click on a message's subject to view the entire message on the Message Details page:
Rollbase will try to match the email addresses in a message to the records in your tenant. If a match is found,
Rollbase display a link to the matched record as shown above.
If a message in your inbox was originated by Rollbase and relates to a particular record, Rollbase will resolve
this and display a link to that record as shown above.
From the Message Details page, you can:
Outgoing Gmail
To use your Gmail account from Rollbase, you must first provide your Gmail credentials and enable IMAP on
your Gmail account. See Enabling Google integration on page 708 for details.
By default, Rollbase uses its own email server when sending email messages from a Rollbase user. You can
change this behavior on the Third Party Settings page to specify that Rollbase should use Gmail (rather than
Rollbase email server) to send emails for this user.
If you specify that Rollbase should use Gmail for outgoing emails, Rollbase will use Gmail to send emails on
your behalf. This means that you will now see all Rollbase-generated emails in your Gmail account's Sent Mail
folder. In addition, when a recipient replies, Gmail will group reply messages with your original message for
convenience.
When you send an email using Gmail integration, Rollbase will display a reminder about it and give you a
chance to test your Gmail connections to ensure that your stored credentials are up-to-date with your Google
account.
Google spreadsheets
Once you have enabled Google integration for your Rollbase account (see Enabling Google integration on
page 708), you will have the option to export your views as spreadsheets in Google Sheets (in addition to Excel
spreadsheets, CVS files, and PDF documents). See Exporting from views and reports on page 706 for more
information.
To export a view to a Google Sheets spreadsheet, select Google when exporting a view. All of the data in your
view will be displayed as a new spreadsheet in Google Sheets. This gives you the convenience of Google
Sheets to work with and analyze your data, including the ability to share your data with other users who may
not have access to your Rollbase applications.
• Each user that wants to synchronize events with Google Calendar must enable Google integration and
enable Google Calendar synchronization. See Enabling Google integration on page 708 for details.
• Each object you want to synchronize with Google Calendar must have Google Calendar synchronization
enabled in the Event attribute of the object definition.
With synchronization enabled, when an event is created or updated in the Rollbase calendar, the creator’s
Google calendar will be automatically synchronized. Events marked as Private will also be private on the
Google calendar. You might need to refresh the Google calendar to view the result of the synchronization.
To enable Google Calendar synchronization, the object definition must have the Event attribute and the check
box must be selected for synchronization as shown below:
Google Maps
You can use Google Maps to visually represent a location associated with a record of an object with the
Location attribute. You do not need to enable Google integration with any account to use Google Maps.
You can add a Google map to an object's view page. To add a Google map to a view page, edit the page in
the page editor and drag the Google Map component to the desired location.
The Google Map component renders a map of the record's address as shown below:
• The height of component in pixels. The map will take up 100% of the available width.
• The default zoom level. A user can change this at runtime.
• The default map type (street, satellite, etc.). A user can change this at runtime.
3. Click Save.
SOAP API
Rollbase uses literal WSDL encoding. If your SOAP infrastructure does not support literal WSDL encoding,
consider using the REST API. To make SOAP calls, the client must have a valid Rollbase user account with
login credentials. API users must have permission to view, create, update, or delete records to perform these
actions via SOAP API calls; the documentation for each SOAP API method specifies the required permissions.
Permissions cannot be set via the API; they can only be set by an administrator using the Rollbase user
interface.
The Rollbase SOAP API uses the same workflow mechanism as the standard Rollbase user interface. For
example, triggers designed to run on object record creation will run if a record is created through the SOAP
API. The Rollbase SOAP API uses the same permissions mechanism as the standard Rollbase user interface.
Changes in triggers, views, etc. might not immediately be updated on the Web services server. There might
be some latency due to caching.
To establish a SOAP API session, call the login() method, which takes user name and password credentials.
The login() call returns a session ID that must be used as the first parameter in all subsequent API calls.
To end a SOAP API session, call the logout() method.
See Rollbase SOAP Methods on page 1285 and SOAP Metadata Methods on page 1190 for descriptions of the
available SOAP methods.
REST API
REST calls require authentication and are subject to the same security procedures as normal user log ins. To
use this API requires a valid Rollbase user account with login credentials. The account must have permission
to view, create, update, or delete records to perform these actions using REST calls; the documentation for
each REST API specifies the required permissions. Permissions cannot be set via the API; they can only be
set by an administrator using the Rollbase user interface.
Supply user credentials in one of the following ways:
• Using a session ID — Call the login AP with valid credentials to receive a session ID. Supply that session
ID in every REST call as an HTTP header or URL parameter. At the end of session, call logout to end the
REST session. For example, this PHP code sets the HTTP header: header('sessionId:
'.$sessionId); This example passes the session ID in the URL:
&sessionId=1776eb2d56384f2d9d62f1bf83821b6d@5857
• By providing basic HTTP authentication through the HTTP header — Append @ and and the customer ID
to the login name. A PHP code example:
$header = base64_encode($userName.'@'.$custId.':'.$password); header('Authorization:
Basic '.$header);
Private cloud master tenant users can use their credentials to call the REST API on a specified tenant. REST
API calls using a session ID or basic authentication are considered to be made from behalf of the logged in
user. Permissions of that user are checked for each subsequent call. For instance, to update a record logged
in user must have EDIT permissions on that record, of API call will fail. Use of a session ID is preferred in terms
of performance and security.
Changes in triggers, views, etc. might not immediately affect the REST server. There might be some latency
due to the caching mechanism.
See Rollbase REST Methods on page 1216 and REST Metadata Methods on page 1203 for descriptions of the
available REST methods.
• Runtime Info
Note: The API counters are set at the time you log into Rollbase. For example, if you log into Rollbase
at 9:20 am, your API counters are set at 9:20 am and then the API counters are reset every 60 minutes.
• Server URL
• A URL for external applications to interact with Rollbase using a SOAP (WebAPI) call
• A URL for external applications to interact with Rollbase using a REST call
• A Progress Data Service URL for external applications to interact with Rollbase using
• A URL for external applications to interact with Progress Data Catalogs in Rollbase using a Progress
Data service call
• Development
• A link to the WSDL describing the elements in an object definition
• A link to the XML schema for an object definition
• A link to Progress Data Catalogs product page (Creating Progress Data Catalogs for external applications
on page 717)
• A link to the Code Generator that is used to generate code that can access Rollbase APIs from external
systems
• A link to Web API documentation
• A link to REST API documentation
• A link to Progress Data Catalogs documentation
• A Rollbase Progress Data Service handles the REST calls. A Progress Data Catalog defines object structure
and the operations available to client apps.
Rollbase provides an All Objects data catalog, which contains all the objects in your tenant. You can create
additional catalogs with subsets of objects. For example, for simplicity and security a catalog should only
include the objects that the mobile app needs to access. Related objects must explicitly be included in the
catalog. You can view and manage catalogs from Setup Home or from individual application setup pages.
To include a catalog file when generating application XML to distribute the app, you need to create or attach
it from the application setup page.
• Client apps instantiate and access JavaScript Data Objects (JSDOs), which manage user sessions and
expose operations on Rollbase objects. You have the following choices for implementing mobile and web
client apps:
• The Progress Telerik Platform provides a template and built-in binding to UI elements which can further
accelerate mobile app development.
• Creating apps using HTML, JavaScript and CSS with your tool of choice and connecting to the Rollbase
back end using the JSDO. You can download the libraries containing the JDSO from
http://clouddataobject.github.io.
The information in this section describes how to create Progress Data Catalogs when using PDOs and JSDOs
with your tool of choice. To take advantage of PDOs with Telerik AppBuilder, see Using the Telerik Platform
to create a mobile app.
1. Create the catalog from Setup Home or from the application setup page:
• Navigate to Setup Home. From the Applications Setup section, select Progress Data Catalogs. Or,
• Navigate to the application setup page Catalogs section.
• At the user level, you can configure your third party settings to:
• Send emails from your Exchange account.
• View your Exchange emails in applications.
• The Email tab in the Rollbase application will list the email messages in your inbox.
• You can also add an Incoming Emails component to an application page and view your email
messages there. For example, you can create an Email tab for an application and place the Incoming
Emails component on a generic page associated with that tab.
• Synchronize your Rollbase calendar to your Exchange calendar (this is a one-way synch from Rollbase
to Exchange).
Use of Microsoft Exchange for your email and/or calendar must be enabled at the tenant level. It is enabled
by default. See Third Party Settings page on page 793 for instructions on configuring user-level Microsoft
Exchange settings.
• By default, Rollbase uses its own email server when sending administrative email messages from Rollbase.
You can configure a tenant to use an Exchange email account instead. See Email server settings for
instructions on configuring Rollbase to send administrative emails from an Exchange account.
• At the instance level, you can set shared properties to send administrative emails from an Exchange account.
Set the following shared properties to use Exchange for administrative emails at the instance level:
1. MailHost=Exchange
2. MailUser= username@companyname.com
3. MailPassword=myPassword
See shared.properties on page 926 for more information.
The Hosted Rollbase infrastructure is hosted in a secure server environment that uses firewalls and other
security technology to prevent interference or access from outside intruders. The Rollbase Private Cloud
infrastructure is hosted in your own server environment that uses your own firewalls and security technology
to protect it. When you access the Rollbase service via HTTPS, Secure Socket Layer (SSL) technology protects
your information using both server authentication and data encryption, ensuring that your data is safe, secure
and available only to registered users in your account. As long as your authentication information (username
and password) are kept safe, your data remains inaccessible to unauthorized viewing and use. See User
authentication on page 720 for details about user authentication.
Rollbase provides a sophisticated set of access control mechanisms that allow you to grant users permission
to access applications and their components. See Access control on page 724 for details. Rollbase Private
Cloud provides additional access control mechanisms. See Private Cloud security and access control on page
874 for details.
Topics in this chapter describe security features that are available in both Hosted Rollbase and Rollbase Private
Cloud. See Private Cloud security and access control on page 874 for security features unique to Rollbase
Private Cloud.
• User authentication
• Access control
User authentication
Users gain access to a Rollbase tenant when an administrator creates a User record for them. The record
includes a user name, which must be unique for the tenant, and an email address. Rollbase sends a welcome
email to that address with a temporary password that the system generates. This password must be changed
during the first login. Neither the administrator nor Rollbase personnel have access to user passwords.
When a user logs in, Rollbase issues a session cookie to record encrypted authentication information for the
duration of a specific session. The session cookie does not include the user's password. Rollbase does not
use cookies to store other confidential user and session information, but instead implements more advanced
security methods based on dynamic data and encoded session IDs. Additionally, Rollbase implements HTTPOnly
cookies that direct browsers to expose the cookie only to HTTP and HTTPS requests.
A user can have only one Rollbase session open at a time. If a user logs in again in a different browser, Rollbase
terminates any previously opened Rollbase sessions (the only exception to this is API sessions).
Both Hosted Rollbase and Rollbase Private Cloud include the following authentication features:
Forgotten password
If a user forgets their password, they can click I forgot my Password on the login page. On the Forgot
Password page, the user should enter the email address for a valid Rollbase user account:
If the information matches Rollbase records, Rollbase resets the password and sends a new temporary password
to user's email address. The user will be asked to change the password at the first login.
Whitelist IP addresses
As a security precaution, you can restrict logins to a whitelist of IP addresses. The IP address of any user trying
to log in to your customer tenant will be checked against this list. If the IP address does not match, the login
will be denied.
• From a setup page, select Setup Home from the application switcher:
2. From the Setup home page, select Whitelist under Administrative Setup. The Whitelist of IP Addresses
page opens.
3. In the Whitelist of IP Addresses area, specify IP addresses in one of the following ways:
• The exact address in x.x.x.x format
• A group of addresses (use * for the common part of the address)
• A host name to be resolved into an IP address
You can limit whitelist control to a group of selected roles. If you want to apply the whitelist to all roles, do not
make any selection. To limit whitelist control to a group of selected roles, use the arrows to move roles between
the Available Roles and Selected Roles columns:
Access control
Rollbase provides a rich variety of mechanisms for access control that let you specify which users have
permission to access particular applications, objects, fields, and other components. These mechanisms include:
• Role-based access control, where you set permissions based on users' roles.
• User-based access control, where you set permissions for individual users.
• Relationship-based permissions on page 742, where you set permissions based on users' relationships to
objects.
• Location/Department/Function (LDF) permissions, where you allow access to particular objects and/or
relationships based on a hierarchical grouping of users.
You can choose to use the mechanisms that best meet the needs of your application and organization. The
detailed setting of all required permissions can be a tedious task, but it gives you full control over user access
to all data in Rollbase.
Rollbase checks permissions using the above mechanisms at the following times:
• Administrator: A user with full access to all objects and all customization features.
• Portal User: Assigned to authenticated users of external-facing portals.
• Portal Guest: Assigned to non-authenticated users of external-facing portals. Unlike portal users, portal
guests cannot log into a portal. Portal guests can only access public portal pages.
• Server API: Used to check permissions in server-side API calls.
You can define your own roles, add them to applications, and publish them along with other application
components such as objects. Publishing a role includes permissions assigned to that role.
The following topics describe how role-based access control works, how to create roles and assign users to
them, and how to set permissions for roles.
• Permission to access object records, including view, create, edit and delete permissions per object type.
• Permission to view object fields in the user interface, and the ability to specify that a field is read-only in the
user interface for particular roles. For API access, permissions for fields are determined by permissions for
the object type.
• Permission to access views, tabs, charts, reports, and workflow actions.
• Permission to access menus, including submenus.
• Administrative permissions that can be granted to any user-defined role (but not non-administrative system
roles):
Manage Roles No
Manage Users No
• Merge and convert functionality also require permission to create a new record of the selected object
type. Objects include system entities that can be used in reports, such as activity trails, comments, and
login history records.
• When a role is granted the Manage Roles permission, users with that role can create and edit roles.
They can only create roles with the same set of permissions as their own role or with a subset of those
permissions. They cannot manage the Administrator role or their own role. They cannot assign any
administrative permissions to any role.
• When a role is granted the Manage Users permission, users with that role can edit users if they have
the appropriate permissions on the User object. They cannot assign the Administrator role to a user.
• When a non-administrative role is granted the View Integration Password permission, they can view the
password field values in plain-text for REST, SOAP, and AJAX calls. If no permission is granted, the
password field value is returned as Password on File.
This permission can’t be granted to non-administrative system roles – Portal User and Portal Guest.
This permission does not apply to Server Side APIs or field tokens used in template/trigger body. They
always return password as plain-text value.
• When a non-administrative role is granted the Search Box permission, they can view the search button.
If no permission is granted, the search button is not enabled for users with that role.
This permission can’t be granted to non-administrative system roles – Portal User and Portal Guest.
• To assign a landing page for the role, click Pages. See Assigning a landing page to a role on page 733
for more information.
• To view a role, click the role name.
The following screen shows the Edit Role page for a user-defined role:
Application permissions:
Object permissions and permissions for each object's views, reports, charts, and workflow actions:
4. Optionally select an application from the Filter By Application drop-down field to filter the view by application.
The page will now display only permissions for that application and its objects and tabs, as well as
administrative permissions for the role.
5. Set the permissions as desired.
When setting permission for objects:
• You can specify a combination of View, Create, Edit, and Delete permissions
• You can click Select All to grant all permissions for the object and its views, reports, charts, and workflow
actions.
• You can click Select none to clear all permissions for the object and its views, reports, charts, and
workflow actions.
• You can also grant or clear permissions individually.
When setting permissions for tabs:
• You can click Select All to grant all permissions for the tab and its menus.
• You can click Select none to clear all permissions for the tab and its menus.
• You can also grant or clear permissions individually.
6. Click Save.
2. Select Roles.
3. Select Pages next to the role to which you want to assign a landing page.
7. Click Save.
When a user with that role logs in, the configured application will open with the configured tab selected.
A user can override the landing page configured for their role on the My Preferences page on page 794.
On an object definition, you can set View, Create, Edit and Delete permissions. Users in a particular role will
have the specified permissions for object records of that type:
On a view or a chart, you can set a single View permission. A user's role (or the user) must have View permission
on the associated object to be able to access the view or chart.
Note: Limiting access to views can be useful for limiting user access to certain kinds of records, provided that
the user is not permitted to create or edit views. However, we do not recommend this approach. Using
relationship-based permissions or location, department, and function (LDF) based permissions is more secure
and reliable.
On a tab, menu, report, or workflow action component, you can set a single Access permission. A user's role
(or the user) must have the appropriate permission(s) on the associated object(s) to be able to access a report
or a workflow action.
4. Select each role's View and Edit permissions, specifying Yes, No, or Conditional Formula as shown
below:
5. If you selected Conditional Formula for a position, click Formula to edit the formula.
The following screen shows a conditional formula. In this example, the createdBy field (whose value is a
user link), must equal the current user to grant edit permission on the Comments field.
• When you use conditional permission, note the following behavior: If the view conditional formula returns
true and the edit conditional formula returns false for a field on a page, the page displays the field but
does not allow the user to enter a value in the field. If the view conditional formula returns false, the field
does not appear on the page.
• When writing a formula for conditional edit permission, note that the current record context is not available
during record creation. To write a formula that covers both create and update cases, either conditionalize
the formula to execute different code for create and edit scenarios or use tokens such as Current User,
Current Customer, Settings, and Helpers, which are always available.
You can conditionalize formulas to execute different code for record creation and record update by checking
the current record id, {!id}. If it has a non-zero value, the formula is executing on an existing record and
the current record context is available. If it evaluates to zero, the record is not yet created and the formula
is executing for a new record.
The following example illustrates a pattern for conditionalizing a formula to execute different code for record
creation and record update.
var recordId = {!id};
if(recordId > 0) {
// Update Scenario
if(!rbv_api.isFieldEmpty("Passenger1", recordId, "R7428"))
return true;
}
else {
// New Record scenario
return true;
}
The following example illustrates using tokens based on the Settings record, which is always available.
if("{!#SETTINGS.club_member#value}" != "")
{
return true;
}
You can also set field permissions using the setPermissionsByRole REST method.
These permissions are all enabled by default for every role. Administrators can disable/enable each of these
permissions for a role.
User Permissions include:
• My Settings — When disabled, users with that role cannot manage the settings on their My Settings
screen. My Settings will not appear on the My Profile screen.
• My Third Party Settings — When disabled, users with that role cannot manage the settings on their My
Third Party Settings screen. My Third Party Settings will not appear on the My Profile screen.
• My Localization Settings — When disabled, users with that role cannot manage the settings on their My
Localization Settings screen. My Localization Settings will not appear on the My Profile screen.
• Recycle Bin — When disabled, users with that role cannot manage their recycle bin. Recycle Bin will not
appear in the Rollbase menu or on the My Profile screen.
• My Security Settings — When disabled, users with that role cannot manage the settings on their My
Security Settings screen. My Security Settings will not appear on the My Profile screen.
• My Theme — When disabled, users with that role cannot set the theme on the My Preferences screen.
The My Theme area will not appear on the My Preferences screen.
• Notifications — When disabled, users with that role cannot edit Notifications on the My Preferences
screen. The Notifications area will not appear on the My Preferences screen.
• Landing Page Configuration — When disabled, users with that role cannot set the Landing Page
Configuration on the My Preferences screen. The Landing Page Configuration area will not appear on
the My Preferences screen.
If My Theme, Notifications, and Landing Page Configuration are all disabled for a role, My Preferences will
not appear on the My Profile page for users with that role.
The following screen shows the My Profile screen for a user whose role does not have permission for Recycle
Bin, My Theme, Notifications, and Landing Page Configuration:
You set a user's permission the same way that you set permissions for a role:
• To view and set all permissions for a user, select Users from the Administrative Setup area of the Setup
Home page. A user's Permissions page is similar to a role's Permissions page. See Setting permissions
by role on page 730 for more information.
• To set component-level permission for a user, in the Permissions table on the component's view page,
click Select User, select the user from the list, and set the permissions.
In the example below, the user Joe Recruiter is granted permission to view object records, even though that
user's role, Officer, does not have that permission:
There are also access control features that apply only to users:
• Private reports are only visible to their creator and to administrative users.
• Private email and document templates are only visible to their creator and to administrative users.
• Private events and tasks are only visible to their creator, users with which they have direct relationships,
and administrative users.
Users with the Service Customer role can create Support Request records, but cannot view, edit, or delete
Support Request records. However, once they create a record, they have permission to view, edit, and delete
it through the permissions granted to the Record Creator role. This ensures that Service Customers can view
and edit only their own support cases.
Relationship-based permissions
You can use a relationship between a user or a portal user and records to give that user access to related
records only, rather than to all records of that type.
You can assign permissions through relationships when editing object-related permissions or you can navigate
from the Permissions link in the Relationships section:
Consider the following example: You want to limit the access of users in the Account Manager role to Order
records, only allowing users in that role to view, edit, and delete records that they own while allowing any user
in that role to create records. There is a one-to-many relationship between User (the relationship is named
Owner) and Order. To achieve this, specify the following permissions:
For dependent records, such as Order Line Items in the example above, use role-based permissions. This
strategy works because the user can only access these dependent records through the parent record, access
to which is controlled through the relationship.
To solve this issue, Rollbase provides a "hierarchy of users" relationship: Direct Reports (one-to-many) and
Reports To (many-to-one). The following graphic shows an example where the user Mike Sancilardi reports
to Joe Recruiter and Taras Bulba reports to Mike:
Rollbase calculates a sub-tree of users who report (directly or indirectly) to the current user. All relationship-based
permissions given to that sub-tree are also delegated to the current user.
Consider the following user hierarchy:
• Joe Recruiter
• Mike Sancilardi (reports to Joe)
• Taras Bulba (reports to Mike)
None of the users' groups have permission to access Order records, but the Owner relationship has full access:
There are three orders in the system with different owners. An administrator sees all three orders:
Joe Recruiter sees two orders (even if he does not own them directly). Access to these orders is granted
through ownership of direct and indirect users below him in the hierarchy:
Page versions
When you create an object definition, Rollbase creates a complete set of pages for viewing, editing, and creating
records for that object. You can create different versions of these pages using the Clone link in the Pages
table. Use the Page Editor to modify these cloned pages.
Later, you can assign these cloned pages to be used by individual users or those with particular roles. Use the
Pages link in the Roles list or select Assign Pages from the drop-down menu on the user view page to assign
pages by role and user:
On the Assign Page Versions page, expand the object for which you want to assign pages and select the
pages you want to assign for the role or user. Different users or roles can use different pages to access the
same records. This approach can be used to limit a user's access to certain object fields and/or to personalize
a the experience by user and role.
Location/department/function permissions
Location/Department/Function (LDF) permissions are the most complex types of permissions to set up in
Rollbase. Typically, large organizations with complex internal policies require the level of access control provided
by LDF.
LDF permissions act as filters that are applied before any role-based, user-based, or relationship-based
permissions are applied. LDF permissions are set on individual records. This is in contrast to user, role, and
relationship-based permissions, which are set on objects and components such as views. LDF permissions
specify whether a user can access a particular record. Actions on records, such as viewing, editing, creating,
and deleting, are controlled by user, role, and relationship-based permissions.
The system User object has LDF permissions enabled by default. LDF permissions are enabled by adding the
Organization attribute to the object. If an administrator has disabled LDF permissions for the User object, you
can re-enable them by adding the Organization attribute to the User object.
LDF permissions are based on the following objects defined in the Organization Management standard
application, which you must install before you can use LDF permissions::
• Location
• Department
• Function
• Group
When you set up LDF permissions, you use Location, Department, and Function to model an organization.
Each of these objects allows you to create records in a hierarchical structure, such as shown in the screen
below of Department records where Telesales and Regional Sales fall under the Sales category:
The Group object represents a group of users. Each Group record can have a Location, a Department, and
a Function, as well as a list of users who are members of the group. A user can belong to zero or more groups.
LDF permissions apply to a group. A user will have the superset of the LDF permissions specified for all of the
group(s) to which the user belongs. See LDF groups on page 752 for more information about groups.
You set LDF permissions on records. LDF permissions are enabled for an object by adding the Organization
attribute to it, which adds the Location, Department, and Function fields to the object. You then assign values
to these fields in records. Users who belong to a group whose values are the same or higher in the hierarchy
than the values in an object record can access that record. See Assigning LDF values to records on page 756
for details about setting LDF values in records.
The example below illustrates how LDF permissions work; normal permissions are applied after LDF permissions.
In this example, Joe has permission to access the Acme Lead record because the group Sales Reps has
permission to access records with the location Boston and the department Sales. However, user/role/relationship
permissions still apply. For example, for Joe to view the record, Joe must also have View permission for the
Lead object.
The example below shows how LDF permissions work with hierarchical values. The function Sales Rep is a
child of the function Sales VP. Joe can access the Acme Lead record because his group's function is Sales
VP and the Acme Lead record's function is Sales Rep. However, the Lead object must allow View permission
for either Joe or for the Sales Mgmt role for Joe to view the record.
The example below show how LDF permissions can prevent a user from accessing records outside of that
user's organization. In this example, Joe's group has the location Boston, but the Acme Lead record has the
location Chicago. Therefore, Joe cannot access the record, even if the user Joe or the role Sales Mgmt is
granted user-based or role-based permission to access it.
You can set up LDF permissions in any way that matches your organization's needs.
Note: Adding LDF permissions to large number of records can affect application performance. Progress does
not recommend adding LDF permissions to dependent objects (such as order line items) which are accessible
only through a master object (order).
LDF hierarchies
The Organization Management application includes Location, Department, and Function objects, and is
pre-populated with a set of base records. Each set of records is organized in a hierarchy. For example, a portion
of the location hierarchy is pre-populated with the following:
You can add, edit, and delete records in the hierarchy according to your requirements. For LDF permissions,
if a group has permission to access a location, department, or function, it also has permission to access its
children. For example, in the above graphic, if a group has permission to access records with the location
United States, it also has permission to access records with the locations Chicago, IL, Houston, TX, and the
rest of the child locations.
LDF groups
The Organization Management application contains a Group object that allows you to assign combinations
of LDF values to groups and to add users to groups to create sophisticated organization-based permission
structures. Each group has zero to three assigned LDF values. This means members of that group have
permission to access to all LDF records (regardless of their object type) that match these values (root node or
any node below it).
When you create a group, you give it a name and assign values to any or all of the LDF fields:
• Edit a user and assign it to one or more groups. To do this, you first need to edit the Edit User page to add
the lookup field Groups to the page (see Editing pages on page 497 for details). The resulting selector on
the page opens a window and allows you to select one or more groups:
• Edit a group and add users to it. To do this, you first need to edit the Edit Group page to add the lookup
field Users to the page (see Editing pages on page 497 for details). The resulting selector on the page opens
a window and allows you to select one or more users.
The screen below shows the view page for a user who is a member of two groups. The read-only LDF Filter
field shows the exact LDF permissions for the user. The LDF Filter field is useful for verifying a user's assigned
permissions. The Groups field displays the user's group memberships. Within each group, attributes are
connected by a logical AND. Groups are connected by a logical OR. In this example, Mike has permission to
access all locations under United States for the department Operations because the Executives group is
assigned the location United States:
Keep the following in mind when creating groups and assigning users to them:
• If a record has no value for an LDF field, only users whose group has no value for that field can access the
record. For example, if a record has no value for the Department field, a user whose group has the value
Sales for Department cannot access that record.
• If you create a group without any LDF values, members of that group will have full access to all records
with LDF permissions enabled. Only users in that group or an administrator can access a record with no
assigned LDF values.
• A non-administrative user that does not belong to any group does not have access to any records with LDF
permissions enabled.
• Administrative users have full access to all records.
• To navigate to settings for the current application, click Current App Settings.
• To navigate to settings for a different application, hover your mouse pointer over the application and
click the settings icon.
You can now assign LDF permissions on individual records of that type.
When you view a record, the values for these fields are displayed and, in addition, the LDF Filter field displays
the rules for accessing the record. The LDF Filter field is useful for verifying the assigned permissions for an
object record:
Assigning LDF values for all records can be a tedious task. To simplify it, you can use the following techniques
to assign default LDF values to new records:
• The User object always has the Organization attribute (unless it has been disabled by an administrator),
so you can assign LDF values directly to users. This does not grant any LDF permissions, as permissions
are always granted through groups. Instead, these values can be used as the default when a particular user
creates LDF records. To use default LDF values assigned to the current user, check the option on the Edit
Field page for that object. For example, in the graphic below, the Location field for the Order object has
this option checked. When a user creates an order record and does not provide a location, the user's location
is used as the default.
• If you create a new related record, and LDF fields are absent from the new record page, the LDF values
from the parent record are used by default. You must create the new related record from the parent record's
view page; for example, in the screen below, you would click New Order Line to create a related order line
with the order's LDF values:
The knowledge factor token is an authentication credential consisting of information that a user possesses,
such as a personal identification number (PIN), user name, password, or answer to a secret question. When
the user accesses their login link, they have to provide that value. Once authenticated, the user can set their
preferred password.
Note: The password reset link expiry time and the knowledge factor token can be retrieved and/or set using
the getAuthentication and setAuthentication REST API methods . See getAuthentication on page 1233 and
setAuthentication on page 1269 methods for more information.
Deprecated Tokens
The following tokens are deprecated when resetting the password and will not be shown in the Password Reset
Notification Template. You can remove these tokens, otherwise, Rollbase will ignore these tokens.
{!#user_name_#}
{!loginName}
{!#temporary_password_#}
{!tempPassword}
{!#after_you_login_usin#}
Note: Store a copy of the generated key in a secure place so that it is available for situations
such as disaster recovery, or machine changes. This file is created and managed by Rollbase and
should not be edited locally.
All fields currently encrypted using default encryption algorithm (AES-128) will continue to function correctly.
They will be decrypted and then re-encrypted using your preferred algorithm and generated secret key the next
time they are edited and saved.
AES-256 Encryption Algorithm Support
Rollbase now also supports encrypting data using AES with 256-bit key size. This is a system wide choice and
managed through the shared property - 'EncryptionType'.
To make use of AES-256 on a Rollbase Private Cloud:
1. Set value of shared property ‘EncryptionType’ from 0 to 1. This is a one-time setting.
Once set to 1, reverting to 0 is not recommended. If no value is specified,
‘EncryptionType’ uses its default value, 0. No additional changes are required if you
want to continue using AES-128.
2. Install Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8 to
enable the 256-bit Key Size used by AES-256. For download and usage instructions, see
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html.
Note: If these JCE files are not installed and the property ‘EncryptionType’ is set to 1, encryption attempts
will fail with the exception: Illegal Key Size.
Important: Support for unique constraint validation on encrypted fields has been deprecated. Thus, unique
checks on encrypted fields will not work. Encrypted fields cannot be audited, marked unique or indexed as part
of the search engine. Once set, this option cannot be removed.
In Rollbase, you can publish and distribute applications in the following ways:
1. To give others who have an account in your tenant access to an application, assign specific users or user
roles the appropriate permissions. See User authentication on page 720 and Role-based access control on
page 724.
2. To distribute to the Rollbase community for sale or free, publish an application on the Rollbase Marketplace
or Application Directory. See Using the Progress Rollbase Marketplace on page 766 and Publishing to the
Rollbase Application Directory on page 785.
3. To provide the application to users in other tenants, perhaps used by other groups in your organization,
generate an XML version of the application. Any Rollbase user with a role of Administrator can install the
application in their tenant. See Distributing applications in XML format on page 779 and Generating application
XML on page 784.
Note: Only Rollbase Private Cloud administrators who have moved from earlier versions of Rollbase to
Rollbase 4.0 can enable Application Directory.
• Free applications: Publishers offer their applications free on the Marketplace. Users then directly install
the applications from the Marketplace.
• Paid applications: Publishers offer their applications for a fee on the Marketplace. Users click Learn More
to purchase and install the app from the publisher's Web page. The publisher hosts the application and
manages billing and installation.
See Installing an application from the Marketplace on page 290 for information about installing applications from
the Marketplace.
The Marketplace works a bit differently for hosted and Private Cloud customer tenants:
• Hosted Rollbase users distribute their applications to the Marketplace hosted by Progress. This can be
accessed by all Rollbase users.
• Rollbase Private Cloud master administrators can configure, manage, and rebrand a private Marketplace
(one per Rollbase installation), and distribute their applications only to their users. See Managing the
Marketplace using the Marketplace application in Rollbase Private Cloud on page 773 for more information.
Additionally, Rollbase Private Cloud master administrators who have moved from earlier versions of Rollbase
to Rollbase 4.0 can choose to enable or disable Marketplace in their tenant. For more information, see
Enabling or disabling Marketplace in Rollbase Private Cloud on page 771.
The following diagram shows how users access the Marketplace:
Those with access to the Marketplace can navigate to it in the following ways:
Note: You can configure your Rollbase Private Cloud Marketplace URL in shared.properties on page
926.
2. A master administrator approves the submitted application for publication on the Marketplace:
Note: If this application is approved on the Marketplace, the information you provide here will be displayed
on the Marketplace's application page.
• Version: The version number of the application. Enter an integer value. For example, if you publish an
update to version 1, use 2.
• Application Name: The name of the application
• Tags: The terms assigned to this application. Publishers can use these terms to identify the application
from a group. This is an optional field.
• Category: One of the available categories (on the Marketplace) for this application
• Application Description: Description of the application. This is an optional field
• Application Logo: A custom logo image. The image dimensions are 180x180. The image size must be
less than 512KB.
• Lock Status: The status of the application's component locking mechanism. Unlocked is the default
status
If you select Partially Locked, you must specify which application components to lock by selecting the
relevant check boxes. Expand the tree to specify locking at a fine-grained level. For more information,
see Locking applications on page 782.
• Supported Languages: The languages in which this application can be used. This is an optional field.
• Requires Rollbase: The Rollbase versions required to use this application
• Product Type: The type of application, App or App Template
• Screenshots: The application's screenshots. Typically, you use these screenshots to help Marketplace
users evaluate the application interface and features. A minimum of two screenshots are required to
publish an application.
• Publisher: The publisher-related information. This provides Marketplace users information about the
publisher's headquarters, phone number, email ID, and website information.
• Publisher Description: A short description about the publisher of the application. This is an optional
field.
• Advanced Options: The fields in this section are optional. They specify:
• If the application is a Featured or a Paid application on the Marketplace
• Links to Product Overview, Resources, Learn More, and Price Options page. Typically, you use
these links to direct Marketplace users to your website's pages.
• An application Banner
4. Click Submit.
The application is submitted to be published on the Marketplace. You receive an email after your application
is approved on the Marketplace.
Additionally, using the Marketplace application, the administrators of the master tenant can directly publish an
application using its XML file. They have to use the New Published Application option on the Published
Apps menu.
Enabling Marketplace
The following are the high-level steps for a master tenant administrator to enable and configure Marketplace:
1. Install the Marketplace application. The Rollbase XML file of the application, app4-mkp.xml, is shipped
with the Rollbase 4.0 installer. For example, if you installed PAS, and accepted the default settings. This
directory would be <drive>:\Progress\Rollbase\Pas_Instance\rollbase\apps.
The Marketplace application is made available on the master tenant and can be accessed from the
application switcher.
Note: To configure and administer your Marketplace, you must understand the different sections of the
Marketplace home page (see Managing the Marketplace using the Marketplace application in Rollbase
Private Cloud on page 773).
• Open the Categories object tab and create all the application categories (root, level1, and level 2) to be
displayed on the Marketplace.
Applications in the Marketplace must be associated with a category, and categories that do not have
any associated application will not appear on the Marketplace.
• Open the Published Apps object tab and edit (individually) all the applications in the Published
Applications list.
As part of editing the application, ensure that all the application details are specified appropriately. These
details will be displayed on the Marketplace's application page.
• Open the Carousels object tab and add carousel images to be displayed on the Marketplace home
page.
3. Open and configure the MarketplaceURL property in the shared.properties file (see shared.properties
on page 926) to enable Marketplace.
Navigate to and test your Marketplace by selecting the Install Applications option on the Rollbase menu
(on the top-left corner of any Rollbase page).
Enabling the Marketplace does not automatically publish all your Application Directory's applications on the
Marketplace. So, from the Published Apps menu of your Marketplace application, you must identify and
approve the applications that you want to publish on the Marketplace. You can do this using the Published
Apps menu of the Marketplace application (see Approving and publishing an application on the Marketplace
on page 771).
Disabling Marketplace
To enable Rollbase Application Directory, comment-out or do not provide any value to the MarketplaceURL
property in the shared.properties file.
After enabling Application Directory, administrators of the master tenant can access and configure the
Application Directory application from the System Console. All the applications published on the Marketplace
will be available on the Application Directory.
Progress does not recommend using Application Directory over Marketplace.
• Published Applications: To manage applications that are available on the Marketplace and those that are
submitted by Rollbase users to be published on the Marketplace.
Additionally, you can use the New Published Application option to publish an application on the Marketplace
using an application's XML file. For information about generating an application's XML file, see Generating
application XML on page 784.
• Categories: To create and manage the application categories displayed on the Marketplace’s home page.
Categories can be organized into root categories and sub-categories. A category consists of the following
properties:
• Ratings: To manage an application's ratings (submitted from by Rollbase users) displayed on the application’s
home page. A rating can only be published from the application's page on the Marketplace. A rating consists
of the following properties:
• Carousel Images: To create and manage carousel images (the auto-scrolling images on the home page)
that are displayed on the Marketplace's home page. A carousel image has the following properties:
• Flags: To manage the applications that are reported as inappropriate; an application can only be flagged
from its page on the Marketplace.
• Report Abuse: Specifies, from the list of available categories, a category for inappropriateness
• Application being Reported: Specifies the application that is being flagged as inappropriate
Rebranding Marketplace
Administrators on the master tenant can rebrand the Marketplace by adding a custom logo to replace the
Progress Rollbase logo.
1. From the application switcher, navigate to the Marketplace application's setup page.
Note: The custom logo file must be a .gif, .jpg, or .png file.
4. Click Save.
5. Refresh the Marketplace page.
The following table describes when these notifications are sent to users and how to configure them:
When a publisher submits an The administrators of the master Template Name: Application
application to the Marketplace for tenant Approval Pending
approval.
Template Location: Object
definition page of Published Apps
Default email content:
When a publisher updates a The administrators of the master Template Name: Application
published application. tenant Updated
Template Location: Object
definition page of Published Apps
Default email content:
When a user rating of a Marketplace The administrators of the master Template Name: Rating Approval
application is available for approval. tenant Pending
Template Location: Object
definition page of Ratings
Default email content:
When a master tenant administrator Application publisher Template Name: Rating Approved
approves and publishes an
Template Location: Object
application rating.
definition page of Ratings
Default email content:
• If a Role is given application permissions, the permissions assigned to that role are published as part of
the application XML. This is because the User object is a dependent object for all applications.
• If any core objects have the Approval attribute, the Approval object will be added as a dependent object.
• If any core objects have the Contact attribute, the Communication Log object will be added as a dependent
object.
• If certain objects are not included as core objects but they are related to the objects included on the application
menu, then those objects will be added as dependent objects.
Note: The dependent objects that Rollbase adds to the application cannot be removed from the application.
The application view lists objects assigned explicitly and those included implicitly through tabs. Explicitly
assigned objects have a Remove action link. Implicitly assigned objects can be removed only after removing
the corresponding tab. For example, if there is an application that has Accounts and Contacts tabs, and the
two tabs are related and the application only explicitly assigns an Account detail object. When this application
is published, it will include the following objects: Account, Contact and Account Detail (without a tab).
The following table summarizes the conditions under which components are included in the Rollbase application
XML file:
Menus and submenus Owning object (if any) belongs to the package
Workflow processes, actions, and statuses Owning object belongs to the package
• Use integration codes for picklist items and workflow statuses in formula fields, templates and triggers; do
not use IDs.
• Use template tokens such as Link to View Page {!#LINK.order} or a reference to the id, such as {!id}.
Do not explicitly use IDs in Template Fields or Integration Link Fields (used to build dynamic URLs).
The System Information section of component definitions contains the local ID and the Original ID. To find
a component's Original ID, do the following:
1. From the application switcher, select Setup Home.
2. From the Applications Setup area, click the type of component (For example, Applications, Objects, or
Tabs).
3. Click the name of the component. The component definition displays.
For object subcomponents, scroll down to the appropriate section and click the subcomponent name.
The component's properties displays the System Information section with local and original IDs:
Locking applications
To protect your intellectual property, you can lock part or all of applications you create. This prevents others
who install the application from changing it and guarantees that future updates will safely overwrite existing
components. Applications, objects, and portals installed from locked applications can only be published and
republished from the tenant in which they were originally developed. If an application is unlocked or partially
locked, those installing it can selectively choose components to install or update.
Application lock options include:
• Unlocked: Administrative users that install the application can modify all components. Progress recommends
this option if you do not intend to provide updates to this application, or if it is critical that your users be able
to modify every aspect of the application.
• Partially Locked: Administrative users that install the application can modify all objects, menus, and portals
except those that are marked as locked. Object subcomponents, such as fields and triggers, can be locked
independently, leaving the parent object unlocked. We recommend selecting this option if you plan to provide
updates to specific components of your app while letting your users modify other components as needed.
• Locked: Administrative users that install the application cannot modify anything. We recommend using this
option if you need to maintain complete control over all aspects of the application from update to update,
and want to prevent your users from modifying it.
The only way to modify a locked component in an application is to log into the tenant where the application is
installed as Support Admin using the Login action from the master tenant. See Working with customer records
on page 862 for information about the Login action.
Once installed in another tenant, an application's lock status can only be modified if the publisher modifies or
updates it. For example, the publisher can export the original application in an unlocked state, and an
administrator for the other tenant can update the application using the updated application XML.
• To navigate to settings for the current application, click Current App Settings.
• To navigate to settings for a different application, hover your mouse pointer over the application and
click the settings icon.
Note: If a System Settings object is attached to the application, an Attach Settings button will be available
to add the settings as a seed record.
• To navigate to settings for the current application, click Current App Settings.
• To navigate to settings for a different application, hover your mouse pointer over the application and
click the settings icon.
• To navigate to settings for the current application, click Current App Settings.
• To navigate to settings for a different application, hover your mouse pointer over the application and
click the settings icon.
2. Click Publish or Publish Updates. The button name depends on whether the application has been published
previously.
The Publish Application dialog displays.
3. Verify that the version number is correct.
4. Select a category for the application, this will be displayed in the Application Directory.
5. Enter a description. Those browsing for applications will read this, so make it as descriptive as possible.
6. Optionally, upload a logo graphic.
7. Select a Lock Status. If you select Partially Locked, you need to specify which application components
are locked by clicking the check boxes next to those components. Expand the tree to specify locking at a
fine-grained level. In the following example the Account object will be locked in the published application;
the Case object will not be locked.
8. Click Submit.
If you submitted to the Rollbase hosted Application Directory, you will receive notification on the status
of your application.
Because the published application object is itself a Rollbase object, Rollbase Master Server administrators can
define a custom approval process for allowing published applications to appear in the Application Directory.
By default, this is simply done by checking the Approved checkbox field.
Rollbase Master Server administrators can also push new versions of an application to customers who have
previously installed that application. See Pushing application updates to other tenants on page 986.
Object with Workflow attribute Default status NNN not found Edit the object and set a default
status.
Relationship Related object definition NNN not Delete the relationship or add the
found missing object definition to the
application.
Portal Web page NNN not found Edit the portal and set its main
page.
Conversion Map Object definition NNN not found Delete this conversion map or add
the destination object definition to
the application.
Import Map Object definition NNN not found Delete this import map.
Page Cell Field definition NNN not found Delete this page cell by editing the
page and removing it (this often
requires just opening the page in
the page editor and re-saving the
page).
List Component View NNN not found Use the Page Editor to select the
list component and set its default
view.
List Component Page NNN not found Use the Page Editor to select the
list component and set its
destination view and edit page.
Related List Relationship Definition NNN not Delete this related list.
found
Chart Cell Chart NNN not found Use the Page Editor to select the
chart component and set its default
chart.
Portal Link Cell Page NNN not found Use the Page Editor to remove this
portal cell link and replace it with a
valid one.
Report Link Cell Report NNN not found Use the Page Editor to delete this
report link from the page.
Portal Submission|Log in Form Page NNN not found Use the Page Editor to select the
form component and choose a valid
destination Page.
Grid Control Relationship Definition NNN not Configure or delete the grid.
found
Related Field Relationship Definition NNN not Delete this related field.
found
Lookup Field Relationship Definition NNN not Edit and save the lookup field.
found
Template File Field Template NNN not found Edit or delete this template file field.
Dependent Picklist Field Field Definition NNN not found Edit or delete this dependent picklist
field.
New Record Trigger Target Object with id NNN is not This trigger creates an object which
included into this application is not included into this application
either as a core or a dependent
object.
Workflow Action Workflow Status NNN Not Defined Edit this action and fix the Change
Status To setting.
Workflow Action Page NNN not found Status NNN not Edit this action and choose the
found Relationship Definition NNN correct parameters or delete and
not found Conversion Map NNN not re-create it.
found Template NNN not found
This section describes the setup and administration options in the Personal Setup, Administration Setup,
Support, and Monitoring Setup pages.
• Personal setup
• Administration setup
• Monitoring setup
• Support
• Language support
Personal setup
Personal setup is available to all Rollbase users, including those who do not have the Administrator role.
Non-administrative users can modify personal settings by selecting My Profile from the profile menu and
selecting the appropriate category from the My Profile page. Administrative users can modify personal settings
from either the profile menu or by selecting the appropriate category from the Personal Setup section of the
Setup home page.
Personal settings are divided into multiple categories, with each category on a separate page. These categories
are:
My Settings page
Selecting My Settings from the My Profile page or from the Setup home page opens the My Settings page.
This page contains fields for editing contact information, login name, and other user preferences and settings.
In addition, you can view or edit the following user preferences and settings:
• Rows Per Page — Specifies the default number of rows per page on record list pages
• Do Not Animate Collapse — Specifies that trees, which can expand and collapse, be collapsed without
the default animation
• Location, Department, Function — Specifies the location, department, and function to which the user
belongs. These values will be copied by default to new records with the LDF attribute created by this user.
See Location/department/function permissions on page 748 for more information. Only an administrator can
change this field.
• Reports To, Direct Reports — Specifies the user's hierarchy that is used for access control. For information
about these settings, see User hierarchy of permissions on page 743. Only an administrator user can change
these settings.
• Approver — Select if this user is allowed to be an approver (see Approvals on page 423). Only an
administrator user can change this field.
• Language and Time Zone — Specifies the language and time zone to be used in your user account.
Note: While a Date Format field is available on this page, setting it has no effect if you are using the New
UI. Instead, Rollbase uses localization settings, including the date format, from the My Localization Settings
page.
• Email Footer: Specifies the footer text to be used in your email messages. This is to personalize your email
messages.
• Email Encoding: Specifies the encoding format of your email messages.
• Google Apps Settings: Specifies Google email account credentials to access Gmail, Google Calendar
and Google Spreadsheets seamlessly with Rollbase apps. For information about integrating Google accounts,
see Integrating with Google applications on page 707.
Note: Progress recommends that all customers set their Google Apps Settings from the My Third Party
Settings page. See Providing your Google credentials to Rollbase on page 708 for details.
• For SMTP or Microsoft Exchange, enter your email address and password in the User Name and
Password fields for the selected email and calendar (if using Microsoft Exchange calendar) options.
• For Gmail, click Attach. A popup window opens and prompts you to log in to your account. Click Allow.
4. Click Save.
Note: The date and date-time formats are used on record list and view pages. On edit pages, Rollbase enforces
the basic date formats as defined in Kendo formatting library support. See
http://docs.telerik.com/kendo-ui/framework/globalization/dateformatting#custom-date-formats for more
information.
Note: The number format is used to format Integer and Decimal fields. For Integer fields, select Enable
Grouping when creating or editing the field to use the specified number format on all application pages.
How Rollbase uses localization settings depends on whether you are using the New UI or the Classic UI:
• New UI — Rollbase mandates that the format settings on this page are present and always uses these
values.
• Classic UI — Rollbase first checks if the format settings on this page are present. If they are present,
Rollbase uses these settings. If they are not present, Rollbase reverts to the settings defined on the My
Settings page on page 792.
My Preferences page
Selecting My Preferences from the My Profile page or from the Setup home page opens the My Preferences
page. On this page, you can set the default theme for all of your applications, configure notifications, configure
a landing page, which is the page (and specified tab). that will open when you log in to Rollbase, and, if enabled
on Rollbase Private Cloud, generate a token for API authentication.
Themes are only available in the New UI. For more information about themes, see Working with themes on
page 578.
Configuring notifications
You can configure whether Rollbase will notify you before a session expires and/or before leaving a dirty form
(New, Edit) page: If either of these options is deselected, you will not receive that type of notification.
Note: You must copy and save the API Token value in a secure place for further use. You cannot retrieve
this value once you navigate away from the My Preferences page.
3. Click Save.
You can regenerate the token at any time. The new token replaces the previous one.
You must type in the old password and the new password (twice) to change your password. The new password
must conform to the password requirements selected for your tenant. For information about security and access
control, see Security and access control on page 719.
Administration setup
The Administration Setup page enables administrators to mange user accounts, security, backup, and
tenant-specific settings such as currency codes and exchange rates. You can access it from the application
switcher, Setup Home > Administration Setup.
Settings on the Administration Setup page apply per tenant. This page contains the following sections:
• User Administration: Links to manage system-wide settings (see Using company-wide settings on page
800) as well as users and their roles. The following options are available under user administration:
• Users: Opens a view of user records with controls for creating and managing user accounts.
• Roles: Opens a view of Role records, with controls for creating and managing user roles. For more
information, see Creating and editing user roles on page 726.
• Transfer Owners: Opens the Transfer Ownership dialog with controls for changing the user related
to a particular object. For more information, see Transfer owners on page 800.
• Account Settings: Opens the Edit Account Settings dialog with account information, administrative
contacts, page appearances, default account settings, and language settings. For more information, see
Account settings on page 801, and Account administration and security settings on page 803.
• Currency Codes: Opens a view of currency codes to be used in your account.
• Exchange Rates: Opens a view to set exchange rates.
• Email Server Settings: Opens a view to configure custom SMTP server settings. For more information,
see Account administration and security settings on page 803.
• Preferences: Opens a view to set organization's preferences such as custom field validations in API
calls.
• Localization Settings: Opens a review to set organization's localization settings such as locale, number,
date, and time formats.
• Google OAuth Setup: Specifies Google OAuth settings of your Google Project. This is a customer-level
setting. You must set this only if you do not want to use the Google Apps settings set by the administrator
of your master tenant.
You can create and customize your Google project (see Enabling Google Apps for Rollbase Private
Cloud on page 828 for information about creating a Google project and acquiring its Client ID and Client
Secret Key), and then specify the Client ID and Client Secret Key values here, which will be used by
all the users (in your customer tenant) when integrating their Google accounts with Rollbase.
For example, if you are a Rollbase Hosted Cloud customer, and you use Use Default Settings in this
page, then you and all your user will be using the Google Apps settings set by Progress Rollbase. If you
want all your users to use your own Google Apps settings, then you must use Use Following Google
OAuth in this page and specify a Client ID and Client Secret key of your personal Google project.
• Backup and Maintenance: Links to manage backups and account maintenance. The following options are
available under backup and maintenance:
• Backup: Opens a view to create and download a full backup of all your data. For more information, see
Moving and restoring customer tenants on page 864 and Backup and restore on page 804
• Batch Jobs: Opens a view to manage scheduled jobs for email reports, automating backups via FTP,
and automating export of a specific subset of data via FTP. For more information, see Batch jobs on
page 811.
• Global Text Search: Opens a view to manage the full-text search index and view related log files. For
more information, see Global text search on page 813.
Transfer owners
Use the Transfer Owners option in the Administration Setup page to change relationships between a selected
user and records of another type to a different user. To transfer owners, click the Transfer Owners option and
specify the following:
Warning: There is no easy way to roll back these changes, other than editing each record one-by-one.
Do not use this option for temporary reassignments.
• Relationship: Specifies one or more relationships that you want to change between the User object and
other objects (ownership of accounts, cases, etc.)
• Current Owner: Specifies the user you want to reassign records from
• New Owner: Specifies the user to assign the records to
Rollbase replaces the current owner with the new owner for the selected relationships.
1. From Setup Home > Administration Setup > Settings > Configure, define the components of the settings
object.
2. Select Edit to set/modify values the settings object. And then click Save. The Settings object view page
opens.
3. In templates and formulas, from the Template Helper, select the Settings field (from the Helpers group)
and choose the company-wide setting you want to modify:
Then, if you identify each state with its code, implement the sales taxes differently for the different states using
their state code. This can be done using the below formula:
switch ("{!state#code}") {
case "CA": return {!#SETTINGS.ca_rate};
case "AZ": return {!#SETTINGS.az_rate};
default: return 0;
}
The following are the advantages of using settings rather that substitute values into formula directly:
• You can change settings in a single convenient place with controlled access.
• You can publish your formula without referring to specific values.
Account settings
You can access account settings from the application switcher, Setup Home > Administration Setup> Account
Settings.This link will take you to the Rollbase Support Portal, where you can change some settings for your
tenant and customize certain aspects of your Rollbase appearance (colors, sidebar components, etc). The
following describes the options on the Account Settings page and how they can be used in your tenant:
• Account information: Specifies your company information. This can be used for display purposes.
• Company Name: Specifies the name of your company.
• Company Logo: Specifies the company logo, which must be rendered in the upper-left corner of Rollbase
pages. If your company logo is uploaded, then it will be used as the default logo in the applications.
• Company address information: Specifies the address of your company. This can be used in your
template and formula fields.
• Administration contact: Specifies the name, email, and phone number of the administrator of the tenant.
This can be used in your template and formula fields.
• Appearance: Specifies the appearance of your Rollbase account.
• CSS Stylesheet: Specifies the stylesheet to be used in your Rollbase tenant. You can choose between
standard Rollbase CSS and custom CSS. Your custom CSS must be upload as a Hosted File (see
Hosted files on page 617)
• Page Components: Specifies which components appear in the sidebar and header on all Rollbase
pages. For example, if you un-check the Create, you will not see the Create section on the sidebar.
• Hide Sidebar: Specifies if the sidebar must be hidden for all non-admin users.
• Show Application Tree: Specifies if an application switcher must be show as a tree instead of a switcher.
• Use New UI: Specifies, starting with Rollbase 4.0, if the Rollbase pages must use the new user interface
(introduced in Rollbase 4.0) instead of the classic UI. This option is not available to new Rollbase 4.0
administrative users because the new UI provides a better user experience.
• Use New UI for Admin Only: Specifies, starting with Rollbase 4.0, if the Rollbase pages for administrators
must use the new user interface (introduced in Rollbase 4.0) instead of the classic UI. This option is not
available to new Rollbase 4.0 administrative users because the new user interface provides a better
user experience.
• Default Settings: Specifies the data, time, email encoding, and log settings of your Rollbase account.
• Date format: Specifies the default date format. All the users can override the default settings using the
options on the personal setup page.
• Time Zone: Specifies the default time zone. All user can override the default settings using the options
on the personal setup page.
• Email Settings: Specifies the default email account to be used to send emails, the default email footer,
and email encoding settings. The Default Email Sender is used as the "Reply To" address whenever
Rollbase sends an email that was not invoked by a specific user's email address.
• Security Level: Specifies the security and access control mechanism (see Security and access control
on page 719).
• Expiration Policy: Specifies the number of days before user passwords expire (see Security and access
control on page 719).
• Detailed Log: Enables detailed system loggings of users' activities and API calls.
• Language Settings: Specifies the base and additional languages supported in the Rollbase account. See
Language support on page 815 for details.
• Multi-Currency Support:
This page enables you to manage currency names and codes. For information about multi-currency support,
see Multi-currency support on page 477.
• Gmail — See Integrating with Google applications on page 707 for details.
• Microsoft Exchange — To configure an Exchange account:
1. Select Microsoft Exchange.
2. Enter the Exchange email address in the User Name field.
3. Enter the Exchange password in the Password field.
4. Enter an auto-reply email address in the Auto-Reply Address field.
5. Before you can save the settings, you must test them by sending a test email message to a different
email address. Enter the email address to which you want to send the test message in the Email
Address field and click Test Settings.
6. A pop-up dialog opens. After sending the message, Rollbase displays a message stating that the
message was sent. Verify that the email was received and check Message Was Received in Mailbox
to enable the Save option. If the email was not received, reconfigure your email server settings and
try again.
7. Click Save.
3. Test your email server settings by specifying a sample email address and then clicking Test Settings
to see if a sample email message is received at the specified email address.
A pop-up dialog opens. After sending the message, Rollbase displays a message stating that the
message was sent. Verify that the email was received and check Message Was Received in Mailbox
to enable the Save option. If the email was not received, reconfigure your email server settings and
try again.
4. Click Save.
To allow your users to communicate using their email addresses, one or more of the following check boxes
must be selected. Gmail and Exchange are selected by default.
• Authentication:
This page enables you to configure your tenant to accept and perform external calls requested by an
authenticated user. For information about user authentication, see User authentication on page 720.
• Whitelist of IP Addresses:
This page enables you to apply an additional security measure. You can specify whitelist of IP addresses
to be checked when user logs in. For information on security and access control, see Security and access
control on page 719.
• Relational data, all system tables with data as CSV files (one CSV per object definition).
• Binary data, all hosted files, file templates, and images.
Hosted Rollbase enforces a 1 GB limit for your backup data. Note that your backup file might not include the
uploaded file templates, images, and hosted files if your storage exceeds the specified limit. For example, if
you have 500 MB of relational data and 800 MB of hosted files, then Rollbase creates a backup file with only
500 MB of relational data. It does not back up the hosted files.
To back up more than 1 GB of data (relational data and hosted files), you can configure and manage data
backup using your own Amazon S3 cloud storage account or you can contact Rollbase customer support to
resize your 1 GB data backup limit.
Rollbase Private Cloud sets the backup data limit to 20 MB per customer tenant. As an administrator of the
Rollbase master tenant, you can reset the 20 MB limit using the StorageUsageLimitForBkp property value
in the shared.properties file. The StorageUsageLimitForBkp property value specifies the backup data
limit for all the customer tenants. If you want to specify a different backup data limit for a particular customer
tenant, you must Edit the customer record and update the Max Backup File Storage (MB) field with the
different backup data limit. This backup data limit specified in the customer record overrides the backup limit
set in the shared.properties file.
Rollbase Private Cloud sets the maximum backups per month limit to 10 per customer tenant. As an administrator
of the Rollbase master tenant, you can reset this limit using the MaxBackupsPerMonth property value in the
shared.properties file. The MaxBackupsPerMonth property value specifies the maximum backups per
month limit for all the customer tenants. If you want to specify a different limit for a particular customer tenant,
you must Edit the customer record and update the Max Backups Per Month field with the different limit. The
limit specified in the customer record page overrides the maximum backups per month limit set in the
shared.properties file.
For more information about shared.properties and working with customer records, see shared.properties
on page 926 and Working with customer records on page 862.
Backup
Follow these steps to create and download a backup file for your tenant:
1. Navigate to the Setup Home page from the application switcher.
2. In the Administration Setup area, click Backup.
3. To create a backup file, click Create New System Backup.
4. After the backup is complete, click Download to download the backup file to your local machine.
On Rollbase Private Cloud, an administrator on the master tenant can back up a customer tenant. See Working
with customer records on page 862 for more information.
Additionally, you can click View Backup Log to view all the data backup activities performed.
Restore
If you are using hosted Rollbase, or if you are using Rollbase Private Cloud and you want to restore the master
tenant, you must contact Rollbase customer support to restore your data from a particular backup file.
If you are using Rollbase Private Cloud, an administrators on the master tenant can restore data to a customer
tenant from a backup file.
6. Click Restore to restore data from their backup file. When the restore is complete, you will receive an email
from Rollbase.
Note: The restore operation erases any changes made since the backup file was created.
If you are an ISV and/or are using Rollbase Private Cloud, and you want to use third-party cloud services for
storage, see Using a third-party cloud service for storage on page 982.
Currency formats
Every currency field and every formula field that returns a value of type Currency allows the selection of a
currency format to use (this field-specific format is used for all users) as shown below:
Note: If your object supports the Multi-Currency attribute, you can create a base currency field that corresponds
to each currency field to automatically calculate that field's value in the base foreign currency. You can also
select the base currency format. See Multi-currency support on page 477.
The table below lists the available currency formats:
$ #########.## $ 123000.50
$ ###.###.###,## $ 123.000,50
$###.###.###,## $123.000,50
$###,###,###.## $123,000.50
US$###,###,###.## US$123,000.50
$###,###,### $123,000
###'###'###,## € 123'000,50 €
€ ###.###.###,## € 123.000,50
€#########,## €123000,50
€###.###.###,## €123.000,50
€ ###,###,###.## € 123,000.50
€###,###,###.## €123,000.50
£###,###,### £123,000
$###,###,###.## $123,000.50
$###,###,###.## $123,000.50
¥###,###,### ¥123,000
₹ ###,###,###.## ₹ 123,000.50
₹ ##,##,##,###.## ₹ 12,34,000.50
₹##,##,##,###.## ₹12,34,000.50
$###,###,###.## $123,000.50
¥###,###,### ¥123,000
RM###,###,###.## RM123,000.50
Rs ##,##,##,### Rs 12,34,000
###.###.###,## ₱ 123.000,50 ₱
Hungarian Forint HUF ### ### ###,## HUF 123 000,50 HUF
kr###.###.###,## kr123.000,50
Bulgarian Lev BGN ### ### ###,## лв. 123 000,50 лв.
Georgian Lari GEL ### ### ###,## GEL 123 000,50 GEL
SAR###,###,###.## SAR123,000.50
IRR###,###,###.## IRR123,000.50
KWD###,###,###.### KWD123,000.50
IQD###,###,###.### IQD123,000.50
TND###,###,###.## TND123,000.50
DZD###,###,###.## DZD123,000.50
JOD###,###,###.## JOD123,000.50
QAR###,###,###.## QAR123,000.50
AED###,###,###.## AED123,000.50
MAD###,###,###.## MAD123,000.50
###.###.###,## 123.000,50
Batch jobs
Rollbase batch jobs (similar to Oracle Cron jobs) can be used to schedule periodic system maintenance,
notification, and integration tasks. Batch jobs use the permissions set on each object for the Query API.
To create a new batch job:
1. From the application switcher, select Setup Home > Administration Setup> Batch Jobs.
2. Click New Batch Job.
3. Select one of the following options and select Next:
• System Backup:
This job generates a system backup file. Optionally, it can upload the backup file to a remote FTP server.
• Data Maintenance:
This job runs specified the specified object script from the Rollbase client-side API on each record of
the selected type.
• Generate Report:
This job runs the selected report and sends it as an email attachment to the specified recipient.
This job re-creates the index used for global text search.
4. Enter the job-specific settings. Settings common to all job types include:
• Job Name
• This batch job is deployed. Uncheck to save the batch job settings but disable the batch job from
running.
• Start At
• Repeat Every (the period of time between runs, with a one day minimum)
• Notify Address
5. Click Save.
• Billing Administrator: A user who can access and upgrade the Rollbase account type, and administer the
invoice history of the Rollbase instance. This role can only be assigned to a Administrative user. By default,
the administrator of the Rollbase tenant is the Billing administrator. For example, only the Billing Administrator
can upgrade Rollbase subscription from Evaluation to Professional.
The Buy Now button at the top-center of a Rollbase instance of users with an Evaluation license and
Upgrade Subscription button in the Subscription Details page is only available to the Billing Administrator.
Additionally, for paid customers, the Invoice History page is only available to the Billing Administrator.
• Support Contacts: Users who are the designated support staff of the Rollbase instance. This option is only
available for paid customers. The users assigned as Support contacts handle the product support related
jobs that include:
Monitoring setup
Administrators can monitor runtime status and systems logs for a tenant by navigating to Setup Home >
Monitoring.
The following options are available on the Monitoring page:
• Runtime Status: Links to show status of recently performed system jobs and active user accounts. The
following runtime status monitoring options are available:
• System Jobs: Displays current information about currently running system jobs (such as a spreadsheet
import) running in asynchronous mode.
• Users Online: Displays currently active user sessions, SOAP API sessions, and REST API sessions.
In the Users Online page, you can view user account information, login time, and IP address. You can
also terminate a user/SOAP API/REST API session using the Kill action.
• Portal Users Online: Displays currently active portal user sessions.
• System Logs: Links to show system and access logs. The following logs are available:
• System Events Log: Displays important customer tenant related logs, including information about
application installation and deletion, large data imports, etc.
• System Errors Log: Displays any Java exceptions stored by Rollbase for this customer tenant—except
those caused by formula errors. These records can be viewed for troubleshooting.
Note: Additionally, you can also create reports based on system errors by selecting System Error Log
as the Object Type to report on.
Note: For an administrative user to access your account, you must enable support access (see Enabling
an administrative user to log into a customer tenant on page 761).
• API Logs: Links to SOAP, REST, and JSDO API log files. The following logs are available:
• SOAP API Log: A log that records every SOAP API call.
• REST API Log: A log that records every REST API call.
• Progress Data Service API Log: A log that records every JSDO API call.
Note: You must select the Enable API Log check box from Setup > Administration Setup> Account
Settings to see detailed log records for API calls.
Support
To get product assistance, you can access the following Progress Rollbase support options:
• Help Me option on the Rollbase footer: To read the online Rollbase product documentation.
The online help contains the latest documentation and many useful features such as responsive design,
the ability to translate pages using Google translate (click the globe icon on the toolbar and give it time to
load), the ability to print pages, and search content.
Rollbase also provided PDF help that can be download and used offline. We recommend using the PDF
version only for printing, since the online help contains the latest information and has a better search
capability.
• Rollbase Forum option on the Rollbase menu (see The Rollbase menu on page 32): To initiate a product
feature discussion and participate in an ongoing discussion in the forum.
This option opens the Progress Community page, where you can participate in forums, submit a support
request along with a bug report if applicable. You can also monitor previously posted requests and add
comments to them for further follow up by Progress staff. We generally respond to support tickets within 24
to 48 hours.
• Support option on the Rollbase footer: To open the Progress support page. You can use this page to access
all product support and services. For example, Progress Support Knowledgebase, community, downloads,
and log/update a support request, and education services.
• Subscription Details option on the Rollbase menu (see The Rollbase menu on page 32): To view your
subscription details. This option opens the About Your Account page in which you can upgrade/update
your account and view the following account details:
• License information
• System information
• System Files
• Latest Progress Rollbase Release
• Your Settings
• Your Rollbase Build Details
Language support
Rollbase supports multiple languages simultaneously in the same tenant and in the same application. This
means that multiple users who speak different languages can use exactly the same application and interact
with it in their own language.
Administrators can optionally select additional languages on the Account Settings page to support multilingual
applications on a tenant. There is one base language, which is the default language for applications on that
tenant, and administrators can add additional languages. The maximum number of additional languages allowed
on a tenant depends on the license agreement. Progress recommends that you do not change the base
language after setting it initially because changing it can have unintended consequences.
On Rollbase Private Cloud, administrators can enable support for languages that Rollbase does not support.
See Adding support for other languages in Private Cloud on page 817 for details.
Administrators can translate applications to any supported language. Translating an application includes loading
translations provided for Rollbase, adding translations for the application's user interface components, and
translating application data. See Translating applications on page 818 for more information.
Rollbase uses the tenant base language for all user accounts by default. Each user can switch to another
supported language by editing their profile on the My Settings page.
Rollbase supports the following languages and provides translations for Rollbase-generated text on setup and
application pages:
• Dutch
• English
• French
• German
• Portuguese
• Spanish
• Chinese (simplified)
• Japanese
• Korean
• Norwegian
• Russian
• Arabic (Rollbase only provides translations for text on application pages that use the New UI)
• Hebrew (Rollbase only provides translations for text on application pages that use the New UI)
• Greek (Rollbase only provides translations for text on application pages that use the New UI)
When a user selects one of the above languages as their base language, Rollbase-generated text appears in
that language. When a user logs in with the language set to Arabic or Hebrew, the user interface automatically
renders as right-to-left.
Rollbase includes the foundation to support the following languages. You can add the languages to the tenant
and you can provide translations for your applications, but Rollbase does not include any translations for them:
• Turkish
• Italian
The following screen shows a setup screen with the user's language set to French:
The following screen shows an application page with the user's language set to Arabic:
Note: Language resource files are encoded as UTF-8 with BOM. When you edit a language resource file, be
sure to retain this encoding. It is the only supported encoding for this type of file. Some text editors, such as
Notepad++, will display the encoding for the open file.
Each translation is a property name and value in the language resource file. Many property names include one
of the following namespaces:
• newui.eu — Indicates that the translation is only used on application pages (New UI only).
• newui.admin — Indicates that the translation is only used on setup pages and for items on application
pages (New UI only) that are only visible to administrators
You can translate only application page properties, only administrative properties, or all properties. For example,
to translate only end-user visible text on application pages that use the New UI, you only have to provide
translations for properties with the namespace newui.eu. This greatly reduces the amount of effort required
for the translation; you only have to translate about 1000 properties instead of translating over 5000 properties
were you to translate everything.
The following excerpt from the file lang_fr.properties shows how properties with and without namespaces
appear for the French translation:
newui.eu.AND = AND
newui.eu.And_By = Et par
newui.admin.Animate_Chart = Animer le graphique
newui.admin.Annotation_Type = Type d'annotation
Anonymous = Anonyme
Anonymous_Access = Accès anonyme
Translating applications
You can translate an application if one or more additional languages are assigned in the tenant's Account
Settings. Translations are limited to languages available in the account settings. To translate an application,
you need to translate its component names and labels, such as the application name, object names, and field
labels, as well as the application data input by users. See Translating application data on page 827 for more
information about translating application data. In addition, you can create multilingual string tokens to use in
templates and formulas. This allows any text displayed by the code to appear in the current user's language.
See Creating and using multilingual string tokens on page 825 for more information.
There are two methods for translating application component names and labels:
• Translating them individually on setup pages. Progress recommends using this method when you are
updating an existing, translated application by adding objects, fields, views, or other components. You can
also use this method when creating a new application from scratch, adding translations as you create
components. See Translating individual components for examples. See Translating application component
names and labels on page 821 for a complete list of what you can translate for each component type and
where to translate each.
• Translating all application component names and labels by uploading a spreadsheet containing the
translations. Progress recommends using this method to update an existing application that has not been
translated. This is a good method to use when a third party, such as a translation company, will be providing
the translation. You can also use this method when adding objects to an existing translated application, to
translate the components automatically created during object creation. See Translating component names
and labels using a spreadsheet for details.
Translate page names, page tab titles, and section titles on the Page Properties screen. Access the Page
Properties screen from the Pages section of an object definition screen. For example, the following screen
shows translations for a page name.
Note that Rollbase renders languages that are written from right to left, such as Arabic in the above screens,
automatically from right to left.
To translate values for picklists, multi-select picklists, radio buttons, and groups of check boxes, you must first
save them in the base language and edit them to specify the field values for additional language fields. See
Picklist, radio button, and group of checkboxes fields for an example.
Column Content
A Original ID of item
B Component's name
C Component's type
Do not modify content of the first five columns as that can render the spreadsheet useless. Only change
translations in the column F using text in column E as a reference. The following screen shows a portion of a
translation spreadsheet with a base language of English and a translation in Spanish:
3. Select one of the available languages and click Download the current translation as XLS spreadsheet.
4. Update the spreadsheet as described above, adding translations to column F.
5. Save the XLS file to your local disk.
6. Navigate to the Translation screen, verify that the correct language is selected, and upload the XLS file.
Rollbase reads the file once to translate application components and keeps the file as an application resource.
7. If you later modify the translations in the XLS file, follow steps 4 through 6 using the updated file. You can
then re-publish the application or serialize it to XML.
The following screen shows an application that has been translated to Spanish. Note that existing application
data has not yet been translated in this example. See Translating application data on page 827 for information
about translating data.
Tab Tab Name, Description New Tab screen or Edit Tab screen. See Creating
tabs and pages on page 490.
Portal Portal Name, Description New Portal screen or Edit Portal screen. See
Creating a portal on page 596.
Role Role Name, Description New Role screen or Edit Role screen. See
Creating and editing user roles on page 726.
Hosted File File Name, Description New Hosted File screen or Edit Hosted File
screen. See Managing hosted files on page 617.
Batch Job Job Name New Batch Job screen, Edit Batch Job screen.
See Batch jobs on page 811.
Object Singular Name, Plural Name, New Object screen, Edit Object screen. See
Record Name, Description Creating and managing objects, fields, and
relationships on page 297. When you create a new
object definition, Rollbase automatically creates
pages, views, and fields for that object. These
components should also be translated.
Field Field Label, View Header, New Field screen, Edit Field screen. See Creating
Field-Level Help , Values (for and managing objects, fields, and relationships on
picklists, multi-select picklists, page 297. To translate values for picklists,
radio buttons, and groups of multi-select picklists, radio buttons, and groups of
check boxes only) check boxes, you must first save them in the base
language and edit them to specify the field values
for additional language fields. See Picklist, radio
button, and group of checkboxes fields for an
example.
Relationship Singular Name and Plural New Relationship screen, Edit Relationship
Name for each side of the screen. See Creating and managing objects, fields,
relationship and relationships on page 297.
Page Tab Name, Section Title Properties screen for the page, page editor. See
Pages, the page editor, and grid controls on page
490.
HTML component on Language Page editor. See HTML component on a page for
page more information.
View View Name New View screen, Edit View screen. See Creating
and editing views on page 561.
Template Template Name, Subject (email New Template screen, Edit Template screen.
template only) See Working with templates on page 350.
Chart Chart Name, X Axis Label, Y New Chart screen, Edit Chart screen. See
Azis Label Working with charts on page 471.
Report Report Name, Description New Report screen, Edit Report screen. See
Working with reports on page 448.
Gauge Gauge Title New Gauge screen, Edit Gauge screen. See
Working with gauges on page 475.
Trigger Trigger Name New Trigger screen, Edit Trigger screen. See
Trigger overview on page 381.
Workflow Process Process Name New Workflow Process screen, Edit Workflow
Process screen. See Workflow processes on page
421.
Workflow Status Status Name New Workflow Status screen, Edit Workflow
Status screen. See Workflow status on page 414.
Workflow Action Action Name New Workflow Action screen, Edit Workflow
Action screen. See Workflow actions on page 415.
Button Display Label New Button screen, Edit Button screen. See
Using buttons on pages on page 515.
Conversion Map / Map Name New map screen, Edit map screen. See Converting
Import Map records on page 329 and Importing data on page
699.
Note: The additional language fields do not appear unless the field definition has been saved. Do not change
or override base language fields (which are included by default).
For example, suppose you support two languages in your tenant, English (base language) and Portuguese
(additional language). If you have a picklist item, Autumn, in the base language field and in Portuguese, you
want it to appear as Outono, specify the following in the Portuguese language field:
Autumn: Outono
While you could use a multi-lingual string token to accomplish the same results, this method is better when the
text only appears in one place in the application. If you want to use the same text in multiple languages in
several places in the application, you can use string tokens. See Creating and using multilingual string tokens
on page 825 for more information.
The following screen shows an HTML component that uses the string token:
Rollbase will render the above HTML component based on the user's language setting. The screens below
show the resulting text when the user's language is set to English and when the user's language is set to
German:
The screen below shows a field with values in English, Arabic, and Spanish:
Users can mix left-to-right and right-to-left languages in the same field, and Rollbase will render each in the
correct direction. The screen below shows the Arabic field with English text added:
When viewing a record (either on a View page or where the record is in a list of records), the field value is
displayed in the user's selected language. For example, the screen below displays the Spanish value for the
Title field:
To enable users to enter data in multiple languages, select the This field allows storing multiple values for
supported languages check box when creating or editing a field. You must select this check box for each
field that you want to support values in multiple languages.
Note: Only the users with access to shared.properties file of Rollbase Private Cloud instance can enable
the use of Google Apps.
1. Create a new Project in Google Developers Console for Rollbase. For information on creating a project,
see https://developers.google.com/console/help/new/#creatingdeletingprojects.
2. Activate Calendar API, Drive API, Google+ API, and Gmail API in your Project. These APIs must be included
in your project if you want to use Gmail and sync Google Calendar in Rollbase. For information on activating
APIs, see https://developers.google.com/console/help/new/#activatingapis.
3. Set up OAuth 2.0 and create a new Client ID for Rollbase Private Cloud. For information on setting up OAuth
2.0, see https://developers.google.com/console/help/new/#generatingoauth2.
In the Create Client ID dialog, you must provide the following values:
1. Select Web application as your APPLICATION TYPE.
2. If prompted with the Consent Screen, provide the appropriate account details in the consent screen
and click Save. The Create Client ID page reappears.
3. In the AUTHORIZED JAVASCRIPT ORIGINS field, specify the javascript origin of the Rollbase Private
Cloud URL, http://<computer-name>:<port-number>/.
For example, if your Rollbase Private Cloud URL is
http://localhost:8830/router/login/loginPrivate.jsp, then you must specify and authorize
http://localhost:8830/ as your javascript origin.
4. In the AUTHORIZED REDIRECT URIS field, specify all the Rollbase server URLs in the format:
http://<computer-name>:<port-number>/<server-name>/router/servlet/oauth2callback.
For example, if your Rollbase Private Cloud URL is
http://localhost:8830/router/login/loginPrivate.jsp, then you must specify and authorize
http://localhost:8830/router/servlet/oauth2callback your redirect URI.
4. Copy the CLIENT ID and CLIENT SECRET values, and paste them as values for GoogleClientId and
GoogleClientSecretKey properties in your Rollbase Private Cloud's shared.properties file.
5. Log into Rollbase Private Cloud.
6. Navigate to Personal Setup and configure your Google Apps account for Rollbase. For more information
about Google Apps Settings, see Personal setup on page 791.
Note: After the Rollbase Private Cloud's shared.properties file is updated with the aforementioned
properties, all the users in the Rollbase tenant will be able to configure their Google accounts and use
Google Apps in Rollbase.
The topics in this section describe how to install, configure, and administer Rollbase Private Cloud.
• Introduction
• Installation
• Administration
• Multi-server environments
Introduction
® ®
Progress Rollbase Private Cloud is a fully functional version of the Rollbase platform that you can download,
install and host on your own servers or on another cloud platform. A Private Cloud system includes all of the
design and runtime functionality of hosted Rollbase. Rollbase Private Cloud supports single server and
multi-server deployments, as defined by your license, see
http://www.progress.com/products/rollbase/pricing/rollbase-private-cloud for pricing details.
Private cloud end-users can be individuals or departments within your organization or others to whom you sell
Rollbase applications and services. You can create separate tenants to keep sets of applications separate and
secure for different groups of users. Each customer tenant will have its own login account.
Evaluating Rollbase
You can evaluate Rollbase Private Cloud as long as you want at no cost. You simply register, download and
install the software with no license. Without a license, Rollbase enforces the following limitations:
• Every page displays the notification, Free Rollbase Evaluation.
• A maximum of one database instance (MySQL, OpenEdge, DataDirect Cloud, MS SQL Server, or Oracle)
and one Rollbase instance
• A maximum of two Customers tenants, with two User accounts and 5000 object records (total for all objects)
in each tenant.
• Progress Technical Support only provides answers to installation-related questions. However, you can join
Progress Community Rollbase Technical Users forums, which provide answers to a variety of questions.
Runtime Architecture
Rollbase Private Cloud requires the following runtime components:
• One or more Java Web application server instances to which Rollbase components are deployed (The
®
installer includes the Progress Application Server (PAS)). PAS is based on Apache Tomcat but is tailored
to be secure for use in production systems. PAS also simplifies the process required to create and run
multiple Rollbase components on different hosts. Each PAS shares the executables and libraries of a
common Tomcat server, but each instance is a separate process, running in a separate JVM, with its own
configuration, such as for ports, security framework, and Web applications.
• One or more database instances. The database can be on its own host or be collocated with Rollbase
components. The following image illustrates a single server Rollbase Private Cloud architecture with Rollbase
auxiliary components identified in the call-out.
If you choose not to use PAS, you will need to install and configure your Web server to work optimally with
Rollbase. Since Progress certifies use of Apache Tomcat with Rollbase, the documentation provides PAS and
Tomcat-specific information. If you are using another Web server, refer to that documentation to find the
equivalent functionality.
The multi-server architecture supports multiple instances of all components, which can be distributed for
performance and scalability. See Planning your multi-server architecture on page 902
The first Rollbase instance you install is a Master Server, from which you can:
• Create and manage customers (tenants).
• Monitor system components.
• Setup ISV partners.
• Manage a shared applications directory and a support portal.
• Run applications for your own business, such as CRM, bug tracking, and customer support.
See Administration for more information.
Progress offers the following installation package options:
®
• The Rollbase Private Cloud installer for Microsoft Windows and Linux operating systems. In addition to
Rollbase, you can optionally install an OpenEdge database, and the Pacific App Server, a pre-configured
instance of Tomcat. See Using the Rollbase installer on page 837.
• Zipped packages allow advanced users to install Rollbase components manually. This method of installation
works best for multi-server environments or for operating systems not supported by the Private Cloud
Installer. See Setting up Rollbase manually on page 842.
Licensing
Under the terms of the Rollbase license you cannot reverse-engineer or modify the Rollbase software. You
can, however, customize the appearance of your web pages by replacing standard Rollbase resource files
(images, icons and CSS) with your own files.
Each Progress Rollbase Private Cloud license is associated with a particular domain name, such as
www.mycompany.com. You must purchase a new license to use a different domain name. Each Private Cloud
license has an expiration date, after which Rollbase will no longer run. The expiration date includes a window
of time to renew the license.
You can delete the license file to switch to the free evaluation edition. However, if you have more than two
tenants, you will get a license error because a free evaluation only allows two tenants.
See Private Cloud pricing options For enterprise and ISV pricing or to purchase, see the contact information
on our website.
• The database cannot be used for OpenEdge (PUB schema) ABL-accessible tables.
• You cannot add SQL tables to this database.
System Console Used to monitor and manage all To be installed in the Master Server
Rollbase components, such as the only.
creation of a new Customer, and
includes the Application Directory
portal.
ISV Partner Gives your ISV partners limited To be installed in the Master Server
access to your Master Sever. only.
CRM Simple CRM application that can be Can be installed as desired from
further customized and used as a your Application Directory portal.
starting point.
Note: Starting with Rollbase 4.2, Rollbase Private Cloud includes a beta quality open source library-based
implementation.
4. Copy the Aspose.Words.lic license file into the config directory of your Rollbase installation.
For example, if you used the installer, installed PAS, and accepted the default folder, this location would
be Progress\Rollbase\Pas_Instance\rollbase\config.
Note: Starting with Rollbase 4.2, Rollbase Private Cloud includes a beta quality open source library-based
implementation.
Rollbase uses Aspose.Pdf for Java to process PDF writable forms and to extract plain text from PDF documents
for search indexing.
To use Aspose.PDF for Java with Rollbase Private Cloud, do the following:
1. Download and purchase the Aspose.Pdf for Java 9.3.1 from:
http://www.aspose.com/community/files/72/java-components/aspose.pdf-for-java/default.aspx.
2. Optionally, if you have a previous version of Aspose.Pdf for Java, you must remove the related .jar and
.lic files from the Rollbase directory.
3. Copy aspose-pdf-9.3.1-jdk16.jar into the Web server lib directory.
For example, if you used the installer, installed PAS, and accepted the default folder, this location would
be Progress\Rollbase\Pas_Instance\common\lib.
4. Copy the Aspose.Pdf.lic license file into the config directory of your Rollbase installation.
For example, if you used the installer, installed PAS, and accepted the default folder, this location would
be Progress\Rollbase\Pas_Instance\rollbase\config.
Installation
Where and how you install Rollbase depends on the architecture you have selected, whether you are require
a single server or multi-server architecture, and which database(s) you plan to use. There are two ways to set
up Rollbase:
• Use the Rollbase Private Cloud installer (for Windows or Linux operating systems)
The installer gives you the option to install a Progress OpenEdge Database and PAS, a pre-configured
version of Tomcat. If you don't use these, you must install a Web server and a database separately and
configure them to work with Rollbase. The OpenEdge and PAS instances installed by the Rollbase installer
are not set up as Windows services. To configure the installed PAS instance as a windows service or Linux
daemon, see Installing and running an instance as a Windows service on page 906 or Installing and running
a PAS instance as a Linux daemon on page 907.
You can use the installer in one of three modes:
• Default mode — A mode that uses a series of dialogs to guide you through the installation.
• Console mode — A mode that uses text-only prompts to guide you through the installation.
• Silent mode — A mode that enables the installer to run without any user interaction.
The first Rollbase instance you install and configure becomes the Master Sever. To use multiple Rollbase
instances or auxiliary components, see Multi-server Edition. In a multi-server configuration, you will log in to
the Master Server for administering your Private Cloud deployment.
Note: Default installations of third party software often are configured to use minimum security. Please review
vendor websites and documentation for recommended security configuration, such as changing default
administrator passwords.
Prerequisites
Before you can download and install Rollbase Private Cloud:
• You need a database and a compatible JDBC driver. The Rollbase Private Cloud installer allows you to
install Progress OpenEdge, which includes a JDBC driver. To use a different database, that database must
be configured with an account that Rollbase can access. The account should have all permissions. Configuring
a supported database on page 845 describes the scripts Rollbase provides to create the necessary tables.
• On Windows, you need to run all installation and startup scripts as an administrator. On Linux, you to run
all installation and startup scripts as root.
The following topics describe the detailed installation procedures:
Note: If you are upgrading from a release prior to 4.0, please read Upgrading Private Cloud to Version 4.X on
page 235 before running the installer.
1. From the Rollbase Private Cloud Downloads Portal, download the zip file for your operating system:
• Default mode, which uses a series of dialogs to guide you through the installation. See Installing Rollbase
using the default mode on page 838 for details.
• Console mode, which uses text-only prompts to guide you through the installation. See Installing Rollbase
using console mode on page 840 for details.
• Silent mode, which enables the installer to run without any user interaction. See Installing Rollbase using
silent mode on page 840 for details.
1. Run the installer executable and click Next to start the installation process.
2. Accept the Progress Rollbase License agreement and click Next.
3. Optionally, specify the location of your license file.
Without a license, Rollbase will run in evaluation mode. You can add a license at any time.
4. Click Next.
5. Specify a destination directory for the installation and a working directory for the OpenEdge database. If
you are using a different database, the working directory is not important.
Note: Do not use paths that contain spaces, such as Program Files.
6. Click Next.
7. Choose the database type you want to use for Rollbase.
• Progress Database — Allows you to use an existing Progress OpenEdge Database or have the installer
install one.
• Other Database — Select this to use one of the supported databases. You will need to configure it
yourself, as described in Configuring a supported database on page 845.
8. Click Next
9. For Server Details, enter the host name and port number for Rollbase. If you have a license, the host name
should match that in your license. If you elected to use an OpenEdge database, for Database Details, enter
details for an existing OpenEdge database or for a new one. If you want the installer to create the database,
check the box.
10. Click Next.
11. Choose the option to install the Progress Application Server (PAS) or to use an existing Tomcat installation.
If the latter, make sure the Tomcat instance is a supported version and is not running.
12. Click Next.
13. If you chose to install PAS, specify port numbers. You only need to change the port numbers if they conflict
with ports already in use on your network.
14. Specify Mail Server Details. Rollbase will use this mail server to send emails. It can be an organizational
mail server or email service such as Google (smtp.gmail.com, port 465) or Yahoo
(stmp.mail.yahoo.com, port 465). Values must be entered but can be changed later in the
shared.properties configuration file or in administrative setup. The shared.properties on page 926 file
will contain the values you enter here.
15. Specify the Administrator Details email. This email address will identify the first administrative user on the
system and must be a valid email address. This would typically be your e-mail address unless someone
else will be administering Rollbase.
16. Specify Email Account information. Rollbase will send system emails from this account. Values must be
entered but can be changed later in the shared.properties configuration file. For example, you might
want to set up an account named something like noreply@domain.com. The shared.properties on page
926 file will contain the values you enter here.
• User Name — Email server user name used to send system messages
• Password — Email account password
• Specify as much memory as possible for initial and Max memory pools
• Disable system persistence
• Ensure proper UTF-8 support
• Specify <session-timeout> node value
21. If you are using a new Tomcat instance that you installed yourself, set JRE_HOME as described in Set
Environment Variables. Note that the installer will have already set ROLLBASE_HOME.
3. Follow the prompts as directed. See Installing Rollbase using the default mode on page 838 for a description
of the information you need to enter.
4. If you did not choose to install PAS, verify that your Tomcat installation is configured as described in Using
your own instance of Tomcat on page 842, including:
5. If you are using a new Tomcat instance that you installed yourself, set JRE_HOME as described in Set
Environment Variables. Note that the installer will have already set ROLLBASE_HOME.
After installing Rollbase Private Cloud, proceed to Postrequisites on page 841.
4. If you did not choose to install PAS, verify that your Tomcat installation is configured as described in Using
your own instance of Tomcat on page 842, including:
5. If you are using a new Tomcat instance that you installed yourself, set JRE_HOME as described in Set
Environment Variables. Note that the installer will have already set ROLLBASE_HOME.
After installing Rollbase Private Cloud, proceed to Postrequisites on page 841.
Postrequisites
After installing Rollbase Private Cloud:
• If you are using a database other than OpenEdge, you need to run the scripts for that database and enter
information about it in the databases.xml file. Then, you can start the runtime components as described
in Starting components and logging In on page 851.
• The default Web server configuration may not completely secure your Web server. For example, depending
on your environment, unauthorized users could access your data on the servers. Progress recommends
that you optimally secure your Web servers by conforming to the benchmarks given by Center for Internet
Security (CIS). For information on CIS security benchmarks, see
http://benchmarks.cisecurity.org/downloads/browse/?category=benchmarks.servers.web.
• Use an instance of Tomcat dedicated to Rollbase. Download a version of Tomcat that Progress certifies.
Note:
If you are using Tomcat 8 or higher, you must prevent Tomcat from scanning the Rollbase JAR file by adding
the following line to the context.xml file in the conf folder of the Tomcat installation:
• Start by using the default port 8080 for Tomcat. Later you can add Apache as a gateway to your Tomcat
instance (Apache typically runs on port 80).
• Follow Apache's installation instructions. Once installed, start Tomcat and point your browser to
http://localhost:8080 to make sure that you see the Tomcat welcome page. Stop Tomcat once confirmed.
• Run Tomcat from the command line during installation. To do this open a command prompt window and
go to the bin directory within your Tomcat folder and run tomcatX.exe (where X is the main version number
of your Tomcat installation).
• The default Tomcat installation is optimal for development purposes. For deployment, you will likely want
to increase security. See the Tomcat documentation for details.
• Set Tomcat up to use as much memory as you can spare for its initial and maximum memory pools: for
example, 1500MB in production on a 32-bit machine (you can more than double this for a 64-bit OS).
However, f you set memory requirements too high Tomcat will fail to start.
• Disable session persistence: un-comment the section of conf/context.xml related to session persistence.
• For proper UTF-8 support, add server.xml include a URIEncoding attribute with value of UTF-8 to all
Connector nodes:
• To ensure that portal user log in sessions last long enough, update the <session-timeout> node value in
the web.xml configuration file in the conf directory. The default timeout is 30 minutes. The appropriate
value depends on your application and end-users usage patterns.
• After you have verified that the settings work well, you can set up the Tomcat instance as a Windows Service
or Linux Daemon. See your Tomcat documentation.
• Periodically delete files from Tomcat's log directory.
If the host on which you want to install Rollbase Private Cloud has a Windows or Linux operating system, using
the installer instead of installing manually allows you to avoid a number of manual configuration tasks.
The high-level steps required to install manually include the following:
1. Verify that Tomcat and the database you plan to use with Rollbase Private cloud are installed and configured
as described in Using your own instance of Tomcat on page 842.
2. Verify that Tomcat is stopped and not restarted until you finish all necessary steps for installing and configuring
Rollbase. If you've installed Tomcat as a Windows service, run tomcat8w.exe to stop the service (or
navigate to services to stop it manually). For Ubuntu Linux platform, run the shutdown.sh script.
3. Download and unzip Rollbase components.
4. Set environment variables.
5. Edit the shared.properties file
6. Edit the components.xml file
7. Run the Rollbase script for your database type and edit databases.xml.
8. Start the runtime components and log into Rollbase.
1. From the Rollbase Private Cloud Downloads Portal, download the following files to your server:
3. Preserving the folder structure, unzip rollbase.zip into the directory you created.
4. Unzip webpps.zip into your web server deployment folder. For Tomcat, the webapps folder in its installation
directory.
5. Unzip lib.zip in the web server library directory. For Tomcat, the lib folder in the Tomcat installation
directory.
On Windows Machines
To set the ROLLBASE_HOME environment variable on a host with a Windows OS:
1. In Windows Explorer, right-click Computer or My Computer and select Properties.
2. Click Advanced System Settings.
3. Click Environment Variables.
4. Under the list of System variables, click New
5. Enter ROLLBASE_HOME for the Variable name and the full path to the root directory of your Rollbase
installation for the Variable value. For example, if you unzipped rollbase.zip in a C:\Progress
directory, the path would be C:\Progress\rollbase.
6. Click OK.
7. Under the list of System variables, click New
8. Enter JRE_HOME for the Variable name and the path to the jre directory of your Java installation for
Variable value. For example, if the Java installation is in C:\Java, the path would be
C:\Java\jre<version>.
On Linux Machines
On Linux or UNIX based machines use the commands ROLLBASE_HOME= and JRE_HOME=. For example,
using the bash shell and assuming a location of usr/share/rollbase, the command would be as follows:
export ROLLBASE_HOME=/usr/share/rollbase
• MySQL
• OpenEdge Database
• Oracle Database
• SQL Server Database
You should create a separate database user account for Rollbase. To improve database security Progress
recommends that you only give the following access privileges to this account: SELECT, INSERT, UPDATE
and DELETE.
The following topics describe how to configure the supported databases:
MySQL
If MySQL is on the same host as Rollbase, or is on another server reachable over the local network, run the
create_mysql.sql script from the sql folder in the Rollbase directory of your installation as described in
Create tables on page 846.
If you do not have MySQL installed, download and install it, using the following options:
Create tables
In the ProgressRollbase\sql folder of your Rollbase installation, locate the create_mysql.sql file and
comment out the sections that do not apply to MySQL. If you installed PAS, this folder will be
Pas_Instance\Rollbase\sql.
You can run the script as follows:
• On Linux or Unix machines use a Terminal service to run the mysql command, then use the source
command to run the create_mysql.sql script.
• On Windows machines, use the mysql command line tool or install MySQL Workbench. to use the
Workbench:
1. Start from the Workbench Central screen and click New Connection.
2. In a dialog enter a name for the new connection and specify a password for the root user.
3. Open the newly created connection by double-clicking it.
4. From the menu select File > Open SQL Script. Locate and open the create_mysql.sql file in
the location where you unpacked rollbase.zip.
5. Use the menu Query > Execute (All or Selection) to run the script from the opened SQL file and create
the Rollbase database rb_dbo and all tables.
6. Click Refresh in the SCHEMAS sidebar area. You should see an rb_dbo database and a list of tables
inside, such as rb_act_trail, etc.
OpenEdge
You can install a dedicated OpenEdge database instance Using the Rollbase Installer. The Rollbase installer
sets up and configures the dedicated instance for you. To use an existing OpenEdge database, it must be the
OpenEdge Enterprise RDBMS package.
When using OpenEdge database with Rollbase, Progress recommends that you become familiar with the
physical storage structures of your Rollbase OpenEdge RDBMS instance and the many configuration parameters
for the database. This helps you to ensure an optimal performance of your Rollbase applications and reliability
of its data. To learn about OpenEdge database, see the OpenEdge Getting Started: Database Essentials and
OpenEdge Data Management: Database Administration manuals in your OpenEdge documentation set.
Additionally, if you need assistance with OpenEdge database management or administration tasks, you can
contact Progress professional services or one of the third-party Progress consulting partners.
Use the OpenEdge proenv utility to execute a script provided by Rollbase. This creates the following:
• A database and the following related artifacts in a specified folder inside your OpenEdge Work directory
• A structure definition file
• A configuration parameter file
• A database with a transaction log and data extents for four areas
Note: OpenEdge has a variable length VARCHAR data type but SQL does not. Therefore, the OpenEdge Data
Dictionary definition of a VARCHAR(10) field can hold 1, 5, 10, 100, 1000, etc. characters. OpenEdge's ABL
can read or write any sized string, but an attempt to access this with SQL produces an error if the data is greater
than 10 characters. Therefore, you should set the character value of (N) large enough to prevent such errors.
• -dbhome homefolder: The folder inside the WRK directory where the Rollbase database is created.
The default value is oe_rollbase_db. For example:
Upon successful completion, you should see output similar to the following:
Database home is "C:\\OpenEdge\WRK\oe_rollbase_db"
Setup for database oe_rbdb COMPLETED OK
11-12-2013 11:34:51.38
You can use the command proenv> create_oedb.bat -h to display the usage information for the
script's arguments.
Oracle
To use Oracle, download and install the latest version from http://www.oracle.com if you do not already have
an Oracle instance available. The Rollbase Private Cloud download includes the Progress DataDirect JDBC
driver for Oracle, RBoracle.jar.
Use an existing Oracle user (schema) or create a new Oracle user. Then run the create_ora.sql script to
create all of the required Rollbase tables:
sqlplus> @create_ora.sql
Editing databases.xml
The database.xml file specifies the URL, username, password, and other properties that Rollbase uses to
access the database. You need to edit this file manually in the following circumstances:
• If you did not use the Rollbase installer
• If you used the Rollbase installer, but did not choose to use the OpenEdge database
The database.xml will be in one of the following locations:
• If you used the installer and had it install PAS:
>InstallationDir<\Rollbase\PAS_Instance\rollbase\config
• If you used the installer and did not have it install PAS:
• If you are installing manually from zip files, the config folder in the location where you extracted
rollbase.zip.
Edit the file as follows:
• Database name
• Driver
• URL (Make sure that no white space exists after the URL and before the </Url> tag.)
• DbUser (Enter credentials for the account used to execute the Rollbase create_oedb script.)
• Password
This example shows how to specify a JDBC driver and URL to connect to a MySQL database named
RB_DBO:
This example shows how to specify a JDBC driver and URL to connect to an OpenEdge database.
Rollbase includes the Progress DataDirect JDBC driver file openedge.jar. The example uses
variables that are described below:
<Database name="RB" isDefault="yes" isExternal="no"
MinConnections="3" MaxConnections="10"
MaxInUseConnTimeMins="30" MaxNotUsedConnTimeMins="1"
MaxConnLifetimeMins="60" TxIsolation="2" useTxRecovery="yes">
<Driver>com.ddtek.jdbc.openedge.OpenEdgeDriver</Driver>
<Url>jdbc:datadirect:openedge://localhost:8911;databaseName=rbdb</Url>
<!-- -->
<DbUser>dbadmin</DbUser>
<Password>dbadmin</Password>
</Database>
In the JDBC URL, the example uses localhost:8911;databaseName=rbdb for the hostname,
port number, and database name. Note the following:
• hostname — Use localhost if the database resides on the same machine as Rollbase, otherwise
use the actual host name.
• port — Use the port number on which the Rollbase database was started before executing the
create_oedb script.
• databaseName — Use the name of the Rollbase database created when executing the
create_oedb script.
This example shows how to specify a JDBC driver and URL to connect to an Oracle database:
<Database name="RB" isDefault="yes" isExternal="no"
MinConnections="3"
MaxConnections="10" MaxInUseConnTimeMins="30"
MaxNotUsedConnTimeMins="1" MaxConnLifetimeMins="60"
TxIsolation="2" useTxRecovery="no">
<Driver>com.rb.jdbc.oracle.OracleDriver</Driver>
<Url>jdbc:rollbase:oracle://localhost:1521;ServiceName=RB_DBO;
ConnectionRetryCount=10;ConnectionRetryDelay=10</Url>
<DbUser>root</DbUser>
<Password>my_password </Password>
</Database>
This example shows how to use a JDBC driver and URL to connect to a SQL Server database:
<Database name="RB" isDefault="yes" isExternal="no"
MinConnections="3"
MaxConnections="10" MaxInUseConnTimeMins="30"
MaxNotUsedConnTimeMins="1" MaxConnLifetimeMins="60"
TxIsolation="2" useTxRecovery="no">
<Driver>com.rb.jdbc.sqlserver.SQLServerDriver</Driver>
<Url>jdbc:rollbase:sqlserver://localhost:1433;
databaseName=RB_DBO;
ConnectionRetryCount=10;ConnectionRetryDelay=10</Url>
<DbUser>root</DbUser>
<Password>my_password</Password>
</Database>
Configuring PD4ML
You can configure an HTML report to render as a PDF document during runtime. See PDF report options for
HTML Template reports on page 452 for more information.
PD4ML is a tool that uses HTML and CSS (Cascading Style Sheets) to generate PDF. You can control PDF
page size, orientation and page breaks, dynamic headers, footers, and page numbering.
After you install Rollbase, you must follow the below steps to configure PD4ML.
1. Run pd4font.properties generation command — java -jar pd4ml.jar -configure.fonts
/path/to/my/fonts/
As a result, it will produce pd4font.properties file at /path/to/my/fonts.
2. Set the FontDirectory shared property as /path/to/my/fonts/ directory. See shared.properties on page
926 for more information.
For example, if you run the java -jar pd4ml.jar -configure.fonts C:\Windows\Fonts command
on your windows machine, you must set the FontDirectory shared property as C:\Windows\Fonts.
Note: To start Tomcat on Windows, you need to be logged in as an administrator using an account that has
read and write permissions for the Rollbase installation directory.
1. If necessary, start the database. If you used the Rollbase installer and had it install OpenEdge, the database
should be running. You can verify by doing the following:
a) Open a command prompt (on Windows systems, run it as an administrator).
b) Change directories to the oe_rollbase_db folder of your installation. If you used the default location,
this location is Progress\WRK\oe_rollbase_db.
c) If the database is running, you will see a rbdb.lk file. If not, run the startdb script.
• If you used the Rollbase installer and installed PAS, open a command prompt as an administrator,
navigate to the Pas_Instance\bin folder, and run tcman start.
• If you installed Tomcat yourself, open a command prompt as an administrator and run the Tomcat
startup.bat script located in the bin folder of the Tomcat installation.
3. Enter the URL for your Web server in a browser. If you are using PAS, use
http://localhost:8830/router/login/loginPrivate.jsp or https://localhost:8831/router/login/loginPrivate.jsp, which
redirect you to the Rollbase login page. If you installed Tomcat using the default port, use http://localhost:8080
.
The Rollbase login page (or Tomcat home page if you are not using PAS) should open. If it does not, check
to make sure that JRE_HOME is set properly and that you have administrative privileges.
4. Log in using the temporary password from the Rollbase welcome email. When Rollbase starts, this email
is sent to the administrative email user specified in the shared.properties file. Bookmark the URL for
future use.
5. Change the temporary password.
6. From the Applications drop-down menu, select System Console and verify that all components are running.
7. Verify that all applications described in Private Cloud Applications are successfully installed.
If you need to stop the OpenEdge database, run the stopdb.bat script in the work directory you specified
during installation. If you need to stop Tomcat, run the shutdown.bat script for standalone instances or stop
the service.
• If you have installed a new instance of Tomcat, start it by running the Tomcat startup.sh script, which
by default is found in $ROLLBASE_HOME%/apache-tomcat-8.0.30/bin.
• If you installed Rollbase using the installed and installed the PAS server, start it by running the
startup.sh script in the $ROLLBASE_HOME%/Pas_Instance/bin directory.
1. If you evaluated Rollbase in local environment using localhost as the host name, follow these steps to
use an external host name:
a) In components.xml, modify the URLs to point to the correct host name.
b) In the shared.properties file, modify the HostName entry to resolve #HOST_NAME tokens with the
correct host name.
1. Log in to Rollbase.
2. In the top right of the screen, click the arrow next to your profile and selectSubscription Details.
3. In the Your License section, click Update.
4. Click Choose File, navigate to the location of your license.xml file, select it and click Next.
5. Confirm that you want to update your license.
Your license will be updated without restart.
Troubleshooting
The following topics describe some common problems and what you can do to resolve them:
Installation issues
When the Rollbase installer is running, it logs messages to the standard output stdoutXXX.log file (or
hostname.XXX.log) in the Tomcat log directory (if Tomcat is running as a service) or to the application's
terminal window. For normal, error-free startup you should see output similar to the following (omitting some
Tomcat-generated messages):
==>> Master Server is starting
ROLLBASE_HOME=c:\rollbase\shared
Host name: localhost:8080
Release: 4.07
Master Server: Initialization completed successfully
These log messages are important for diagnosing installation and setup issues. Please include them in any
support request related to Rollbase Private Cloud installation.
If you encountered an error during installation, cannot start or login into your Rollbase server, the following
issues could exist:
Issue Resolution
The ROLLBASE_HOME environment variable is not set Make sure that the ROLLBASE_HOME environment
or is pointing to the wrong directory. variable is set and pointing to the correct directory.
See Set environment variables on page 844
The Tomcat server was not stopped while WAR files Stop Tomcat, delete the files from the Web server
were copied by you or the installer into the Tomcat deployment directory, as well as temporary files which
webapps directory. may have been created, including JSP cache files from
the working folder), recopy the WAR files and restart
Tomcat.
The host name specified in the shared.properties, Update the configuration files with the correct host
databases.xml and components.xml configuration name.
files does not match the actual host name you're using.
The shared.properties file contains invalid email Update the configuration file with valid email
credentials credentials.
The version date of rb_util.jar in the Tomcat lib If you installed manually, confirm that you unzipped
directory is inconsistent with the version and or date the Rollbase lib.zip into the Tomcat lib directory.
of the Rollbase WAR files.
Database issues Drop the rb_dbo table by running the SQL command:
drop database rb_dbo;
The WebAPI server is not running when you are Delete the Tomcat webapps/webapi directory and
logged into the Master Server and viewing Rollbase restart Tomcat.
Private Cloud component status.
If problems persist, feel free to use the Rollbase forum to ask questions and interact with other customers.
However, if the problem is related to the specifics of your local environment, you will probably need to involve
your IT staff.
License error
If you attempt to change the content of a license file, or if your license has expired, you will experience the
following:
Email issues
If you cannot send emails from your Rollbase Private Cloud instance, check the following:
• Make sure that all email-related global settings in the shared.properties file are correct.
• If you are behind a firewall (corporate or local), verify that the firewall allows outgoing SMTP connections.
• If you are using Gmail, verify that POP/IMAP Access is enabled in your Gmail settings.
If you still cannot successfully send emails, add a SkipEmails=true setting temporarily. This will dump all
emails to standard output (the console window of Tomcat log file). This also allows you to recover
system-generated passwords for new users.
Login issues
If you are having trouble logging in to Rollbase and you are sure that the Web server is running:
• Log in using the admin email address specified in your shared.properties file as the user name.
• The first administrative user's password is always set to welcome. You should change this password on
the first login.
If you run into a problem, fix your email settings, restart Tomcat, and use the Forgot Password link (available
from the login.jsp page). The system will reset your password and send another email to you.
In addition to creating the first administrative user account, the system will create a second administrative
account. Use this account if you are having problems logging in as the first administrative user. Delete or disable
this account when you no longer need it:
Administration
After installing Rollbase Private Cloud and performing the steps described in Starting Private Cloud Components,
you can begin using the master tenant. From the master tenant, administrative users can set up and manage
customer tenants and the Rollbase system. The topics in this section provide an overview of administration
and describe how to perform common tasks.
The procedures described in this section are the same for single server and multi-server environments. However,
to have access to full administrative capabilities, you need to log in to the master tenant.
Overview
Administrative users who set up customer tenants determine which applications are visible in each tenant. In
addition, the Rollbase interface is highly customizable, allowing you to replace the Rollbase logo and use your
own CSS styles.
When new users install Rollbase Private Cloud, the interface appears identical to the Progress-hosted Rollbase
interface, with the Pacific header and footer. However, you can remove these by editing shared.properties
and setting the PacificUIDisabled property to true.
Note: If your Rollbase environment is highly customized, the interface might differ slightly from the screens
shown in this documentation..
The application switcher allows you to navigate to installed applications and to setup pages.
Application switcher items include:
• Rollbase Home — The Rollbase application that contains the Rollbase calendar and the User object you
use to create user accounts
• Setup Home — A shortcut to the Setup home page, which provides access to administrative settings for
users with administrative privileges and to preinstalled applications
• Current App Settings — A shortcut to the setup page for the currently open application
• Organization Management — Contains Location, Department, Function, and Group objects, which
allow you to set up complex access control. See Location/department/function permissions on page 748 for
more information.
• System Console — Contains objects for managing customer tenants, subscribers (users of customer
tenants), and applications in the Application Marketplace
• ISV Partner — Contains objects for managing ISVs and partners who will resell applications
• Support Center — Contains objects for managing support of your customer tenants
• Approvals — Contains objects for adding approval workflows to your applications
• CRM — The sample CRM application that is also available in the public cloud. You can customize this
application to manage your own customers.
Note: Unloading a customer tenant from the production cache will log out all users currently logged into
that tenant, including any API sessions.
Note: Rollbase performs log operations in asynchronous mode. There might be a slight delay between a
when an event is logged and it is written to the file and is viewable.
• Select Reindex to reindex the Master Zone and/or a group of selected customers.
• Select Debug to set the ID of an object definition or customer for debugging purposes. When you set an
object definition ID, all SQL queries used to list records of this definition will be logged in the query.log
file. You can set a customer ID to log all SQL queries for that customer in query.log or to debug search
indexing for that customer in search.log.
To create a customer tenant, you create a Customer record. The Customer record specifies configuration
such as which applications users of that customer tenant can access, where their data will be stored, and the
level of security. From the Customer record, master tenant administrators can log into the customer tenant
with super-admin privileges (when this functionality is enabled). Some fields of Customer records, like the
address, can be edited by administrative users of the customer tenant through their Account Setting page.
The isActive formula field determines whether users can log in to the customer tenant. The default
implementation for the IsActive formula sets the Status of newly created customer records to Active. You
can change this formula if desired.
The Subscribers tab of the System Console application lists all users in all customer tenants. You cannot
create these records directly. Rollbase creates them when an administrator in the customer tenant creates a
User record. Subscriber records are useful for marketing, communication and other purposes such as sending
mass emails.
If you delete a Customer record, all records and hosted files from that tenant will be deleted. Deletion cannot
be reversed unless you have a backup file. You can restore customer data from a backup file created on a
different Rollbase server, see Moving and restoring customer tenants on page 864.
• Plan — select a pricing plan to determine default limits on the number of records, fields and other
resources allowed for this customer. See servicelevel.xml on page 925 for information on how to customize
these plans.
• Security Level — select the security level for the customer tenant. The customer can later change this
from their Account Settings page.
• Applications — select the applications to be installed into the new customer tenant. If this field does
not appear on the New Customer page, click Design This Page and drag Applications Lookup onto
the page from the Available Components list. The Rollbase application will be included by default. It
is required, do not remove it. For more information, see Installing applications in new tenants automatically.
• Email — specify the email address for the first administrative user for this customer tenant. If you do
not want the first user to have the Administrator role, you can change that user's role and create a
customer tenant with no administrators. See Creating a tenant with no administrative users on page 861
for details.
• Storage server — if more than one storage server is installed, select the storage server assigned to
this customer.
• Search server — if more than one search server is installed, select the search server assigned to this
customer.
6. Click Save to create the record, or click Save and New to save the record and create another Customer
record.
After several seconds or minutes (depending on the speed of your server) the system will finish the tenant
creation process by installing all selected applications. Until tenant creation is completed, the Login button on
the Customer view page is disabled. The page will be refreshed automatically when process is completed and
the button will be enabled. After this is finished, Rollbase sends a welcome email to the first administrative
user, who will then be able to log in to the new tenant. When an administrator of the master tenant logs in to
a customer tenant, they have super-admin privileges.
4. Follow the steps in Creating a new customer record on page 860 to create the customer tenant, selecting
the application with the Post Customer Create Script to be installed during customer creation.
The user whose email you enter when creating the customer will now have the custom role instead of the
Administrator role.
• View Logs: View log files associated with this customer, which can be useful for troubleshooting and
debugging. Requires view permission
• Login: Log into a customer tenant as a Super-Admin (invisible user with full access). This option requires
log in permission. The button only appears after the administrative user of the customer tenant enables
access for the master tenant users. For more information about enabling support access, see Enabling
an administrative user to log into a customer tenant on page 761.
• Edit: Modify the customer record. Requires edit permission.
From the More Actions drop-down menu, do any of the following:
• Delete: Delete the customer record and all customer's data. Requires delete permission.
• Convert: Converts the customer into another object.
• Clone: Clones the selected customer information to quickly create a new customer.
Note: Email and Login Name of the First Administrative User details cannot be same as that of the
existing customer.
• Send: To send email notifications using a selected template with attachments to selected users, as
required.
• Reindex: To update and reindex all free text queries for search for the customer.
• Sync Subscribers: Updates the subscriber information for the customer.
• Login As: Log into a customer tenant as a particular user. This option requires log in permission. The
button only appears after the administrative user of the customer tenant enables access for the master
tenant users. For more information about enabling support access, see Enabling an administrative user
to log into a customer tenant on page 761.
• Data Maintenance: Use this procedure to restore the integrity of relationships for this customer. This is
only for fixing problems and will not be used under normal conditions.
• System Backup & Restore: Monitor and create system backup files created in this customer. See
Backup and restore on page 804 for more information.Restore from backup: (from Backup page) Use
the Restore option to delete all current customer data and replace it with data imported from the selected
backup file (no users can be logged in during backup).
• Storage Move:Select this option to move the customer storage from cloud-cloud, local-cloud, or
cloud-local. Then, select a storage option from the New Storage drop-down list, enter the required
storage details and click Move.
• Database Move: Moves customer data to another (selected) database. Requires edit permission.
Additionally, after performing Database Move, you must navigate to the customer's details page, under
Runtime Information area, select Load to load the customer tenant from the production server cache.
Note: You unload and load the customer tenant for the new settings to take effect. Only after loading
the customer tenant from the production server cache can the users log into the customer tenant.
• Set Preferences: Enables selecting parser preferences for DOC, PDF, and DOCX documents. Then,
select the parser preferences for DOC, PDF, and DOCX type of documents.
• PDF Parser: Default, Aspose Parser and Built-In Parser are the available options. If you want to
make Aspose Parser as the Default option, you must set the IsAsposePDFParserEnabled shared
property to true. By default, this property is set to false.
• Doc Parser: Default, Aspose Parser and Built-In Parser are the available options. If you want to
make Aspose Parser as the Default option, you must set the IsAsposeDocParserEnabled shared
property to true. By default, this property is set to false.
Note: To use the existing RTF documents, you must ensure that the Aspose Word jar is present in
the lib folder.
• Docx Parser: Default, Aspose Parser and Built-In Parser are the available options. If you want to
make Aspose Parser as the Default option, you must set the IsAsposeDocxParserEnabled
shared property to true. By default, this property is set to false.
Note: If Aspose PDF and Word jars are not present in the lib folder, the Built-In Parser will be used
by default and the PDF Parser, Doc Parser and Docx Parser drop-down lists will not be visible.
1. Create and download a backup of the customer on the source server (see Working with customer records
on page 862).
2. Create and register a new empty database (see Adding a new database for use with customer tenants on
page 869).
3. Create a New Customer on the target server assigning the newly created empty database to it (see Creating
a new customer record on page 860).
4. Copy the backup file from the source server to the target server or upload the downloaded backup file on
your target server. You will find the destination location on the system backup page. For information on
navigating to the system backup page and uploading the system backup, see Working with customer records
on page 862.
After copying or uploading the customer backup, your backup will be listed in your Backup page:
Note: If the original customer tenant has lots of data in uploaded files, the backup file will not include these
files. In this case, you must move your uploaded files into your cloud storage or copy those files manually
from the original server to the target server.
When the process is complete, you will receive a confirmation email from Progress Rollbase. Note that you
can check the backup.log file on your customer for information about the restoration process and possible
errors.
Note: Logging is limited to only one chart or view at a time. If logging is enabled one one chart or view, and
you enable logging on a second chart or view, the setting on the first one is automatically disabled.
1. Navigate to the customer record for the tenant and click Login.
2. In the customer tenant, navigate to the object definition that contains the chart or view.
3. Navigate to the Charts or Views section.
4. Click Edit next to the chart or view.
The Edit page opens:
6. Select the check box Log all SQL queries created by this <View or Chart> in query.log.
7. Click Save.
After exercising the view or chart, for example, by creating a new record, return to the edit page where you
enabled logging and click query.log to open the log file.
Managing databases
The databases.xml file in the config directory of the Rollbase Master Server instance specifies configuration
for the database(s) used by Rollbase. The configuration includes connection information determines which
database will store data for a particular customer tenant. If you change the file manually, you must restart the
Web server. An administrator logged into the master tenant can create and update system databases from the
System Console application without restarting the Web server.
The topics in this section cover the following procedures:
• Adding a new database for use with customer tenants on page 869
• Creating custom database indexes on page 871
• Adding columns to a Private Cloud database on page 872
• Use this database as default for new Customers to make this database as the default database for
the newly created customer tenants.
• This database includes External tables which can be mapped as system objects if your database
makes use of external tables that can be mapped to Rollbase Objects..
• Pool Type — The type of JDBC connection pooling mechanism to implement for managing JDBC
connections. You can implement connection pooling with Rollbase or Tomcat.
Note: If you want to change the pool type for your database, you must restart the server for the changes
to take effect.
8. Click Save.
After saving the information you entered, the new database is displayed in the list. The databases.xml
file is automatically updated on all the servers in your Private Cloud without a Web server restart.
After creating and adding a database, you can click Edit to modify any database information. If you want to
change the pool type for your database, you must restart the server for the changes to take effect.
It is neither practical nor possible to index all columns in the RB_OBJ_DATA table. It is best to concentrate on
columns with large numbers of records per object. Indexes can be created for single or multiple columns. For
example, if your application uses a field mapped to a STR10 column to sort and filter large amount of records,
you could create an index on that column. The following database command would create such an index:
CREATE INDEX RB_OBJ_DATA_CUST1 ON RB_OBJ_DATA(OBJ_DEF_ID, STR10);
• Use an SQL script to create more columns of the selected type to the following tables:
• RB_OBJ_DATA (main data table)
• RB_DELETED_OBJS (records in Recycle Bin)
• RB_USER_DATA (Rollbase users)
• RB_CUST_DATA (customers)
• Make sure that the newly added columns follow the naming convention and use continuous numbering. For
instance, you may create ten new Date/Time columns named DATE50, DATE51 to DATE59
After server restart, you should be able to create more Date or Date/Time type fields per object definition.
• Check Is System only if this application explicitly includes the User object. Progress recommends that you
create your own system application that includes the User object (similar to the Rollbase application) and
publish it from a dedicated tenant.
• Check Approved to allow this application to be installed by any user browsing the Applications Directory.
Your customers can send feedback and report issues through the Help > Support Tickets menu. This will
create a Support Request record in your master tenant Support Center application. You can use an existing
workflow, or create your own actions to process these requests.
Test drive
You can set up dedicated customer tenants to provide test drive functionality for a particular application. To do
that:
1. Publish the application in the Applications Directory and make it available using the Publish button on
the application view page. Note: publishing is only available for the original application creator.
2. Publishing will create a record in Published Apps tab in the System Console. Edit that record and:
a. Check the Approved box.
b. Select the Customer where the published application was developed in the Test Drive lookup.
c. Verify that your published application appears on the Applications Directory portal.
3. Go back to the dedicated Customer and assign permissions for the Portal User user role. Progress
recommends that you assign complete permissions for the Test Drive application.
4. Create a set of records to demonstrate functionality of your application. Only these records will be available
for a Test Drive visitor.
5. Make sure that the Test Drive field is added to the View Application page on the Application Directory
portal. You can also edit properties of the Test Drive field.
6. Open the Application Directory portal and locate the published application. On the view page you should
see a Test Drive button. If Test Drive is configured correctly, this button will be enabled.
When a visitor to the Applications Directory portal clicks that button, they will be redirected into designated
tenant without logging in. The visitor will have access to all tabs and objects according to permissions
assigned to the Portal User role. The visitor will not be able to:
• Authentication method — You can use Rollbase's password authentication or you can use an external
authentication engine.
• Security levels and policies — Using Rollbase's password authentication, you can customize the security
level, password expiration policy, and password validation, and you can set up security questions for
authentication.
• API authentication on page 897 — When logging into Rollbase using an API, you can choose the authentication
mechanism to use for your selected authentication method.
• Protocol — You can configure Rollbase Private Cloud to use the HTTPS protocol.
For information about general security features, see Security and access control on page 719.
The following topics describe Private Cloud security options and how to configure them.
4. Click Next.
The next page allows you configure the selected authentication method. See the topic for your selected
method for details.
Password authentication
Use password authentication by creating a User record for each account. When you create a User record,
Rollbase generates a temporary password and sends it to the user's email account (by default, an email with
Welcome to Progress Rollbase as its subject). On the first log in, the Rollbase user is requested to change
the password against the temporary password. There is no field or template token corresponding to user's
password because Rollbase does not store actual users' passwords, but stores an encrypted (salted and
hashed) password instead.
The Welcome to Progress Rollbase email is based on a template included in the default Rollbase application
and you can modify it for your requirements. This template is named Welcome to Progress Rollbase and is
associated with the User object. See Email templates on page 365 for more information.
When you use password authentication, Rollbase Private Cloud lets you configure the following user
authentication features:
Table 5:
Field Description
After specifying the above values, click Save to save your changes.
Password length 6+ 8+ 8+
(characters)
• From a setup page, select Setup Home from the application switcher:
Note: If you update the Security Level, certain users in your tenant may not be able to log in using their
existing credentials. Because of this, Progress recommends that you reset passwords for all your users
from the Users object tab using More actions...>Reset Password. Rollbase resets the passwords and
sends an email to all your users about their updated password. Alternatively, you can inform your users
about the change of security levels in your tenant and request them to change their passwords if necessary.
5. Click Save.
A message will confirm an update to the security level.
8. Click Save.
The email template for that message is called Password Expiration Notification and you can customize it
the same way as you can any other email template. See Email templates on page 365 for more information.
You can create more than one notification trigger if desired.
The following example ensures that the user's password includes at least one special character: '@'
or '#':
if (password.indexOf('@')<0 && password.indexOf('#')<0)
return "Password must include a special character.";
After specifying your custom validation formula, you can click Debug Formula to find and fix any errors
or inconsistencies in the formula.
External authentication
If you choose to use external authentication instead of Rollbase password authentication, the following external
authentication methods are supported by Rollbase:
If external authentication is set up, Rollbase is no longer managing users' passwords. In this case, the Change
My Password link is disabled. We strongly recommend that you modify the email template which welcomes
new users to clearly indicate the selected authentication method.
• The external system has set of user accounts synchronized with the Rollbase tenant.
• The external system uses HTTP session IDs created during user login.
• The logged-in user of the external system should be able to access the Rollbase tenant without entering a
login name and password.
To accomplish this, first create a link on an external system page:
https://{!hostName}/router/servlet/Router?act=login&loginName={!userName}&password={!sessionId}
where:
Table 6:
Field Description
After specifying the above values, you must test your authentication method to check whether authentication
succeeds. To test your authentication method:
1. Under Test External Authentication, specify a valid login name and password.
2. Click Test External Authentication.
Note that you cannot save your changes until the test succeeds.
If you choose LDAP Advanced as your authentication method while Setting the authentication method on
page 874, specify the following values to configure Rollbase to authenticate users using your LDAP system:
Field Description
Base Distinguished Name The root distinguished name (DN) to use while running
queries against your directory server. Example:
• o=example,c=com
• cn=users, dc=ad, dc=example,dc=com
• For Microsoft Active Directory, specify the base DN
in the following format: dc=domain1,dc=local.
Replace domain1 and local for your specific
configuration. Microsoft Server provides a tool
called ldp.exe which is useful for finding out and
configuring the LDAP structure of your server.
Search Mode
The LDAP authentication requirements to search for
and get results from a search query. You can specify
the following based on your LDAP configuration:
• Anonymous: For LDAP directories that support
queries from a source that is not logged in.
• Authentication: Only authenticated users can
query the LDAP directory. If you choose this option,
two text fields open where you must specify:
• Admin Security Principal - The user name
• Admin Security Credential - The password
Field Description
Use Name Attribute The attribute field to use when loading the username.
Example:
• cn - Use the common name attribute.
• uid - Use the user ID attribute.
After specifying the above values, you must test your authentication method to check whether authentication
succeeds. To test your authentication method:
1. Under Test External Authentication, specify a valid login name and password.
2. Click Test External Authentication.
Note that you cannot save your changes until the test succeeds.
Table 7:
Field Description
Target URL URL that identifies the HTTP device and port (typically,
http://device:port-number/...)
HTTP Body The template for the body of the HTTP POST request
(typically a SOAP call). This must include tokens for
user's input.
After specifying the above values, you must test your authentication method to check whether authentication
succeeds. To test your authentication method:
1. Under Test External Authentication, specify a valid login name and password.
2. Click Test External Authentication.
Note that you cannot save your changes until the test succeeds.
Table 8:
Field Description
Target URL URL that identifies the HTTP device and port (typically,
http://device:port-number/...))
After specifying the above values, you must test your authentication method to check whether authentication
succeeds. To test your authentication method:
1. Under Test External Authentication, specify a valid login name and password.
2. Click Test External Authentication.
Note that you cannot save your changes until the test succeeds.
Note: You should understand how OpenEdge SPA works before configuring Rollbase to use this type of
authentication. For more information on OpenEdge SPA, see the Progress OpenEdge AppServer Administration
documentation.
Field Description
OpenEdge Realm URL The URL to connect users to the state-free AppServer. oerealm is the
name of the OpenEdge State-free AppServer where you deploy the
OpenEdge realm. (typically, appserver://host-name:port-number/oerealm).
OpenEdge Realm Class The realm service interface’s class path. SPA security implementation
for an OpenEdge REST Web application must specify the HybridRealm
interface class.
OpenEdge Domain The name of the domain to which the OpenEdge user must belong. Note
that only a single domain name can be specified and that only the users
in that domain will be authenticated.
OpenEdge Domain Access Code The code or a key required for a OpenEdge user to access the OpenEdge
domain. In that, in a REST service call, this code seals the client principal
token that validates and authenticates users.
Override hostname validation When enabled, OpenEdge authentication will not validate the hostname
of the OpenEdge Realm URL.
Typically, you use this option for testing purposes when your OpenEdge
Realm URL is secure (HTTPS) and you want to use a self-signed
certificate (as opposed to a CA Certificate Store file) for user
authentication.
Note that this option sets the noHostVerify property of JVM to true
and for security reasons, is not recommended for production systems..
Realm Token File The file name that holds a serialized ClientPrincipal used to authenticate
the realm service interface.
CA Certificate Store File The security certificate from the certificate store required for user
authentication.
Note: If your Realm URL is secure and it requires certificate, you must
provide your certificate in the CA Certificate Store File field for Rollbase
to access the URL. For example, AppserverDC://hostname/brokername
is not secure and doesn't require a certificate, and
AppserverS://hostname/brokername is secure and requires a certificate
for access.
Field Description
Manages Password Enables the following password-management options:
• Expiration Policy: The number of days until a user's password expires.
The minimum value for this is determined by the shared property
ExpirationPolicy for master tenants and by the shared property
MinExpirationPolicy for other tenants.
• Password Guidelines: Text to display on the Change Password page.
• Use Security Questions to authenticate users: Allows you to
configure security questions users must answer upon login. See
Security questions for authentication on page 898 for information about
security questions. See Configuring security questions on page 898 for
information about configuring security questions.
When users change their password, the old password stored in the
Progress OpenEdge database must be updated with the new one. So,
before you enable the Manages Password option in Rollbase, you must
update your OERealm service interface method, SetAttribute(), in
OpenEdge with the change-password ABL logic. For information about
how to update SetAttribute() with the required ABL logic, see
Change-password ABL logic in Progress OpenEdge on page 888.
Super Admin Credential The Login Name and Password used to generate the client principal for
batch jobs and delay triggers. Provide these values if you plan to run
batch jobs and/or delay triggers on OpenEdge objects.
Guest User Credential The Login Name and Password used for portal access. Provide these
values if you plan to access OpenEdge objects from a Rollbase portal.
After specifying the above values, you must test your authentication method to check whether authentication
succeeds. To test your authentication method:
1. Under Test External Authentication, specify a valid login name and password.
2. Click Test External Authentication.
Note that you cannot save your changes until the test succeeds.
You must consider the following for the change-password ABL logic in the SetAttribute() method:
• Rollbase employs the ATTR_PASSWORD attribute for changing passwords. Therefore, you must use the
same attribute, ATTR_PASSWORD, in SetAttribute() for changing passwords.
• As user account details are stored in Rollbase and user account passwords are stored in OpenEdge,
SetAttribute() must return True only if Rollbase enables users to change their password.
Therefore, if the Manages Password option is not enabled in Rollbase, SetAttribute() must return
False.
• If an error occurs while executing the change-password ABL logic, SetAttribute() must log the failure
and return False to Rollbase.
• The password field in the system table (_User in the sample) that stores the user accounts details can only
be changed by the user who owns the user account. Therefore, your change-password ABL logic must do
the following to be able to change a user's password:
• In the system table (_User in the sample) that stores the user account details, find the user record based
on user ID or number.
• Copy the user record into a temp-table.
• Delete the user record from the system table.
• Modify the password in the temp-table.
• Copy the temp-table values to the system table.
The following code-block shows a sample SetAttribute() method implementing the discussed considerations
for the change-password ABL logic:
Note: The following sample uses a new temp-table, ttUser. You must add the temp-table definition, DEFINE
TEMP-TABLE ttUser LIKE _User, to your OERealm service interface class.
After updating the OERealm service interface class file, you must restart the server for the changes to take
effect.
• Rollbase must run on a named server (not localhost). Using the fully qualified domain name is recommended,
for example, http://rbinstance.mydomain.com. The hostname in the Rollbase license file will be
rbinstance.mydomain.com.
• Make sure DNS does not have invalid caches in any of the machines.
• SPNs should not be associated with multiple accounts. Sometime machine accounts are created with
hostname as SPNs automatically and this might clash with the delegate user account you create.
• If there is a cryptography error, install Java Cryptography Extension (JCE) for the appropriate JDK.
To configure the Rollbase instance so that all tenants use SAML/ADFS authentication, perform the following
tasks:
1. Configure API authentication. SAML/ADFS authentication must use either API token or custom API
authentication. See API authentication on page 897 for details.
2. Configure the Rollbase instance to enable SAML/ADFS authentication.
3. Configure SAML/ADFS authentication details for all tenants
See the following videos for detailed demonstrations of configuring SAML/ADFS authentication:
Note:
For long keys, such as those encrypted using AES-256, you will need to enable JCE unlimited strength in
your JRE. To do so, download the Unlimited Strength Jurisdiction Policy Files (in ZIP format) from one of
the following locations:
• Java 7: http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
• Java 8: http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
Extract the files and install them as instructed in the README.txt file.
2. Copy the keystore (Progress.jks in the above example) to the config directory of your Rollbase
installation, for example, C:\Progress\Rollbase\Pas_Instance\rollbase\config.
3. Export the public key certificate from the keystore using Keytool as shown below:
• SPKeyStoreFile — The name of the keystore. In the above example, this is Progress.jks.
• SPKeyStorePassword — The keystore password. In the above example, this is myPassword.
• SPKeyStoreAlias — The keystore alias. In the above example, this is server.
• SPMetadataFile — The name of the SP metadata file (see step 4)
• AssertionConsumerIndex — The index of the URLs to be used in the SP metadata. In general,
multiple URLs are not supported by most of the IdPs, so you can set this to the default of 0.
7. For customers that will configure SAML or ADFS authentication at the tenant level, provide the public key
certificate to the customer administrators so they can configure SAML/ADFS authentication details for their
tenants. See step 2 for an example of generating this file using the Java Keytool command.
8. If you are using ADFS authentication: For SP-initiated login to work, you need to set the ADFS Secure
Hash Algorithm parameter to SHA-1. Rollbase uses the SHA-1 algorithm when signing SAML requests
and ADFS defaults to SHA-256.
• Entity ID — The value of the entityID attribute of the EntityDescriptor element in the SP metadata
file
• ACS (Assertion Consumer Service) URL — The value of the SAML ACS(Assertion Consumer Service)
URL property on the SAML/ADFS configuration page in Rollbase
• Encrypt SAML response — Upload the public key certificate file. The master administrator should provide
you with this file.
4. After configuring the IdP as described in step 4, obtain the IdP's SAML/ADFS metadata XML. You will need
to save this as a file and use it in the next step. This is usually provided by the IdP as either a file or as a
URL containing the metadata XML. If it is provided as a URL, save the XML in a file anywhere on your
machine. This file is referred to as the IdP metadata file in the next step. See Configuring the Rollbase
instance to enable SAML/ADFS authentication on page 892 for more information.
5. Specify the following values to configure a Rollbase tenant to authenticate users using SAML or ADFS:
Table 9:
Field Description
Issuer (IDP Entity ID)/ADFS This is the value of the entityID attribute of the EntityDescriptor
Entity ID element in the IdP metadata file.
Identity Provider Metadata/ADFS The IdP metadata file. Upload the file you obtained or created in step
Metadata 4.
Service Provider EntityID/Relying The entity ID of the service provider. This is the value of the entityID
Party Entity ID attribute of the EntityDescriptor element in the SP metadata file.
Identity Provider Login URL The URL the users of the tenant should use to initiate SAML login.
This is the value of the Location attribute in the
SingleSignOnService element for the HTTP-POST binding in the
IdP metadata file
Identity Provider Logout URL A custom URL can be configured by the SAML customer administrator
to redirect the user after logout.
Request Signature Method A signature method alogorithm to be used to sign the request being
sent to the IDP. You can select RSA-SHA1 or RSA-SHA256. The
default value is RSA-SHA1.
Note: Authentication Context Comparison Type parameter for SAML can be configured only at a tenant
level . For Global Level SAML configuration, the comparison value will always default to Minimum. If SAML
is the selected authentication type, then the parameter samlAuthnContextComparison will return the
set comparison value for getAuthentication REST API.
• Entity ID — The value of the entityID attribute of the EntityDescriptor element in the SP metadata
file
• ACS (Assertion Consumer Service) URL — The value of the SAML ACS(Assertion Consumer Service)
URL property on the SAML/ADFS configuration page in Rollbase
• Encrypt SAML response — Upload the public key certificate file. The master administrator should provide
you with this file.
3. After configuring the IdP as described in step 2, obtain the IdP's SAML/ADFS metadata XML. You will need
to save this as a file and use it in the next step. This is usually provided by the IdP as either a file or as a
URL containing the metadata XML. If it is provided as a URL, save the XML in a file. You must save this
file in the Rollbase config directory (required), for example,
C:\Progress\Rollbase\Pas_Instance\rollbase\config. This file is referred to as the IdP metadata
file in the next step.
4. Set values for the following shared properties in the shared.properties file.
Property Description
DefaultAuthType SAML
IdPId The entity ID of the Identity Provider. This is the value of the
entityID attribute of the EntityDescriptor element in the IdP
metadata file.
Property Description
Request Signature Method A signature method alogorithm to be used to sign the request being
sent to the IDP. You can select RSA-SHA1 or RSA-SHA256. The
default value is RSA-SHA1.
<ds:X509Certificate>MIIC0TCCAbkCAQAwXDELMAkGA1UEBhMCSU4xCzAJBCgKCAQEAmEwfAFLjgDO
BgNVBAoTCXJicHJpdmF0ZTELMAkGA1UECxMCUUExETAPBgNVBAMTCHJhamt1bWFyMIIBIjANBgkq
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmEwfAFLjgDOEZk1AYPhX7dbYMXqkk4rF3uyYZeoMnnXP
Ls463GzGvVPnRgjTdIzm+1QOnkTx3BBu7kxlhtze2Sr7rtHLs1FYbzXREs5aVgIPnpkfuKdR9QND
aJJ1byxStnF+zI4feSYmHXsVWfHm24+FK0kCk3tSnw2/noXyW5xc2UbrGLYqaezpPSlf5WJ3isKF
lQr2k+HKXh4Rid4TUmEaoZXPAcB7QtkBYnIxzzmBoFCWSSsVldPRkaw=</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>
<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
Location="http://mymacnine.mycompany.com:8830/router/login/loginSaml" index="0"
isDefault="true" />
</md:SPSSODescriptor>
</md:EntityDescriptor>
API authentication
When logging into Rollbase using REST and SOAP login APIs, three mechanisms for authentication are
supported:
• The authentication mechanism itself — Password for Password authentication, LDAP for LDAP
authentication, etc. Some authentication methods, such as Kerberos and SAML, do not support this
mechanism.
• API token authentication mechanism— A user can generate an API token to use instead of a password for
authentication. OpenEdge and Custom authentication methods do not support this mechanism. See
Enabling tokens for API authentication on page 897 for information about enabling API tokens. See My
Preferences page on page 794 for information about generating API tokens..
• Custom authentication — Authenticates the login API call via custom authentication logic.
You can set the API authentication mechanism for all tenants using the shared property APIAuth. See
shared.properties on page 926 for details.
The table below lists the available authentication methods and the authentication mechanisms supported by
each:
1. On the Setup Home page, click Authentication from the Administration Setup area.
2. On the Authentication Type page, click Next.
3. In the API Authentication area, select API Token and click Save.
The screen below shows the API Authentication options for Password authentication. See API
authentication on page 897 for the choices available to each authentication method.
4. After API tokens are enabled, users in that tenant can generate API tokens See My Preferences page on
page 794 for details about generating API tokens.
The following screen shows a configuration that includes four security questions. Each user must
answer two of these questions to save in their profile. When logging in, Rollbase randomly selects one
of the questions for the user to answer.
Users can select and provide answers to security questions in one of two ways:
• On the Change Password page.
• When logging in for the first time after the security questions were created.
See Selecting and modifying your security questions on page 25 for details.
• Note that these are the default port numbers for PAS and Tomcat. If you have changed the HTTPS port
number for your configuration, use that number instead.
Multi-server environments
There are two reasons why you would configure Rollbase as a multi-server environment. One is to improve
performance and the other is to provide high availability.
Performance
The performance of RollbaseRollbase is dependent on variables such as the following:
• Devoting as much CPU and memory as possible for production servers and database servers will help
increase performance.
• Low complexity applications can support up to 50 times more concurrent users than those that use a lot of
formulas, templates, custom filtering, reports, and anything that is processor or database-intensive. You
might be able to architect a system by creating different related applications rather than one all-inclusive
application. This might allow you to limit the functionality that requires more processing to a smaller number
of users.
• The fewer object definitions and applications in a particular customer tenant, the faster Rollbase can load
it into memory when requested, and the smaller amount of memory it will require.
Rollbase includes a set of auxiliary runtime components which can be run on a single host for small loads or
be deployed across multiple hosts for scaling purposes. As Rollbase usage grows, you can add instances of
these runtime components to provide adequate performance for all users. When you run Rollbase production
servers on multiple hosts, the router component calculates the least loaded server and directs newly logged
in users to that server.
Note: Verify that system clocks and system time zones on all servers are synchronized, or the system will not
be able to work properly.
High availability
High availability means that the system can continue to respond to requests despite individual component
failures. Besides individual component failure, a component can stop responding to requests because its host
failed, because of network outages--or even severe latency--, or in the case of Rollbase, if the web server or
the database failed.
Rollbase supports high availability with the ability to configure active and standby Rollbase components in a
cluster of machines. Only active components handle requests.
See Configuring high availability on page 914 for more information about high availability in Rollbase.
• Run database servers and PAS or Tomcat servers on different physical machines (not on virtual machines
using the same physical server).
• Hosts for databases should have high performance CPUs and at least 8GB of RAM.
• Hosts for PAS or Tomcat should have a 64-bit OS and have at least 8GB of RAM each (the more the better;
also make sure to allocate as much as possible to your Tomcat heap).
• If you are using Tomcat, be sure to install 64-bit versions of Java and Tomcat on each server.
• To provide load balancing, use an Apache server to perform the routing of requests to the Tomcat instances.
You can have as many of these Apache servers as needed for load balancing.
• Progress recommends performing load tests with an initial version of your infrastructure. This can help you
identify areas of slow performance and give you time to adjust before you have thousands of concurrent
users using the system.
With powerful servers and a low complexity app, you should be able to handle anywhere from 250 to over 1000
concurrent users per server. However, this depends on the database and CPU demands of your Rollbase
applications.
How you set up your environment depends on whether you are using PAS or configuring your own Apache
Tomcat system:
• Creating N number of production servers by creating new PAS instances as described in Working with
instances on page 902 and following the procedures described in Adding auxiliary servers on page 912.
• Configuring customer tenants with the Multi-Server Load attribute so that requests from users will span
multiple servers dynamically. When this setting is enabled, PAS and Rollbase distribute user sessions
across all available production sever components.
Note: If you are using TCMAN to create and run multiple instances of the Master Server (those with the Master
Web application in the webapps directory), you must copy the configuration files from the first Master Server
to the others. All Master Servers must have identical configuration files.
The following figure illustrates the creation of multiple instances using the TCMAN command-line utility (with
syntax simplified).
Figure 1: Generating PAS instances
Instances are independently running copies of the core PAS. Each instance runs on its own JVM, has its own
configuration with unique ports, and hosts its own web applications. However, each instance runs a Tomcat
server that uses a number of common files from the same $CATALINA_HOME directory.
There are a number of advantages when you deploy your web applications to an instance of the PAS, rather
than deploying to the PAS that you installed. This practice prevents accidental corruption of the core executables,
configuration settings, and libraries. It also prevents accidental deletion of web applications if the core PAS is
removed when you uninstall a Progress PAS product.
Some additional advantages of instances are:
• Updates to the core Apache Tomcat server libraries and executables do not affect your web applications.
You avoid the necessity of updating the applications and/or re-configuring them.
• You can establish different security policies for each of the instances.
• You can tailor the JVM for individual applications, since each instance runs in its own JVM with its own
configuration.
• Instances provide you with quick way to create a test server for experimenting with new configurations and
applications without the danger of permanently corrupting an existing server.
• You can package an instance as a Web application and deploy it to other PAS core servers.
You use $CATALINA_HOME/bin/tcman.sh create command to create a new instance.
When you create an instance, the root directory of the instance is assigned to the CATALINA_BASE environment
variable within the scripts in its /bin directory. The root directory of the installed (core) PAS is assigned to the
CATALINA_HOME environment variable in the scripts in the instance's /bin directory. (Notice that the scope
of these environment variables is limited to the context of an individual instance's /binscripts.)
All instances of a core PAS execute a set of common JAR files, scripts, and libraries from the following directories
on the parent server:
• $CATALINA_HOME/lib
• $CATALINA_HOME/common/lib
• $CATALINA_HOME/bin
However, each instance is created with :
• A $CATALINA_BASE/bin/ directory with its own copy of some of the scripts from the core PAS. These
include scripts for start up, shut down, deployment, running TCMAN actions, and so on.
• A $CATALINA_BASE/conf/ directory with its own copy of properties and configuration files.
• A $CATALINA_BASE/webapps/ which initially only contains the ROOT Web application.
• A number of directories that are initially empty. These include /logs, /temp, /work, and /common/lib.
Note: If you are using TCMAN to create and run multiple instances of the Master Server (those with the Master
Web application in the webapps directory), you must copy the configuration files from the first Master Server
to the others. All Master Servers must have identical configuration files.
See Create an instance (create) on page 953 for information about other parameters.
For example the following command line creates an instance of /psc/pashome in /psc/acme1 and
specifies its ports:
Action Purpose
delete Remove the directory tree and all of the files in an instance.
Action Purpose
test Displays information on the configuration and environment of an instance. It also displays
information about error conditions.
instances Display all the instances created from the Progress Application Server installed in
$CATALINA_HOME.
unregister Stop tracking an instance by removing the instance's entry from the
$CATALINA_HOME/conf/instances.[unix|windows] file.
register Register an instance for tracking purposes. (Note that instances are registered for tracking
by default when they are created. The register action is only necessary if you explicitly
unregistered an instance.)
clean Truncate, move, or delete the log files located in the /logs directory of either the core
server or an instance.
version Show the Apache Tomcat runtime version and OS information for an instance.
Note: If you run a PAS instance with the TCMAN start action, the instance runs in the context of the command
shell process. It is not available as a system service that can handle external client requests. The instance
must be registered as a Window service before you can start it as a service.
This is a summary of how to register and run a PAS instance as a Windows service:
where oepas1 is the name of the default instance created when you installed PAS for OpenEdge.
4. Run the TCMAN service action specifying an instance name and the start parameter. For example:
Note: You can also use the TCMAN service action to check the running status, stop, and unregister a
PAS for OpenEdge instance as a Windows service. You can also use the Windows Microsoft Management
Console (MMC) or the sc config command to start, stop, and check the status of a service.
Note: If you run a PAS instance with tcman.sh start, the instance runs in the context of the command
shell process. It is not available as a system service that can handle external client requests. The instance
must be installed as a daemon process before you can run it as a functioning Web server.
The file $CATALINA_HOME/bin/daemon.sh can be used as a template for starting Tomcat automatically at
boot time as a child of the init process. For more information, see:
https://tomcat.apache.org/tomcat-8.0-doc/setup.html#Unix_daemon
However, you will need to consult with a system administrator before you can configure and run PAS as a
daemon process due to differences among Linux systems and because you need administrative privileges for
access to the system.
• Creating N number of production servers (by installing Tomcat and production server component on a virtual
or physical machine).
• Configuring one or more Apache servers with Workers to recognize each production server.
• Configuring Customer tenants with the Multi-Server Load attribute so that requests from users will span
multiple servers dynamically. When this setting is enabled, Tomcat and Rollbase distribute user sessions
across all available production sever components.
To install Rollbase instances on multiple hosts, verify that the Tomcat instances are installed on every machine
that will run Rollbase components. When copying WAR files, copy only the components that you wish to run
on particular machine. Make sure Production Server instances get WAR names that match component names:
for example, you would need to rename prod1.war after copying it to a different host. In the example shown
above, the following WAR files should be copied:
worker.master.type=ajp13
# host should be the network name or IP of the target server
worker.master.host=335090-web2
# port should be 8009 by default; do not change this unless you reconfigured Tomcat
to accept AJP requests on a different port
worker.master.port=8009
# The following parameters should not be changed without detailed understanding of
Tomcat workers
worker.master.lbfactor=1
worker.master.socket_timeout=0
worker.master.socket_keepalive=1
worker.master.connection_pool_timeout=60
worker.master.connection_pool_size=300
worker.master.connection_pool_minsize=50
# Create a "prodX" worker for each of your Rollbase production server Tomcats as shown
here
worker.prod1.type=ajp13
worker.prod1.host=335091-web2
worker.prod1.port=8009
worker.prod1.lbfactor=1
worker.prod1.socket_timeout=0
worker.prod1.socket_keepalive=1
worker.prod1.connection_pool_timeout=60
worker.prod1.connection_pool_size=300
worker.prod1.connection_pool_minsize=50
# Uses the below worker mounts for all virtual hosts; otherwise disabled for SSL
JkMountCopy All
Now for each named worker in workers.properties, you need to specify the subdirectories that should be
available in inbound requests. For the Master Server, Rollbase requires the following:
JkMount /workflow master
JkMount /workflow/* master
JkMount /storage master
JkMount /storage/* master
JkMount /webapi master
JkMount /webapi/* master
JkMount /search master
JkMount /search/* master
JkMount /rest master
JkMount /rest/* master
JkMount /rss master
JkMount /rss/* master
JkMount /master master
JkMount /master/* master
JkMount /router master
JkMount /router/* master
For each production server add the following code (make sure the name prodX corresponds to the name of
each production server worker you defined in workers.properties):
JkMount /prod1 prod1
JkMount /prod1/* prod1
Apache troubleshooting
If you have trouble getting a multi-server environment to work, it is helpful to:
Your license specifies the number of hosts that can run Rollbase software and must include the domain name
provided by your web server as the host name. You should use this domain name for all external URLs in the
components.xml file. The example configuration shown in the illustration requires a Rollbase license for
three servers.
To set up the example architecture shown above, follow these general steps:
1. Install PAS or Apache and Tomcat as described in Distributing load with PAS on page 902 or Distributing
load with Apache and Tomcat on page 907
2. Use the multi-server license provided by Progress for the Rollbase Master Server installation.
3. Install the components on their respective hosts.
4. Edit the components.xml file for the Master Server to include entries for all system components. For
internal URLs accessed from within your firewall, you must use IP addresses for the physical servers. For
external URLs accessed from outside your firewall, it is best to use the {!#HOST_NAME} token. See
components.xml on page 917 for details.
5. Configure your Web server (PAS, Tomcat, or Apache) to provide access to both production servers through
a single external URL.
6. Start the database(s).
7. Start the Web server that is hosting the Rollbase Master Server instance.
8. Start the Web server on the hosts for production components.
9. Navigate to the System Console application System tab to verify that all of your components can be
monitored from the Master Server. Make sure that production servers have the correct parameters.
When the system is running, you can add production servers up to the limit enforced by your license without
stopping and restarting the Master Server. Production servers should only be started after they have been
configured.To add components, you must stop and restart the Master Server as described in Adding auxiliary
servers on page 912.
Note: If you are using TCMAN to create and run multiple instances of the Master Server (those with the Master
Web application in the webapps directory), you must copy the configuration files from the first Master Server
to the others. All Master Servers must have identical configuration files.
• Master Servers
• Production Servers
• REST Servers
• Router Servers
• SOAP Servers
• Search Servers
• Storage Servers
Note: Progress recommends that you install your Router, REST, and SOAP servers on a single computer as
it results in faster REST API and SOAP API execution.
Before installing of multiple auxiliary servers , you must make note of the following considerations:
• At most, one server of each type can be installed on a virtual or physical machine.
• Edit the components.xml file in the Master Server config directory:
• name attributes must be unique.
• type attribute must match the type of component
• Make sure that the name of the WAR file used to install every server matches the name used in
components.xml. This might require renaming, as described in the example below.
• Copy the license file to the installation config directory on each host.
• On the host machines, define an environment variable for the type of server they will run as summarized
below.
• When you are finished, restart the Master Server first and then the production and auxiliary servers.
• If you are setting up a new production server, follow the steps described in Adding auxiliary servers on
page 912 and check the box to indicate the server will be dedicated to a subset of customers and skip to
Step 4
• If the production server exists and has not been configured to accept dedicated customers, follow the
procedures in Step 3:
4. Edit the customer records for the customers you want to assign to the production server:
a) Select the Customers tab.
b) Find the appropriate customer and click Edit.
c) Scroll down to the Zone Properties section:
d) From the Dedicated Server menu, select the production server to assign for this customer.
e) Click Save.
The diagram below shows the recommended architecture for high availability in Rollbase:
In the diagram, each node is a host. This configuration requires a minimum of six nodes to run Rollbase
components, plus a minimum of two Apache nodes, Amazon Cloud Services with ELB, and whatever is required
to run a highly available database:
• Node1A and Node1B — Run the Master server, Router server, REST server, and SOAP server
• Node2A and Node2B — Run the Production server. Note that if you have multiple Production servers, each
must run on a different machine.
• Node3A and Node3B — Run the Storage server and the Search server
• Apache 1 and Apache 2 — A load-balanced high availability Apache cluster. This is required for high
availability in Rollbase 4.3. See An Active/Passive Apache Web Server in a Red Hat High Availability Cluster
for more information.
• AWS — Amazon Web Services with Elastic Load Balancing. This is required for high availability in Rollbase
4.3.
For the database Rollbase uses, refer to your database vendor for their high availability features.
See Configuring multiple instances of Rollbase components on page 911 for information about configuring
components on multiple nodes.
Note: High availability configurations are only supported in the current release for Rollbase running on Tomcat.
See Using your own instance of Tomcat on page 842 for more information.
• Set the property IsHACluster in the shared.properties file to true to enable high availability.
• The file hazelcast.xml, which is in the config directory, for example,
C:\Progress\Rollbase\Pas_Instance\rollbase\config, controls which nodes are members of
the cluster, heartbeat detection timing, and other aspects of high availability. It contains the following
elements. Progress recommends leaving most elements at their default values. However, you must add
your cluster members to the members element.
• port element — The port number. Defaults to 5701. Can be any value from 5701 through 5710.
• members element — A comma-separated list of the IP addresses or hostnames of all members of the
cluster.
• property element with name="hazelcast.heartbeat.interval.seconds" — The time interval,
in seconds, to send a heartbeat in a cluster. Defaults to 5.
• On each node running Rollbase components, set the environment variable RB_NODE_NAME to a value
representing that node in the cluster. Each value must be unique in the cluster. If you are using a Tomcat
deployment, it is best to set environment variables using setenv.bat/sh in the tomcat/bin directory.
You will use the value of this environment variable in the components.xml file.
• Add a list of Node elements representing each node in the cluster with a name attribute specifying its
node name (the value of the environment variable RB_NODE_NAME) and a role attribute specifying its
role. The value of the role attribute is arbitrary but must be the same for the two nodes that will act as
an active/standby pair – the role attribute represents the node's group in the cluster. For example, the
entries for the nodes from the above diagram would look like the following:
<Node name="Node1A" role="MASTER AND OTHERS"></Node>
<Node name="Node1B" role="MASTER AND OTHERS"></Node>
<Node name="Node2A" role="PRODUCTION"></Node>
<Node name="Node2B" role="PRODUCTION"></Node>
<Node name="Node3A" role="STORAGE AND SEARCH"></Node>
<Node name="Node3B" role="STORAGE AND SEARCH"></Node>
components.xml
This XML file has a Component element for each system component, that is, each component deployed with
a WAR file. It also has a Node element for each component that is a cluster member for high availability; see
Configuring high availability on page 914 for more information. If you want to add additional components, you
need to edit the components.xml in the config directory of the Master Server and restart Rollbase to have
the configuration take effect. If you change the default port 8080 or use a host name other than localhost,
please make sure that InternalRoot values are properly adjusted for each component.
Since InternalRoot parameters are used for communications behind firewall, Progress recommends the
following to improve performance:
XML Description
Node/Attribute
name A unique name for this component used internally by the system.
type (attribute) The type of this component. Can be one of the following: MASTER, PROD, REST, ROUTER,
SEARCH, STORAGE, WEBAPI
Note: If your license does not support multiple servers, you cannot have multiple nodes
of the same type.
node When configuring high availability, the name of the node. Its value is the same as the
value of the environment variable RB_NODE_NAME for that node. See Configuring high
availability on page 914 for more information.
XML Description
Node/Attribute
ExternalRoot The URL to the root of the Web component as seen from outside of your firewall.
The{!#HOST_NAME} token will be automatically substituted by a host name from your
license file or by the HostName parameter specified in shared.properties. This
URL is used for external access to components. Example:
<ExternalRoot>http://{!#HOST_NAME}/master/</ExternalRoot>
For any plan other than a free evaluation, ExternalRoot must contain the HostName
parameter as specified in your license.xml. You cannot deploy Rollbase on a domain
other than the one for which it was licensed.
To use HTTPS for all external access, modify each ExternalRoot element to user
https instead of http and modify the port number in the shared.properties on page
926 file.
InternalRoot URL to the root of the web component as seen from inside your firewall (this can be the
same as ExternalRoot). This URL is used for internal communication between
components. Example:
<InternalRoot>http://localhost:8080/master/</InternalRoot>
Props (optional) Contains component-specific properties, see Component specific properties on page
918.
When configuring high availability, each Node element has the following attributes:
• name — The value of the environment variable RB_NODE_NAME for that node
• role — The node's group in the cluster. This must have the same value for each active/standby pair. For
example, if you have two production servers configured, their Node elements would look similar to the
following:
<Node name="ProdA" role="PRODUCTION"/>
<Node name="ProdB" role="PRODUCTION"/>
databases.xml
This XML file requires a Database node for each database used by your Rollbase Private Cloud system. Each
database node should contain the following child elements:
Note: The evaluation edition does not support multiple databases.
MaxInUseConnTimeMins Max time (in minutes) allowed database connection to be in use, connection
(attribute) will be closed when time is up
Default: MaxInUseConnTimeMins from shared.properties
MaxNotUsedConnTimeMins Max time (in minutes) allowed database connection in a pool to be idle,
(attribute) connection will be closed when time is up
Default: MaxNotUsedConnTimeMins from shared.properties
ConnTimeoutSec (attribute) Timeout (in seconds) used when new database connection is created
Default: None, uses database default
TxIsolation Consult your database manual regarding transaction isolation level, if not
sure about this setting - do not use it (database default)
useTxRecovery (attribute) Enables or disables the default connection pooling's transaction recovery
and retry feature
When using Oracle or SQLServer databases and DataDirect drivers, Progress
recommends that customers omit this attribute and use the driver's retry
feature instead.
Driver Class name for JDBC driver used for this database
Default: com.mysql.jdbc.Driver
ConnectionRetryCount Number of times the driver retries connection attempts to the database server
(attribute) until a successful connection is established.
Default: 0
ConnectionRetryDelay Number of seconds the driver waits between connection retry attempts when
(attribute) the ConnectionRetryCount attribute is set to a positive integer
Default: 3
events.xml
This system file contains definitions for trigger types available in the system. Rollbase can provide more
information to paying customers regarding how to develop and enable your own types of triggers for integration,
etc. Progress recommends you do not modify this file unless you develop custom triggers.
Note: Custom triggers developed by Private Cloud customers must be registered in events.xml (Developing
a custom trigger on page 390)
fieldgroups.xml
This file contains definitions for object attributes such as Location. Each attribute comes with a group of fields.
Experienced Private Cloud administrators can add their own object attributes here.
legacyobjects.xml
This system file contains definitions for system tables, which can also be treated as object records for reporting
purposes. Rollbase can provide more information to paying customers on how to integrate legacy database
tables. Progress recommends that you do not modify this file.
listitems.xml
This file contains a list of shared picklist Items (countries, states, etc.) to be added to each tenant during
customer creation. You can modify this file.
license.xml
Progress provides this file to paying customers. Save the license file in the config directory and restart your
application server.
Note: Altering the contents of the license file will cause a system error.
securityLevel.xml
This file defines available security levels. See Built-in security levels on page 876 for more information. You can
modify this file and change the default levels or add more levels according to your security needs.
A SecurityLevel XML node with the attributes shown in the example below represents each level. No default
values exist, so make sure to set a value for each property.
Example:
<SecurityLevel level="1" name="Low"
inactiveSessionExpireMins="240" loginSessionExpireMins="480"
maxFailedLogins="0" blockTimeMins="0" lockExpirationMins="120"
minPasswordLength="6" nonLettersInPassword="false"
caseSensitivePassword="false"
sequentialCharsInPassword="true"
/>
servicelevel.xml
This file defines available service levels. A service level is assigned to each customer at creation time. You
can modify this file to change default levels or to add more levels according to your business needs.
Each service level is represented by an XML node with the following attributes (no default values are used):
Note: Note: The following values defined in the service level are used only as default values and can be
overridden per individual customer: maxUsers, maxObjRecords, maxObjectDefs, maxFieldDefs,
maxPortals, maxApplications.
shared.properties
This file stores system-level properties to be shared among all Rollbase components. Each property is placed
on a separate line in the following format:
key = value
The table below lists all available properties and their default values. A few important properties to note:
• The HostName property defaults to localhost:8080 To use a different host name or port, adjust this
property accordingly, or your server will not start.
• The shared.properties file uses ISO-8859-1 encoding. If you wish to include multi-byte characters in
this file, use Unicode \u notation such as: \u00A9 for a copyright symbol.
Property Description
AdminEmail Email address of the first administrator user created during installation
Default: None (must be specified prior to installation)
APIAuth The authentication mechanism to user for login APIs. The value
supported for this property depends on the authentication type:
Property Description
AllowAdminLessTenant When set to true, this property enables tenants without administrative
users. Does not apply to the master tenant.
Default: false
AllowMultipleRestSessions When set to true, this property enables multiple REST API sessions
per user. That is, Rollbase can create multiple concurrent sessions
for the same user and process REST API calls from all the sessions.
Default: false
Property Description
CustomValidationViaAPI When set to true, this property enables all validations required before
executing an API operations. Therefore, any operations performed
using the product UI and API will be validated.
Default: true
Property Description
• Minimum value: 2
• Maximum value:10
Default: 5
• Minimum value: 1
• Maximum value:5
Default: 3
DocumentationURLNewUI URL for Rollbase documentation. The Help and Learn More links open
the documentation.
Default: http://documentation.progress.com/output/rb/doc/
EmailSettingsOverrideAtCustomer When set to true, this property enables you to set up a custom email
server for your tenant. This property makes available Email Server
Settings in the Administration setup page.
Default: true
Property Description
EncryptionType Selects the default Encryption Algorithm for the environment. Default
value is 0. That is, AES-128 Symmetric Encryption Algorithm.
ExpirationPolicy The number of days after which a user's password expires on the
master tenant. A value of 0 means no expiration; defaults to 10.
FastTrackPage Specifies the URL to the Progress Rollbase Fast Track page which
contains the Quick Start tutorial, companion videos, and online help
links.
Default: http://documentation.progress.com/output/rb
FontDirectory Directory where system fonts are stored, used by PDF Converter (see
below)
Default: None
See Configuring PD4ML on page 850 for more information.
ForumURL URL to forum page; if not set, the Rollbase Forum menu is not
available in the Rollbase menu.
Default: None
GoogleClientId The client ID required for accessing enabled Google applications. See
Enabling Google Apps for Rollbase Private Cloud on page 828 for
information about obtaining the client ID.
GoogleClientSecretKey The secret key required for accessing enabled Google applications.
See Enabling Google Apps for Rollbase Private Cloud on page 828 for
information about obtaining the secret key.
GoogleRefreshToken Used to provide a refresh token for Gmail email settings. The token
can be obtained by using Google auth. The value will be ignored for
SMTP and Exchange.
Property Description
GettingStartedEnabled When set to false, this property makes the Getting Started
component unavailable in the page editor.
Note that if any of your pages use the Getting Started component,
you must manually remove the component and save the page using
the page editor for the Getting Started component.
Default: true
HideHtmlEditorMenu When set to true, this property hides the HTML editor menu bar.
Default: false
HtmlEditorButtonRow1 Specifies the shortcut options of the first toolbar row (of the HTML
editor) and its formatting. When this property is not set, this toolbar is
disabled.
Default: bold,italic,underline,
|,forecolor,backcolor,|
alignleft,aligncenter,
alignright,alignjustify,|,
bullist,numlist,|,outdent,
indent,blockquote,|
,undo,redo,|,link,unlink,|
,image,|,table,emoticons,
|,fontselect,fontsizeselect,
|,code,fullscreen,preview
HtmlEditorButtonRow2 Specifies the shortcut options of the second toolbar row (of the HTML
editor) and its formatting. When this property is not set, this toolbar is
disabled.
Default: <blank>
Property Description
InactiveSessionExpireMins Time of user's inactivity (in minutes) before user session expires
Default: 240
IsPDFAnnotationEnabled When set to true, enables the PDF annotation feature. Default value
is false.
IsSingleUserMultiTenantEnabled Set to true to allow users to switch tenants. Only applies when all
tenants use the same authentication mode such as SAML/ADFS or
custom and when the same email address is associated with user
accounts in more than one tenant. Defaults to false.
Property Description
LoginSessionExpireMins Time from the user's login (in minutes) before the user session expires.
Default: 480
MailPassword The password for the mail user account. This property is only valid for
SMTP and Exchange. The value will be ignored for Gmail.
Default: None
MailPort The port used to access the mail server. This property is only valid for
SMTP. The value will be ignored for Exchange and Gmail.
Default: 25
MailUser The email address used for outgoing emails. This property is only valid
for SMTP and Exchange. The value will be ignored for Gmail.
Default: Copied from AdminEmail, which is required.
MailUseSSL Specifies the use of SSL or TLS encryption to access mail server. This
property is only valid for SMTP. The value will be ignored for Exchange
and Gmail. You can set this property to:
MarketplaceFreeTrialURL Specifies the URL of the page to which a user is redirected if the user
clicks "Free Trial" for an app on the Marketplace. Further instructions
to install the app are available on that page.
Property Description
MarketplaceURL Specifies the URL for the Marketplace homepage, which is installed
separately.
To enable the Marketplace, specify
http(s)://$HTTP_PORT$/master/marketplace/ as the property
value. For example, if your HTTP port is, private.company.com,
your Marketplace URL will be,
http://private.company.com:80/master/marketplace/.
If this property is commented out or if there is no value, the Rollbase
Application Directory is enabled and Marketplace is disabled for
your tenant. For information about publishing and distributing
applications to Rollbase Application Directory and Marketplace, see
Publishing and distributing applications on page 765.
MaxAjaxPerSession Maximum number of AJAX API calls per user login session
Default: 1000
MaxAlarmThreads The system will send a message to admin if number of Java threads
exceeds this value.
Default: 200
Property Description
MaxDbLongStrLength Maximum size (in chars) of long text fields (CLOBs) to be stored in
the database
Default: 80000
MaxFormulaSize Maximum size (in characters) of parsed formula. This size is checked
before sending formula to JavaScript Engine.
Default: 10240
Property Description
MaxHTTPParamLength Maximum size (in chars) of HTTP parameters processed by the system.
Default: 80000
MaxJSTimeMs Maximum elapsed time for the server-side JavaScript formula engine
per formula in ms (formula will be aborted afterwards).
Default: 3000
Property Description
MaxSyncImportFileSize
When importing data from an Excel or CSV file, the maximum size, in
bytes, for which the import will be in synchronous mode. Files above
this size will be imported in asynchronous mode.
Default: 20480
MinExpirationPolicy
The number of days after which a user's password expires on a master
tenant. A value of 0 means no expiration; defaults to 0. Administrators
on non-master tenants control password authentication from Setup <
Authentication, see Password authentication on page 875 for more
information.
MinRecursType Minimum allowed recursion interval for triggers and batch jobs:
ProgressDataServiceCORSHost Specifies the online address of the Progress Telerik host. This enables
Telerik applications to access Rollbase services. Defaults to
.*.(progress|icenium|telerik).com$
PurgeAfterDays Rollbase purges deleted records from the Recycle Bin after the
specified number of days
Default: 30
Property Description
SecurityLevel Specifies the security level for the master tenant. See Setting and
changing security levels on page 877 for more information about security
levels.
ShowDebugInfo Set this flag to true if you use the server for development work only.
This will eliminate the waiting time when deleting applications and
objects.
Default: false
ShowHelpTips When set to false, this property hides all the help tips and the Help
Me button in the footer of your Rollbase instance.
Default: true
SkipEmails Do not send email messages; dump them on standard output instead.
Use this option for the development version when no outbound email
is available. Default: false
storageUsageLimitForBkp Storage usage limit (in MB) of a full backup. For information on using
this property, see Backup and restore on page 804. Default:20
SubscribeNowURL URL to be invoked when a user clicks Buy Now (this button is
displayed in the banner for trial customers)
Default: None (Buy Now will redirect to the support portal if this setting
is not filled)
Property Description
SupportDataDirectCloud Support for managing Data Direct Cloud objects in Rollbase. When
set to false, the service is not supported. Default value is true.
SupportProgressDataCatalog Support for managing Progress Data Catalog for Telerik/Mobile app
integration. When set to false, the service is not supported. Default
value is true.
SupportTicketURL Specifies the URL of the Support Tickets link in the footer of your
Rollbase instance. Comment-out the property to hide the Support
Tickets link. When left blank, the Support Tickets link navigates to
a Progress Rollbase support page where users can raise a support
ticket for the master tenant to acknowledge.
Default: <blank>
SupportURL Specifies the URL of the Support link in the footer of your Rollbase
instance. Typically, you direct your users to a Web page where they
can get product support.
Default: http://www.progress.com/support-and-services
SystemName In the Rollbase Private Cloud evaluation version, this property sets
the link displayed in the upper-left corner of each page. Typically, this
link is set to navigate to your web site.
In the Rollbase Private Cloud licensed version, this property is
configured in license.xml file.
Default: Rollbase
TimeZones A comma-separated list of time zones. If required, add to this list any
TimeZone IDs which are a part of TimeZone.getAvailableIDs().
TitleTemplate The template for a page's title. Can be overridden by ISV partners.
See Creating and managing customer tenants on page 986 for more
information.
Default:{!A} | {!S} | {!P}
UnloadCustAfterMins Unloads the customer from the cache after period of time (in minutes)
Default: 60
Property Description
UseZipSearch Enable search by distance from ZIP/postal code. Enabling this setting
requires that RB_ZIP_CODES table be populated with actual data -
not supplied with Private Cloud
Default: false
Purpose
TCMAN is a command-line utility for managing and administering PAS. On UNIX systems, you run the tcman.sh
script followed by appropriate TCMAN actions and options. On Windows systems, you run the tcman.bat
batch file, which is identical syntactically and functionally with tcman.sh.
Note: For the sake of brevity, all the syntax statements and examples in this reference show the tcman.sh
script.
Syntax
Parameters
$CATALINA_HOME|$CATALINA_BASE
Specify whether to run TCMAN from the root directory of the installed PAS ($CATALINA_HOME) or
from the root directory of an instance ( $CATALINA_BASE). The context of where you run TCMAN
(whether from the /bin directory of the parent, or the /bin directory of an instance) affects which
server the utility acts on.
Note: TCMAN automatically determines the value of CATALINA_BASE from the directory where
you start it. When you run it from the /bin directory of an instance, the value of CATALINA_BASE
is the root directory of the instance. If you run it from the /bin directory of the installed Progress
Application Server, the value of CATALINA_BASE is the root directory of the installed server (which
is the same value as CATALINA_HOME).
action
general_options
Specify one or more of the TCMAN common options that can apply to most actions. Note that one
or more of the general options may be required by a specific action. For example, the list action
requires –u in order to pass a user name and password.
The output of tcman.sh help action includes a list of general options that are applicable to a
particular action.
The following table is a list of the common options:
-M URL
Override the default manager that manages Web
applications by specifying the URL of an
alternative manager. URL is expressed in the
following format:
{http|https}://host:port/manager_application
-B Override default
CATALINA_BASE
environment settings.
action_options
Specify an option that applies to the selected action. These options are explained in the topics
that describe each action.
Example
Run the help action from the core server (/psc/pashome) to display a list of available TCMAN actions:
/psc/pashome/bin/tcman.sh help
usage: tcman action [options...]
manager actions:
list list deployed applications
info list server info
deploy deploy application
undeploy undeploy application
reload reload application
status show server status
leaks show server memory leaks
enable start web application running
disable stop running web application
resources list server global resources
sessions list a web application's sessions
server actions:
create create a new server instance
delete delete server instance
config dump CATALINA_BASE configuration
clean clean/archive log files
instances list tracked server instances
register manually register an instance
unregister manually unregister an instance
start start this server
stop stop this server
version show the server version information
test test the server's configuration
general actions:
env show tcman execution environment
help show this information
Manager actions
This section details the actions available for deploying, running, and monitoring web applications on a server
instance.
Purpose
Display all the web applications that are deployed on an instance.
Note: This command may be used whether the instance is online or offline. However, the output differs. When
used offline, TCMAN simply shows a list of deployed application directories in the instance's web applications
directory. When used online, it provides additional run-time details about the deployed web applications.
To use this action, the Tomcat manager (manager.war) must be deployed on the instance if the instance is
online. You can deploy manager.war from $CATALINA_HOME/extras.
Syntax
Parameters
general_options
Specify one or more of the options that can be used with any TCMAN action. Run tcman.sh help
list to see which general options are appropriate.
-u user_id:password
Specify a valid user name and password for HTTP Basic access authentication. (The default is -u
tomcat:tomcat.)
Note: This option is required if the server is online. It is not required if the server is offline.
Example
Show the Web applications deployed to acme1 when the instance is online:
Show the Web applications deployed to acme1 when the instance is offline:
/psc/acme1/bin/tcman.sh list
OK - Listing directories for /psc/acme1/webapps
/manager:stopped:0:manager
/oeadapters:stopped:0:oeabl
/oemanager:stopped:0:oemanager
/:stopped:0:ROOT
Purpose
Display server and OS information for a running instance.
To use this action, the Tomcat manager (manager.war) must be deployed on the instance and the instance
must be running. You can deploy manager.war from $CATALINA_HOME/extras.
Use the test action to show configuration information about a server that is not running.
Syntax
Parameters
general_options
Specify one or more of the general TCMAN options. Run tcman.sh help info to see which
general options are appropriate.
-u user_name:password
Pass a valid user name and a password for HTTP Basic access authentication. (The default is -u
tomcat:tomcat.)
Example
Display the OS and server information for the running instance named acme1:
Purpose
Deploy a Web application (.war file) to a PAS instance whether the server is running (online) or is not running
(offline). TCMAN copies the web application to the server’s web application directory. If the server is online,
you must stop and restart it in order to complete the deployment.
Syntax
Parameters
general_options
Specify one or more of the general TCMAN options. Run tcman.sh help deploy to see which
general options are appropriate.
-u user_id:password
Specify a valid user name and password for HTTP Basic access authentication.
Note: This option is required if the server in online. It is not required if the server is offline.
-a app _name
Specify a name for the web application. If you do not use this option, the application name will be
the same as the .war file name.
war_file_path
Specify the location of the web application .war file that you want to deploy.
Example
Deploy and rename oeabl.war (a web application that implements OpenEdge adapters) to the acme1 instance
of the core pashome server:
Purpose
Remove a Web application from running (online) or stopped (offline) instances. If the instance’s autodeploy
option is off, you must stop and restart a running server to complete removal. Note that the autodeploy option
is set in the .../conf/appserver.properties file and is off by default.
Syntax
Parameters
general_options
Specify one or more of the options that can be used with any TCMAN action. Run tcman.sh help
undeploy to see which general options are appropriate.
-u user_id:password
Specify a valid user name and password for HTTP Basic access authentication. (The default is -u
tomcat:tomcat.) This option is required if you are accessing an online instance.
app_name
Example
Remove the oemanager application from the acme1 instance:
Purpose
Restart a deployed, running Web application so that the application can pick up changes to its classes or
libraries.
To use this action, the Tomcat manager (manager.war) must be deployed on the instance and the instance
must be running. You can deploy manager.war from $CATALINA_HOME/extras.
Note: The reload action does not reload the web application's web.xml file. To begin using changes to
web.xml, you must stop and restart the web application.
Syntax
Parameters
general_options
Specify one or more of the options that can be used with any TCMAN action. Run tcman.sh help
reload to see which general options are appropriate.
-u user_id:password
Specify a valid user name and password for HTTP Basic access authentication. (The default is -u
tomcat:tomcat.)
Note: This option is required if the server in online. It is not required if the server is offline.
app_name
Example
Reload the oemanager web application running on the acme1 instance:
Purpose
List the process ids for all the processes that are running under an instance.
Syntax
Parameters
general_options
Specify one or more of the options that can be used with any TCMAN action. Run tcman.sh help
plist to see which general options are appropriate.
-f
Display verbose output. The output is indented and uses the plus (+) character to indicate parent-child
relationships.
Examples
Display process id's for the running instance, acme1 using the -v and -f options:
/psc/acme1/bin/tcman.sh plist -v
info: showing process ids for server 5942
5942 5963 5975 5988 6001 6015
/psc/acme1/bin/tcman.sh plist -f
5942
+5963
+5975
+5988
+6001
+6015
Notes
The plist action is useful for administrative tasks such as:
• Checking to see if processes persist after an instance is stopped.
• Checking if an multi-session agent process has started and is available
• Checking if an instance is running. Output is 0 if it is not running.
• Using the output (which is easily parseable) in administrative scripts.
Purpose
List information from the core server’s memory, including web application statistics. Information includes memory
pool usage, connector thread status, and connector status. Output is in XML format. (Note that redirecting the
output to an XML viewer makes it more readable.)
To use this action, the Tomcat manager (manager.war) must be deployed on the instance and the instance
must be running. You can deploy manager.war from $CATALINA_HOME/extras.
Syntax
Parameters
general_options
Specify one or more of the general TCMAN options. Run tcman.sh help status to see which
general options are appropriate.
-u user_name:password
Pass a valid user name and a password for HTTP Basic access authentication. (The default is -u
tomcat:tomcat.)
-f
Example
Display core server's memory and web application statistics and use xmllint to format for readability:
Purpose
List Web applications with potential memory leaks.
To use this action, the Tomcat manager (manager.war) must be deployed on the instance and the instance
must be running. You can deploy manager.war from $CATALINA_HOME/extras.
Syntax
Parameters
general_options
Specify one or more of the general TCMAN options. Run tcman.sh help leaks to see which
general options are appropriate.
-u user_name:password
Pass a valid user name and a password for HTTP Basic access authentication. (The default is -u
tomcat:tomcat.)
Example
Display memory leaks for web applications deployed on the acme1 server instance:
Purpose
Start a web application that is deployed but not running.
To use this action, the Tomcat manager (manager.war ) must be deployed on the instance and the instance
must be running. You can deploy manager.war from $CATALINA_HOME/extras.
Syntax
Parameters
general_options
Specify one or more of the options that can be used with any TCMAN action. Run tcman.sh help
start to see which general options are appropriate.
-u user_id:password
Specify a valid user name and password for HTTP Basic access authentication. (The default is -u
tomcat:tomcat.)
app_name
Note: To start the ROOT web application, you can specify / or ROOT.
Example
Start the oeabl application deployed on the acme1 instance:
Purpose
Stop a running Web application.
To use this action, the Tomcat manager (manager.war ) must be deployed on the instance and the instance
must be running. You can deploy manager.war from $CATALINA_HOME/extras.
Syntax
Parameters
general_options
Specify one or more of the general TCMAN options. Run tcman.sh help disable to see which
general options are appropriate.
-u user_id:password
Specify a valid user name and password for HTTP Basic access authentication. (The default is -u
tomcat:tomcat.)
app_name
Note: To disable the ROOT web application, you can specify / or ROOT.
Example title
Disable the oeabl application running on the acme1 instance:
Purpose
List the global resources used by the core server.
To use this action, the Tomcat manager (manager.war) must be deployed on the instance and the instance
must be running. You can deploy manager.war from $CATALINA_HOME/extras.
Syntax
Parameters
general_options
Specify one or more of the general TCMAN options. Run tcman.sh help resources to see
which general options are appropriate.
-u user_name:password
Pass a valid user name and a password for HTTP Basic access authentication.
(The default is -u tomcat:tomcat.)
Example
Display global resources for the running instance, acme1:
Purpose
Display how many sessions are active for the specified Web application, categorized by their duration.
To use this action, the Tomcat manager (manager.war ) must be deployed on the instance and the instance
must be running. You can deploy manager.war from $CATALINA_HOME/extras.
Syntax
Parameters
general_options
Specify one or more of the options that can be used with any TCMAN action.
-u user_id:password
Specify a valid user name and password for HTTP Basic access authentication. (The default is -u
tomcat:tomcat.)
app_name
Specify the name of the web application to analyze for session information.
Example
Show the active sessions for the manager application deployed on the acme1 instance:
Server actions
This section details the actions available for creating and monitoring server instances.
Purpose
Create a new instance of the core PAS server by running this action from /bin directory of the core server (
$CATALINA_HOME/bin/tcman.sh create).
Syntax
Parameters
general_options
Specify one or more of the general TCMAN options. Run tcman.sh help create to see which
general options are appropriate.
–f
Copy all deployed web application archives (.war files) from $CATALINA_HOME to the new instance.
–p port_num
Specify the TCP port that listens for HTTP messages. The default is 8080.
–P port_num
Specify the TCP port that listens for HTTPS messages. The default is 8443.
–s port_num
Specify the TCP port to use to stop an instance. On Windows systems, you must specify a shutdown
port. On UNIX, shutdown ports are optional.
–j port_num
Specify the TCP port that listens for AJP13 messages (an Apache protocol for handling requests
from a web server to an application server). The default is 8009.
-m uid:pwd
Specify a user name and password that will be required to access Tomcat container-level security,
which includes the manager and oemanager web applications. Replaces the defaults
(tomcat:tomcat) in /conf/tomcat-users.xml.
–W pathname
Specify the directory where web applications will be deployed. The default is
$CATALINA_BASE/webapps.
–N instance_alias
Specify an alias for the instance. If you do not specify an alias, the instance name will be the name
of the directory where the instance is created.
Note:
All instances are automatically registered for tracking when they are created. However, for tracking
to function, the instance name must not contain spaces or any of the following characters: "[ .
# | ] $ ? + = { / , }"
–U user_id
Specify the user-id of the owner of all the files and directories of the instance. The default is the
user-id of the current process. –G must be specified if you use this option.
–G group_id
Specify the group-id of the owner of all the files and directories of the instance. The default is the
group-id of the current process. –U must be specified if you use this option.
-Z {dev | prod }
Specify the security model of the instance to development (dev) or secure (prod).
A typical use of this option is for testing web applications in a secure server environment before
packaging and deploying.
Note: The -Z prod option does not create a production server. To actually create a production
server, you must have a production server license.
base_path
Example
Create an instance of /psc/pashome in /psc/acme1:
Purpose
Remove the directory tree and all of the files in an instance. Alias tracking is disabled for servers that are
removed.
To execute this action, the instance cannot be running.
Note: You cannot recover any files or directories removed by the delete action. Backup anything you want
to save before launching this action.
Also note that you cannot use delete to remove the installed, root server ( $CATALINA_HOME ).
Syntax
Parameters
general_options
Specify one or more of the general TCMAN options. Run tcman.sh help delete to see which
general options are appropriate.
-y
base_path
alias_name
Refer to the instance that you intend to delete by its alias rather than its pathname.
Example
Delete the instance of pashome that was created in /psc/acme3:
Purpose
View, add, update, or delete the property values specified in ../conf/appserver.properties and in
../conf/catalina.properties.
When you run tcman.sh config with no parameters, it displays the core Tomcat server’s configuration, and
all the properties in both .../conf/appserver.properties and .../conf/jvm.properties. Note,
however, that you can only view jvm.properties. You cannot modify its contents with the config action.
Syntax
[general_options]
tcman.sh config
[prop_name|prop_name=value|+prop_name=value|~prop_name]
Parameters
general_options
Specify one or more of the general TCMAN options. Run tcman.sh help config to see which
general options are appropriate.
prop_name
prop_name=value
+prop_name=value
~prop_name
Examples
Show the configuration and properties of acme1, an instance of the core server, pashome:
$: /psc/acme1/bin/tcman.sh config
Using CATALINA_BASE: /psc/acme1
Using CATALINA_HOME: /psc/pashome
Using CATALINA_TMPDIR: /psc/acme1/temp
Using JRE_HOME: /tools/linuxx86_64/java64/jdk1.7.0_02/
Using CLASSPATH: /psc/pashome/bin/bootstrap.jar:/psc/pashome/bin/tomcat-juli.jar
Using CATALINA_PID: /psc/acme1/temp/catalina.pid
Server version: Apache Tomcat/7.0.42
Server built: Jul 2 2013 08:57:41
Server number: 7.0.42.0
OS Name: Linux
OS Version: 2.6.18-164.el5
Architecture: amd64
JVM Version: 1.7.0_02-b13
...
Update the value of a property that exists in the appserver.properties file and then check the value:
Add a new property/value pair to the appserver.properties file and check the value:
Remove a property/value pair from the appserver.properties file and check if deletion was successful:
Caution: There are no restrictions to property removal. The server will be unable to start if you remove a
property required by conf/server.xml.
Notes
• All property names are case sensitive.
• You cannot enter multiple property names (prop_name) on the command line to view, update, or add
properties to the appserver.properties file.
• You cannot use the config action to update existing values or add new values to the jvm.properties file
Purpose
View, enable, or disable the server features contained in the /conf/server.xml file of an instance.
When you run tcman.sh feature with no parameters, it displays a list of the features (and their current
status) that you can enable or disable. You can also display the status of a single server feature. After viewing
the status of a feature, you can use tcman.sh feature to change its setting.
Syntax
Parameters
general_options
Specify one or more of the general TCMAN options. Run tcman.sh help feature to see which
general options are appropriate.
feature_name
Specify one of the features defined in an instance's conf/server.xml file. Running tcman.sh
feature without feature_name displays a list of all the features.
on
off
Example
Display the list of server feature settings for acme1, enable AJP13 (Apache JServ Protocol. version 1.3), and
verify that the feature is enabled:
$: /psc/acme1/bin/tcman.sh feature
SecurityListener=off
JMXLifecycle=off
PSCRegistry=on
HTTP=onHTTPS=on
AJP13=off
Cluster=off
UserDatabase=on
JAASRealm=off
LDAPRealm=off
PASInstrument=off
RemoteHostValve=on
RemoteAddrValve=onSingleSignOn=on
AccessLog=on
CrawlerSessionManager=on
StuckSessionValve=on
Notes
• Server features for instances are set in $CATALINA_BASE/conf/server.xml. You can change feature
status by manually editing this file. However, it is safer to use tcman.sh feature to avoid corrupting the
file with erroneous entries.
• Run tcman.sh feature when the instance is offline.
Purpose
Truncate, move, or delete the log files located in the /logs directory of the core server or instance. If the server
is running, clean truncates log files to zero length. If the server is not running, clean deletes the log files from
the file system.
You have the option to save log files to a subdirectory of /logs.
Syntax
Parameters
general_options
Specify one or more of the general TCMAN options. Run tcman.sh help clean to see which
general options are appropriate.
-A
Example
Archive the log files of acme1, an instance of the core server pashome, and save to a file:
Purpose
Show the names and locations of the instances created from the PAS installed in $CATALINA_HOME by
displaying the contents of the file where instances are registered for tracking.
By default, instances are registered for tracking $CATALINA_HOME/conf/instances.{windows|.unix}.
The file name extension indicates the OS platform where the PAS server is installed.
Syntax
Parameters
general_options
Specify one or more of the general TCMAN options. Run tcman.sh help instances to see
which general options are appropriate.
Output format
The following is the format of the output from a TCMAN instances action:
alias-name
full-file-path
type
The designation of the server instance type (for example: instance, service, . . .).
state
An indication of the instance's validity. OK is returned for a valid server and invalid is returned for
a corrupted or non-existant server.
Example
Display the instances of the core server installed in /psc/pashome:
/psc/pashome/bin/tcman.sh instances
acme1 | /psc/wrk/acme1 | instance | ok
acme2 | /psc/wrk/acme2 | instance | ok
Notes
• By default, instances are registered when you execute a $CATALINA_HOME/bin/tcman{.sh|.bat}
create action, which automatically adds instance entries to an instances file. TCMAN removes instance
entries from the file when you execute a delete action.
You can manually add or remove instance entries from instances by using the register or unregister
actions.
• By default, the name and location of the file where instances are registered is
$CATALINA_HOME/conf/instances.{windows|.unix}.
You can change the location of the instance registration file by adding and setting the psc.as.instdir
property in the appserver.properties file. Use the TCMAN config action as in the following example:
Purpose
Register an instance for tracking purposes.
Note:
Instances are automatically registered for tracking when you execute a create action. You use the register
action to restart tracking on instances after tracking was stopped.
A typical use for unregistering and then re-registering an instance is to make configuration changes when
moving instances from one location (core server) to another. The register action enables tracking and also
updates the value of CATALINA_HOME in all of the executable scripts in the instance's /bin directory to refer
to the new core server.
Syntax
Parameters
alias_name
Specify a meaningful name for the instance. The alias name must be unique in the instances file.
instance_path
Specify the OS file system path to where the instance exists. This value will be expanded into a fully
qualified OS directory path and will be verified to exist.
Example
Track test1, which is an alias for the instance /psc/acme1:
Notes
When you register an instance for tracking or create a new instance with the create command, an entry is
created in the core Progress Application Server’s $CATALINA_HOME/conf/instances.[unix|windows]
file.
The instances.[unix|windows] file is a simple text file, which can be manually edited (with care) in the
event that it becomes out of date. The format for entries is:
instance_name = base_path
An instances.unix file uses Unix OS file path syntax (forward slashes), and an instances.windows file
uses Windows OS file path syntax (backslashes) to specify base_path.
Also note that in an instances file:
• Any line starting with a pound-sign ( # ) is a comment line.
• Blank lines are skipped.
• Instance names cannot contain spaces or any of the following characters: "[ . # | ] $ ? + = { /
, }"
Purpose
Stop tracking an instance by removing the instance's entry from the
$CATALINA_HOME/conf/instances.[unix|windows] file.
Note:
You use the register action to restart tracking on instances after tracking was stopped with unregister .
A typical use for unregistering and then re-registering an instance, is to make configuration changes when
moving instances from one location, or core server, to another. The register action not only enables tracking,
it also updates the value of CATALINA_HOME in all of the executable scripts in the instance's /bin directory
to refer to the new core server.
Syntax
Parameters
alias_name
Specify the alias name of the instance that you want to stop tracking. The alias name must exist in
an instances.[unix|windows] file.
Example
Stop tracking test1, which is an instance of /psc/pashome:
Purpose
Start an instance of a PAS, optionally in debug mode.
Syntax
Parameters
general_options
Specify one or more of the general TCMAN options. Run tcman.sh help start to see which
general options are appropriate.
-D
-J
Start the server in debug mode using the JDPA (Java Platform Debugger Architecture) APIs for
debugging. –J cannot be used if the –D option is specified.
Before you run a server with the –J option, you must define a port for the JDPA debugger by setting
the JDPA_ADDRESS environment variable to a unique TCP network port number.
Example
Start the server in /psc/acme1, which is an instance of the core server in /psc/pashome:
/psc/acme1/bin/tcman.sh start
Using CATALINA_BASE: /psc/acme1
Using CATALINA_HOME: /psc/pashome
Using CATALINA_TMPDIR: /psc/acme1/temp
Using JRE_HOME: /tools/linuxx86_64/java64/jdk1.7.0_02/
Using CLASSPATH: /psc/pashome/bin/bootstrap.jar:/psc/pashome/bin/tomcat-juli.jar
Using CATALINA_PID: /psc/acme1/temp/catalina.pid
Notes
• When the TCMAN utility starts the server, it verifies the creation of the OS process and then records the
server's process-id in a .pid file. The location of the .pid file is:
UNIX $CATALINA_BASE/temp/catalina-instance_name.pid
Windows $CATALINA_BASE\logs\catalina-instance_name.pid
• You can obtain the process id of a server by running the TCMAN env action.
Purpose
Stop a running instance, either gracefully or forcibly.
Note: TCMAN supports stopping a server instance that is not configured with a shutdown port.
On UNIX platforms stopping the running server instance is accomplished by sending a UNIX signal to the PAS
process. Therefore, the administrator's process must have the UNIX permissions to signal the PAS process.
On Windows platforms, the instance is identified using an OS process id that is used to stop server processes.
Syntax
Parameters
general_options
Specify one or more of the general TCMAN options. Run tcman.sh help stop to see which
general options are appropriate.
-F
Kill the sever process if it does not stop after a default wait time (5 seconds on UNIX, 10 seconds
on Windows). Change the default wait interval by using the –w option.
-w seconds
Optionally specify the number of seconds to wait before killing a server process.
Example
Stop the server in /psc/acme1, which is an instance of the core server in /psc/pashome:
/psc/acme1/bin/tcman.sh stop
Using CATALINA_BASE: /psc/acme1
Using CATALINA_HOME: /psc/pashome
Using CATALINA_TMPDIR: /psc/acme1/temp
Using JRE_HOME: /tools/linuxx86_64/java64/jdk1.7.0_02/
Using CLASSPATH: /psc/pashome/bin/bootstrap.jar:/psc/pashome/bin/tomcat-juli.jar
Using CATALINA_PID: /psc/acme1/temp/catalina.pid
Notes
• TCMAN supports stopping a server instance that is not configured with a shutdown port.
On UNIX platforms stopping the running server instance is accomplished by sending a UNIX signal to the
PAS process. Therefore, the administrator's process must have the UNIX permissions to signal the PAS
process. On Windows platforms, the instance is identified using an OS process id that is used to stop server
processes.
The following is an example a message you would see after a forced shut down with no shut down port:
UNIX $CATALINA_BASE/temp/catalina-instance_name.pid
Windows $CATALINA_BASE\logs\catalina-instance_name.pid
• You can also obtain the process id of a server by running the TCMAN env action.
Purpose
Show the Apache Tomcat runtime version and OS information for an instance.
To execute this action, the instance cannot be running
Syntax
Parameters
general_options
Specify one or more of the general TCMAN options. Run tcman.sh help version to see which
general options are appropriate.
Example
Display the server and runtime information for acme1, an instance of the core server installed in /psc/pashome:
Purpose
Displays information on the configuration and environment of an instance. It also displays information about
error conditions.
The test action starts a server (instance), loads all the configuration files, and then displays information. The
instance is stopped, exiting gracefully even if there is an error condition.
To execute this action, the instance cannot be running.
Syntax
Parameters
general_options
Specify one or more of the general TCMAN options. Run tcman.sh help test to see which
general options are appropriate.
Example
Run a test of the configuration of acme1, which is an instance of the core server installed at /psc/pashome:
Notes
The test action is particularly useful for testing to verify that a server will start and run properly after you make
changes to configuration and properties files.
Purpose
(Windows only) Registers or unregisters an instance as a Windows service. After an instance is registered,
you can start, stop, or check the status of the service with this action.
Note: Before you register an instance as a Windows service, you must install JDK 1.8 (for example, jdk1.8.0_66)
and set the environment variable JAVA_HOME=C:\Program Files\Java\jdk1.8.0_66.
Syntax
Parameters
general_options
Specify one or more of the general TCMAN options. Run tcman.bat help service to see which
general options are appropriate.
alias_name
A required parameter that specifies the name of a PAS instance that was created using tcman
create.
register
Create a new Windows service that runs the named PAS instance alias_name..
Set the PR_DISPLAYNAME and/or PR_DESCRIPTION variables to change the display name and
description of the PAS instance service that appears in the Windows Service utility (Services tab of
the Task Manager). The defaults for these variables are:
Variable Default
Set these variables before you register the instance. For example, if you wanted to change the
defaults for oepas1:
unregister
Delete the Windows service that runs the named PAS instance alias_name
start
Start the Windows service that corresponds to the named PAS instance alias_name. The Windows
service may also be started using the Windows service console or the SC command line utility.
stop
Stop the Windows service that corresponds to the named PAS instance alias_name. The Windows
service may also be stopped using the Windows service console or the SC command line utility.
status
The registration status of the Windows service corresponding to the named PAS instance
alias_name. The Windows service's status may be monitored using the Windows service console
or SC command line utility
Example
Register the default instance oepas1 as a Windows, then start, check status, stop, and unregister:
Note
Be sure that the instance is not running before you attempt to register/unregister it.
Purpose
Create a preliminary worker.properties file that supports the configuration of supporting servers (workers)
for a Progress Application Server (PAS) instance.
in the Apache Reference Guide, a worker is defined as an "instance that is waiting to execute servlets or any
other content on behalf of some web server." In the context of the Progress Application Server, a worker is a
server that is called by a PAS instance to perform a specific task. Typically,you would define worker instances
to manage proxies, load balancing, clusters, or status monitoring. (For links to information on this functionality,
see the Apache Tomcat Documentation Index.) There are probably other situations where you could improve
the performance of a server instance by configuring worker instances to handle specific processing tasks.
In Apache Tomcat, workers are configured in a worker.properties file. The protocol implemented for
communication between servers and workers is the Apache JServ Protocol (version 1.3, referred to as AJP13).
In TCMAN, the workers action adds the definitions of registered PAS instances to the content of the
$CATALINA_HOME/extras/workers.template file and puts the result in
$CATALINA_HOME/temp/worker.properties. The template file supplies a set of common directives that
are referenced by all of the defined PAS instances. Individual instance definitions contain only the properties
that are unique to the instance, such as the AJP13 network connection port. (See Table 12: worker.properties
example on page 972.)
The /temp/worker.properties created by the workers action is a preliminary configuration file that you
will probably need to modify to implement your deployment. See The Apache Tomcat Connector-Reference
Guide for more information about configuring workers.
Syntax
Parameters
general_options
Specify one or more of the general TCMAN options. Run tcman.sh help worker to see which
general options are appropriate.
worker_list
A comma separated list of instance names and/or keywords. The keywords are:
If no worker_list is specified, the default worker list (all instances registered to CATALINA_HOME)
will be added. If no instances have been created, then the default worker_list is
CATALINA_HOME.
Examples
Assume there are:
• Two registered instances (piw1 and piw2) that serve Web applications
• A Tomcat load balancer instance (jklb) that distributes the workload between piw1 and piw2
• A status instance (jkstatus) that is used to monitor the runtime status of piw1 and piw2
The following are examples of worker-lists showing various combinations of keywords and instances, and the
resulting content in $CATALINA_HOME/temp/worker.properties:
blank Default entries from worker.template plus entries for piw1 and piw2
all Default entries from worker.template plus entries for piw1 and piw2
home Default entries from worker.template plus an entry for core server
(CATALINA_HOME)
home, all Default entries from worker.template plus an entry for core server,
(CATALINA_HOME), and entries for for piw1 and piw2
lb, status Default entries from worker.template plus entries for jklb, jstatus, piw1,
and piw2
lb, status, home, all Default entries from worker.template plus entries for jklb, jstatus, the
core server (CATALINA_HOME),piw1, and piw2
The following is an example workers.properties file that includes entries for instances piw1 and piw2:
#
# Global properties
#
# worker.maintain=60
#
# Common worker properties referenced by individual workers
#
worker.common.type=ajp13
worker.common.host=${psc.as.host.name}
worker.common.socket_timeout=10
worker.common.connect_timeout=10000
worker.common.socket_keepalive=true
worker.common.ping_mode=I
worker.common.ping_timeout=10000
worker.common.connect_timeout=0
worker.common.retry_interval=100
worker.common.recovery_options=7
# worker.common.connection_ping_interval=10000
# worker.common.fail_on_status=0# worker.common.max_packet_size=8192
# worker.common.recover_time=60
Notes
• The tcman workers action must be run from the PAS installation's $CATALINA_HOME/bin directory.
• The /extras/workers.template file can be modified to adjust existing properties or to add additional
static information. However, you cannot replace the common properties with a unique set of properties for
each defined server.
Purpose
(Windows only) Show information about the process specified by a process id.
Syntax
Parameters
general_options
Specify one or more of the options that can be used with any TCMAN action. Run tcman.sh help
showproc to see which general options are appropriate.
process-id
The numerical identifier of a Windows process. You can obtain a list of process ids by running the
TCMAN plist action.
Examples
Display process id's for the running instance, acme1, then specify process ids to show detailed information.
/psc/acme1/bin/tcman.bat plist -v
info: showing process ids for server with window title 13332
13332 14240
General actions
This section details the actions available for displaying help and server runtime environment information.
Purpose
Display summary or detailed help for all TCMAN actions, property names, and server features.
Syntax
Parameters
action
Show the syntax and options of the specified action. If no action is specified, show a list of all actions
and the general options.
property
feature
Example
Display the usage help for the create action:
general options:
-u uid:pwd pass uid and pwd for HTTP BASIC authentication
-v print verbose output
-M url override the CATALINA_BASE manager's URL with
<{http|https}://<host>:<port>/<mgr-app>
-B override CATALINA_BASE environment setting
-n debug run action but do not execute changes
Purpose
Show details about a server’s state.
Syntax
Parameters
general_options
Specify one or more of the general TCMAN options. Run tcman.sh help env to see which general
options are appropriate.
keyword
Specify one or more keywords that represent the name of the state that you want to view. If no
keyword is specified, then all of the state information is displayed.
Keywords include:
Keyword Description
Example
Display all of the state information for the instance created in /psc/acme1:
/psc/acme1/bin/tscman.sh env
catalina home: /psc/pashome
catalina base: /psc/acme1
java home: /tools/linuxx86_64/java64/jdk1.7.0_02/
jre home:
manager http port: 8501
manager https port:8601
manager shut port: 8701
manager URL: http://localhost:8501/manager
config type: instance
config alias: acme1
config parent: /psc/pashome
server running: 0
instance tracking: 1
instance file: /psc/pashome/conf/instances.unix
server process-id: -
ISV accounts for both hosted and Private Cloud support white labeling functionality and give you the ability to
provision and manage customer tenants directly. A customer tenant is a virtual space that securely hosts
applications and data and provides a working environment for a set of users. This allows you to run your own
Software as a Service (SaaS) business and take advantage of the Rollbase platform for rapid development
and secure deployment of applications that meet critical business needs.
ISV features
For ISV pricing or to purchase, contact Progress. Rollbase provides the following benefits to all ISV customers:
• ISV account: Hosted Rollbase standard customers receive a special account that provides the ability to
create and manage customer tenants. This eliminates dependencies on Progress for deployment and
maintenance. Rollbase Private Cloud customers can set up any number of ISV Accounts for their own
customers.
• Custom login and password retrieval pages: ISVs with dedicated websites for their companies and products
can host their own branded pages for log in and forgotten passwords, making the use of Rollbase transparent
to end users. Any number of custom login pages can be created and hosted externally allowing you to have
different login mechanisms for each application, dedicated login pages for key customers, or a central login
for all of your customers.
• Custom Marketplace: You can set up a custom branded, private Marketplace or Application Directory allowing
your customers and prospects to view and install applications directly from their website.
• Customizable platform name: It is simple to replace Rollbase with your own product, platform or company
name.
• Customizable URLs: All default external links within the platform that point to company-hosted pages, such
as terms of service, privacy statement, etc, can be redirected to your pages. Hosted cloud ISV customers
will still see www.rollbase.com in the browser address bar. Private Cloud customers will see
www.yourdomain.com.
Note: Starting with Rollbase 4.0, in hosted Rollbase, Marketplace replaces the Application Directory. However,
for Rollbase Private Cloud users who have moved from earlier versions of Rollbase to Rollbase 4.0, Marketplace
is provided as an alternative to the Application Directory. Administrators of the master tenant can choose
Marketplace or Application Directory to publish and distribute their applications.
The topics in this section describe how to work with hosted Rollbase or Rollbase Private Cloud as an ISV.
• Getting started
• System applications
Getting started
Hosted Rollbase customers receive an ISV account that allows tenant and application management. When
the ISV account is created, you receive a welcome email from Rollbase that allows you to log in and start
creating customer tenants.
When you log in, you will want to view and modify your ISV accounts settings. And, you can change these
settings at any time. However, note that once you have customer tenants that changes made to ISV account
settings will not be applied immediately. Please contact Rollbase support if you need these to be activated
within 24 hours.
To view and modify your ISV settings:
1. From the drop-down menu next to your profile avatar, select Update Profile. The Personal Setup page
opens.
2. Click My Settings to view or modify your settings.
3. If you are a Private Cloud user, restart your servers for the recently modified changes to take effect. If you
are a hosted Rollbase user, contact Rollbase Customer Support to update the ISV settings.
In addition to the usual Rollbase user settings, you will see the ISV-specific options described in the table
below. All fields are optional.
ISV Login URL isvLoginUrl The URL to your custom login page
System applications
When a Rollbase customer (i.e. tenant) is created, one or more system applications are installed. A system
application must always contain the User object, which is necessary for the functioning of every Rollbase tenant
(otherwise no users would be able to log in). System applications also include other important components
which cannot be created using regular setup functions:
• An errMsg parameter is optional. If this HTTP parameter is set in the login page, URL errors, such as an
invalid user name, will be captured and displayed as error messages.
If a login is unsuccessful, Rollbase will redirect the user back to your custom login page and display the
error description set in the HTTP parameter errMsg. Progress strongly recommends that your custom login
page captures and displays this error message when it is not empty.
• An o parameter is optional. If this HTTP parameter is set in the login page URL, it will be captured and
stored in the o hidden parameter. For example, this parameter might contain the location of the first landing
page.
<body>
<tr>
<td><h2>Forgot your password?</h2><td>
<tr>
<tr>
<td colspan="2">In order for us to reset your password we need to confirm your identity.
Please enter your user name. <br>You will receive an email with a new temporary
password.</td>
</tr>
<tr>
<td nowrap><b>User Name:</b></td>
<td ><input name="loginName" size="30" type="text"></td>
</tr>
<tr>
<td nowrap><b>Email Address:</b></td>
<td ><input name="email" size="30" type="text"></td>
</tr>
<tr height='5'><td></td></tr>
<tr>
<td></td>
<td alignment='left'><input type="submit" value=" Submit " name="btnS"></td>
</tr>
</table>
</form>
</body>
</html>
Note: Using a third party cloud service for storage can impact performance because files and images are not
served directly by Rollbase but from that third party. Progress recommends that you test the performance of
your selected storage provider before deploying cloud storage in production scenarios.
After you have enabled cloud storage, the files will be moved to your storage account in an asynchronous
mode. The tenant administrator will receive an email with summary of the moved files. After that, you can delete
the local files to save disk space.
All errors related to third-party cloud services are logged in the storage.log file. Please review this file if
you're having problems with remote storage.
See the following topics for more information:
• Using Amazon S3
• Using Microsoft Azure
Using Amazon S3
To use the Amazon S3 service for file storage, you need to have an S3 subscription and you must have at
least one bucket, your Access Key ID and Secret Access Key. You can retrieve the S3 ID and S3 Key values
for your AWS account by logging in and navigating to the Security Credentials screen.
Enabling S3 storage
To enable Amazon S3 Storage per customer tenant, follow these steps:
1. Navigate to the ISV Partner application.
2. From the Customers List on the Customers tab, find the customer tenant for whom you want to enable
S3 storage and click Edit.
3. Scroll down to the Cloud Storage section and from the Cloud Storage drop-down, select Amazon S3.
Note: If you do not see the following fields when you edit a customer tenant, use the Design This Page
to add them from the Available Components section.
• S3 Key: The Secret Access Key associated with the Access Key ID.
5. For debugging purposes only, deselect Secure to disable SSL. For production systems, you should leave
this box unchecked.
Note: If you want to move your storage from cloud-cloud, local-cloud, or cloud-local, you must select the
Storage Move option from the Customer record More Actions menu. Then, select your desired storage option
from the New Storage drop-down list and enter the required storage details.
• The name of your Azure account. Optionally you can add "/" followed by customer-specific text prefix which
will be added to container names used by customer. Prefixes allow storage for several customer tenants
to use the same Azure account.
• The Account Key, which plays the role of a password. Click Manage Keys at the bottom of the Azure
Management Portal page to obtain this key.
Note: Azure account and prefix names can only contain lower-case letters, digits, and hyphens "-" (but not two
hyphens in sequence). The length of the prefix cannot exceed 16 characters. The system will automatically
format specified prefix to match these Azure limitations.
The following examples illustrate how the Azure storage area relates to the specified Account Name:
rollbase Rollbase
data
template
rollbase/test Rollbase
testdata
testtemplate
rollbase/TEST_#1 Rollbase
test-1data
test-1template
5. Select SSL if you are using secure communication to transfer data from Rollbase to Microsoft Azure. This
option is selected by default. You can disable SSL for debugging purposes.
Note: If you want to move your storage from cloud-cloud, local-cloud, or cloud-local, you must select the
Storage Move option from the Customer record More Actions menu. Then, select your desired storage option
from the New Storage drop-down list and enter the required storage details.
Use sandbox customer tenants to develop and test your applications. Then use the XML publishing mechanism
described in Publishing and distributing applications on page 765 to publish your application and deploy/update
each application in your production customers.
• The Login button logs you in to a customer tenant as a super-admin, an invisible user with full access.
• From the More actions drop-down, the Login As option allows you to log in to a customer tenant as a
particular user.
• The View Logs button allows you to view system logs that are useful for troubleshooting.
• From the More actions drop-down, the Re-index option allows you to recreate the full-text search index
for that customer.
Note: To minimize the impact on user sessions, try to choose a period of zero or low usage for pushing
application updates.
• If you installed the application from the Application Directory/Marketplace, click Check for Updates in the
application view page. If a newer version exists, you will be prompted to install it from the application directory.
For details, see Installing and updating applications from the Application Directory on page 291.
• If you installed an application directly from XML, obtain the new version of the Rollbase application XML
file and install it from the application view page. For details, see Installing and updating applications from
XML on page 293.
• Move the current application XML into a new Application History record.
• Replace the current application XML with that of the selected older version.
• Increment the current Published Application version #.
The roll back action simply creates a new version out of an older version of the application's XML, and makes
the selected version current. This action does not actually push updates to any tenants, but it does everything
to prepare you for doing this.
For example: If the current version # of your app is 3 and you choose to roll back to version 2, the result will
be version 4 which is identical to version 2. There are several reasons for treating the rolled back version as
a new app version #, primarily so that all tenants who have already installed that app are automatically aware
that there is a new version available and so that the "push updates" process rolls out the correct version of the
app. Once a roll back is done, the application XML can then be pushed to customers using the standard "Push
Updates" button (see next section).
If you do not see the Application History section as shown above when viewing a published application, edit
that page and create a new section, then drag in the Application History component from the Available
Components section in the sidebar.
Topics in this section describe Rollbase APIs, built-in CSSs, and field types.
• Server-side API
• Client-side JavaScript
• Code Generator
• Field types
Server-side API
This section describes server-side APIs that can be used in formulas, formula fields, and triggers. See the
heading topic for each set of APIs to see where they can be used.
Access control permissions apply to server-side APIs that view, edit, create, or delete records. Each API that
requires access control states which type of permission is required.
• The current user (Portal User or Portal Guest role for portals)
• The system role Server API
If neither the current user nor the Server API role has appropriate permissions to use the API, the API call
fails.
For APIs that require administrative permissions, only the current user's permissions are checked. The Server
API role does not allow administrative permissions.
The Server API role is required for bulk jobs and delayed triggers, because there is no user context for these
operations.
For more information about security and access permissions, see Security and access control on page 719.
Message Description
You do not have permission to perform Neither the current user nor the Server API role has
this action permission to perform requested action.
Object definition XXX not found Use a list of objects and make sure that the passed
object integration name is correct.
XXX with id 123456 not found Ensure that the passed numeric ID belongs to existing
records. In most cases use the template token for the
current record ID, record {!id}, or a related record
{!R123456}.
Field YYY not found Ensure that the field integration name is correct.
Relationship definition RRR not found Ensure that the relationship integration name is correct.
Trigger TTT not found Ensure that the trigger integration name is correct.
User with id 3456768 not found In most cases, use the token ID for the current user
{!#CURR_USER.id}
Object Definition ID 13218 is different To retrieve a record, pass pair of object name and
from required 13277 record ID. If these values do not match, an error will
result. Ensure that the object name and record ID
match.
Query API
The Rollbase Query API is available for all server-side formulas. To access these methods, use the rbv_api
system object. The order of query parameters is set and cannot be changed.
Query Limitations
Only data fields with stored input values (text, decimal, etc.) can be used in a SELECT expression. Dependent
fields, such as formulas, cannot be used in query methods. A relationship (i.e. Lookup) field can be used, but
will only take the ID of the first related record--not an array of all related records. Related fields can be used if
they point to a data field.
The limitation preventing formulas from being used in the Query API can be easily bypassed in simple cases.
Consider this Formula: {!amount} * {!price}
Though you cannot use this Formula in a query directly, you can create a query such as:
SELECT SUM(amount*price)
FROM order WHERE ...
For conditions involving date fields, you can use special tokens:
• TODAY for the current time
• WEEK for 12 AM of last Sunday
• MONTH for 12 AM of 1st day of the current month
• QUARTER for 12 AM of 1st day of the current quarter
• YEAR for 12 AM of 1st day of the current year
• CURR_USER for id of the currently logged in user
You can also use built-in functions:
• #YEAR(date) returns the date's year as an integer
• #MONTH(date) returns the date's month as an integer in the range of 1 - 12
• #DAY(date) returns the date's day of the month as an integer
• #ISO(literal_string) returns the date or date/time in ISO format, which can be used in a query.
Examples: #ISO(2013-09-20T), #ISO(2013-09-20T20:05:01Z)
• #IF(expr, val1, val2) returns val1 if expr is evaluated to true, val2 otherwise.
The following query selects records created in the current year (starting from midnight January 1st) by current
user:
SELECT name, id FROM order WHERE
createdAt>=YEAR && createdBy=CURR_USER
Query methods do not support arithmetic operations with data tokens like view filters do. For instance, MONTH-1
does not represent the first day of the previous month. You should use a query with parameters instead. If a
query includes a Date or Date/Time column, an instance of the JavaScript Date class is returned. You can
use any JavaScript Date class methods. See selectValue() for a code example.
You can also use single-quoted integration codes for picklists and status fields in a query WHERE clause. For
example:
SELECT count(1) FROM order WHERE status='Q'
The following example reads records of where the user role integration code equals SALES:
0bject and field integration names are case-sensitive, while other components of an SQL query are not. When
an integration code is used to reference pick list item, status, or role in the query, the corresponding item must
actually exist and be unique. This means that two picklists in the query object cannot use the same integration
code. Otherwise, the integration code will not be resolved and will likely cause a query error.
If you query values of picklist fields, you will get numeric values corresponding to the ID of a selected item. If
you wish to receive the integration code of the selected item instead, add the #code suffix to the name of the
picklist field. Add the #value suffix to extract the display name of the selected item. The same syntax can be
used for multi-select picklists, status fields, radio Buttons etc. For example:
• SELECT my_piclkist FROM invoice WHERE id={!id): returns the numeric ID of selected item
• SELECT my_piclkist#code FROM invoice WHERE id={!id): returns the integration code of selected
item
• SELECT my_piclkist#value FROM invoice WHERE id={!id): returns the display name of selected
item
Examples of valid queries for the User object:
• Select fields for users whose name starts with ‘M': SELECT id, name, updatedAt, updatedBy FROM
USER WHERE name LIKE 'M%' ORDER BY name
• Count number of users whose name starts with ‘M': SELECT count(1) FROM USER WHERE name LIKE
'M%'
• Count number of users created or updated in current quarter: SELECT count(1) FROM USER WHERE
updatedBy>=QUARTER
• Count number of approval records for current record (identified by {!id} token): SELECT count(1)
FROM $APPROVAL WHERE approvedRecord={!id}
• Summarize amount*price expression for all records per category (picklist): SELECT
sum(amount*price), category FROM sales GROUP BY category
• Extract records created between two dates:
var d1 = new Date('2/2/2014');
var d2 = new Date('4/2/2014');
var arr = rbv_api.selectQuery(
"SELECT id, name FROM a1 WHERE createdAt BETWEEN ? AND ?", 100, d1, d2);
rbv_api.printArr(arr);
Example of an HTML report that displays the total number of users in the system:
<html><h2>
Total users: #EVAL[ rbv_api.selectValue("SELECT COUNT(1) FROM USER") ]
</h2></html>
Although UI views do not make distinction between NULL values and 0 for numeric fields, the query API treats
NULL values and 0 differently. To mimic UI behavior you need to explicitly filter NULL values. For example:
SELECT count(1) FROM invoice WHERE amount=0 OR amount IS NULL Important Limitations
Access control applies to query methods. See Security and Access Control for more details. Passwords cannot
be retrieved through the query API due to security precautions.When applying these statements to lookup
fields, the selectQuery() and selectValue() methods return the first related ID. If you need to retrieve
all related IDs, use the getRelatedIds() method.
Some security precautions related to queries:
• 5000 characters or less
• Cannot include separators: ; \n /
• Cannot include reserved words: ALTER, BEGIN, CALL, CASCADE, DELETE, DROP, DATABASE, GRANT,
EXECUTE, INSERT, REVOKE, RENAME, SHUTDOWN, SCHEMA, UPDATE, LOGIN_NAME, PASSWORD
You can also use queries with parameters (see the method descriptions). Modifying the previous example to
use parameter results in these statements:
count(1) FROM USER WHERE name LIKE ?SELECT
Then, supply the SQL query parameter 'M%'
You can perform JavaScript calculations and then pass results to a SQL query with parameters. This technique
has a number of advantages over embedding variables directly into the text of a SQL query. To select ID of
related record you can use query similar to this:
select R1234 from
invoice where id={!id}
However please keep in mind that this query will only work for single relationships (1:1 and N:1). For multiple
relationships (1:N and N:N) result of this query is undetermined. You should use getRelatedIds() or a
template loop.
rbv_api.selectQuery()
Warning: Support for using this method with external objects (such as those mapped to external tables
or through a D2C connection) is a beta feature. This method is supported in production systems, except
for external objects.
Purpose
Runs an SQL SELECT query and returns results as a 2D-array. For Private Cloud customers, the maximum
number of rows to return can be configured: see MaxReqsInQuery parameter in the description of the
shared.properties on page 926 file.
The SELECT query used in this method consists of the following parts:
• The SELECT statement expects columns or expressions to be selected (mandatory). Use the field integration
names as SQL column names. You can use expressions such as COUNT(1). You cannot use * to retrieve
all columns.
• The FROM clause must consist of exactly one object name (mandatory).
• The WHERE clause can include a valid SQL expression to narrow the selection (optional). Use field integration
names as SQL column names.
• The ORDER BY clause can include a valid SQL expression to order the selection (optional). Use field
integration names as SQL column names.
You can use special tokens in your queries such as:
• TODAY for current time
• WEEK for 12PM of last Sunday
• MONTH for 12PM of 1st day of current month
• QUARTER for 12PM of 1st day of current quarter
• YEAR for 12PM of 1st day of current year
• CURR_USER for id of currently logged in user
Object and Field names are case-sensitive, while other components of the SQL query are not.
Use #code suffix to fetch integration codes for picklist fields rather than IDs. See Adding Logic to an Application
for more information.
Syntax
rbv_api.selectQuery (query, maxRows, arg1, arg2…)
Parameters
query
SQL SELECT query. See Query API on page 990 for examples and limitations.
maxRows
args
Return value
Query result in a 2-D array
Permissions required
View permission for the selected object type.
Example
The following example uses selectQuery() to obtain Line Item object records. The WHERE clause with the
value R8011457=? retrieves only records related to the current order. The actual ID is passed as parameter,
which is more efficient because it embeds the value directly into the query. The #code suffix for the column
category fetches the integration name instead of the ID.
var arr = rbv_api.selectQuery( "select name, amount, price,
category#code from line_item where R8011457=?", 100, {!id});
var buff = "Name, Amount, Price<br>";
for (var i=0; i<arr.length; i++)
{ buff += arr[i][0]+", "+arr[i][1]+",
"+arr[i][2] +", "+arr[i][3]+"<br>";
}
return buff;
rbv_api.selectQuery2()
Warning: Support for using this method with external objects (such as those mapped to external tables
or through a D2C connection) is a beta feature. This method is supported in production systems, except
for external objects.
Purpose
Similar to selectQuery(),selectQuery2() runs a query and returns the results as a 2D-array. The extra
parameter, rowFrom, defines a starting point for results. This makes it possible to make several calls for objects
that contain thousands of rows of data.
The SELECT query used in this method consists of the following parts:
• The SELECT statement expects columns or expressions to be selected (mandatory). Use the field integration
names as SQL column names. You can use expressions such as COUNT(1). You cannot use * to retrieve
all columns.
• The FROM clause must consist of exactly one object name (mandatory).
• The WHERE clause can include a valid SQL expression to narrow the selection (optional). Use field integration
names as SQL column names.
• The ORDER BY clause can include a valid SQL expression to order the selection (optional). Use field
integration names as SQL column names.
You can use special tokens in your queries such as:
• TODAY for current time
• WEEK for 12PM of last Sunday
• MONTH for 12PM of 1st day of current month
• QUARTER for 12PM of 1st day of current quarter
• YEAR for 12PM of 1st day of current year
• CURR_USER for id of currently logged in user
Object and Field names are case-sensitive, while other components of the SQL query are not.
Use #code suffix to fetch integration codes for picklist fields rather than IDs. See Adding Logic to an Application
for more information.
Syntax
rbv_api.selectQuery2 (query, rowFrom, maxRows, arg1, arg2…)
Parameters
query
SQL SELECT query. See Query API on page 990 for examples and limitations.
rowFrom
maxRows
args
Return value
Query result in a 2-D array
Permissions required
View permission for the selected object type.
rbv_api.selectValue()
Warning: Support for using this method with external objects (such as those mapped to external tables
or through a D2C connection) is a beta feature. This method is supported in production systems, except
for external objects.
Purpose
Runs an SQL SELECT query and returns a single value. This simplified version of rbv_api.selectQuery()
is useful for calculating sum and performing other operations on single values.
The SELECT query used in this method consists of the following parts:
• The SELECT statement expects columns or expressions to be selected (mandatory). Use the field integration
names as SQL column names. You can use expressions such as COUNT(1). You cannot use * to retrieve
all columns.
• The FROM clause must consist of exactly one object name (mandatory).
• The WHERE clause can include a valid SQL expression to narrow the selection (optional). Use field integration
names as SQL column names.
• The ORDER BY clause can include a valid SQL expression to order the selection (optional). Use field
integration names as SQL column names.
You can use special tokens in your queries such as:
• TODAY for current time
• WEEK for 12PM of last Sunday
• MONTH for 12PM of 1st day of current month
• QUARTER for 12PM of 1st day of current quarter
• YEAR for 12PM of 1st day of current year
• CURR_USER for id of currently logged in user
Object and Field names are case-sensitive, while other components of the SQL query are not.
Use #code suffix to fetch integration codes for picklist fields rather than IDs. See Adding Logic to an Application
for more information.
Syntax
rbv_api.selectValue (query, arg1, arg2…)
Parameters
query
SQL SELECT query. See examples below and see Query API on page 990 for limitations.
args
Return value
Query result as a single value
Permissions required
View permission for the selected object type.
Example
The following example calculates the most recent update date for a set of related records. It is used in a formula
field of type Date:
The following example performs the same calculation, but uses an obj_id parameter with the template token
{!id} to obtain the ID of the current record. This formula field will run the SELECT query and bring back most
recent value for the updatedAt field as a Date.
The following example calculates the number of records updated in the previous month (relative to the current
date). Please note that the Verbose flag is set for debugging and query parameters are used:
rbv_api.setVerbose(true);
var d1=new Date(rbv_api.firstDayOfMonth(0));
var d2=new Date(rbv_api.firstDayOfMonth(-1));
rbv_api.selectNumber()
Warning: Support for using this method with external objects (such as those mapped to external tables
or through a D2C connection) is a beta feature. This method is supported in production systems, except
for external objects.
Purpose
Runs a SQL SELECT query and returns a single decimal value. It is similar to the selectValue() method.
The SELECT query used in this method consists of the following parts:
• The SELECT statement expects columns or expressions to be selected (mandatory). Use the field integration
names as SQL column names. You can use expressions such as COUNT(1). You cannot use * to retrieve
all columns.
• The FROM clause must consist of exactly one object name (mandatory).
• The WHERE clause can include a valid SQL expression to narrow the selection (optional). Use field integration
names as SQL column names.
• The ORDER BY clause can include a valid SQL expression to order the selection (optional). Use field
integration names as SQL column names.
You can use special tokens in your queries such as:
• TODAY for current time
• WEEK for 12PM of last Sunday
• MONTH for 12PM of 1st day of current month
• QUARTER for 12PM of 1st day of current quarter
• YEAR for 12PM of 1st day of current year
• CURR_USER for id of currently logged in user
Object and Field names are case-sensitive, while other components of the SQL query are not.
Use #code suffix to fetch integration codes for picklist fields rather than IDs. See Adding Logic to an Application
for more information.
Syntax
rbv_api.selectNumber (query, arg1, arg2…)
Parameters
query
SQL SELECT query. See examples below and see Query API on page 990 for limitations.
args
Return value
Query result as a decimal number
Permissions required
View permission for the selected object type.
Example
The following example selects the value in the Total field from the most recent Order record:
return rbv_api.selectNumber("SELECT total FROM order ORDER BY updatedAt DESC");
rbv_api.selectCustomerQuery()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Similar to selectQuery2(), but is called from the master server and runs on the customer tenant with the
specified ID.
Do not use this API for views.
This method throws an error if the target customer tenant does not have the queried object installed. This
method might require cache loading and might be slow.
Syntax
rbv_api.selectCustomerQuery (custId, query, rowFrom, maxRows, arg1, arg2…)
Parameters
custId
query
SQL SELECT query. See Query API on page 990 for examples and limitations.
rowFrom
maxRows
args
Return value
Query results as a 2-D array
Permissions required
The current user must be logged into the master server. The current user or the Server API role must either
have administrative permissions or have View permission on the Customer object and on the selected object
type.
See Managing customer tenants on page 859 for more information about customer tenants and the master
server.
rbv_api.selectCustomerValue()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Similar to selectValue() returns a single value, but is called from the master server and runs on the customer
with the specified ID..
Syntax
rbv_api.selectCustomerValue (custId, query, arg1, arg2…)
Parameters
custId
query
SQL SELECT query. See Query API on page 990 for examples and limitations.
args
Return value
Query result as a single value
Permissions required
The current user must be logged into the master server. The current user or the Server API role must either
have administrative permissions or have View permission on the Customer object and on the selected object
type.
See Managing customer tenants on page 859 for more information about customer tenants and the master
server.
rbv_api.selectCustomerNumber()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Same as selectNumber(), but is called from the master server and runs on the customer tenant with the
specified ID.
Syntax
rbv_api.selectCustomerNumber (custId, query, arg1, arg2…)
Parameters
custId
query
SQL SELECT query. See an example below and see Query API on page 990 for examples and
limitations.
args
Return value
Query result as a number
Permissions required
The current user must be logged into the master server. The current user or the Server API role must either
have administrative permissions or have View permission on the Customer object and on the selected object
type.
See Managing customer tenants on page 859 for more information about customer tenants and the master
server.
Example
This example fetches number of records from a User object for a customer with the ID represented by the
{!id} token:
rbv_api.getCount()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Returns the number of records in the selected view. Optionally, this method can filter by field name and value.
Syntax
rbv_api.getCount(viewId, filterName, filterValue)
Parameters
viewID
Original ID of view
filterName
filterValue
Return value
Number of records
Permissions required
View permission for the selected object type.
Example
The following example returns the total number of records in view 123456 where the Status field equals Open
(any filters imposed by the view apply as well):
var count = rbv_api.getCount("123456", "status", "Open");
rbv_api.getRelatedIds()
Purpose
For native Rollbase objects, this method returns an array of related IDs for a specified relationship and object
record ID.
Note: For external objects (such as those mapped to external tables, to OpenEdge Service objects, or through
a D2C connection), you can use the method, rbv_api.getRelatedIds2() on page 1005.
Syntax
rbv_api.getRelatedIds (relName, id)
Parameters
relName
id
Return value
An array of related record IDs
Example
var arr = rbv_api.getRelatedIds("R1321", {!id});
for (var k=0; k<arr.length; k++) {
var id = arr[k];
rbv_api.println("id="+id);
}
rbv_api.getRelatedIds2()
Purpose
For external objects (such as those mapped to external tables, to OpenEdge Service objects, or through a D2C
connection), returns an array of related IDs for a specified relationship and record ID.
Note: For native Rollbase objects, you can use the method, rbv_api.getRelatedIds() on page 1004.
Syntax
rbv_api.getRelatedIds2(relName, objName, objId)
Parameters
relName
ObjName
objId
Return value
An array of related record IDs
Example
var arr = rbv_api.getRelatedIds2("R1321", "ex_group", "{!#UID}");
rbv_api.printArr(arr);
rbv_api.getRelatedFields()
Purpose
For native Rollbase objects, returns an array of field values from related records for a given relationship and
Object ID.
Note: For external objects (such as those mapped to external tables, to OpenEdge Service objects, or through
a D2C connection), you can use the method, rbv_api.getRelatedFields2() on page 1006.
Syntax
rbv_api.getRelatedFields(relName, id, fieldName)
Parameters
relName
id
fieldName
Return value
Array of field values from related records or NULL if no related records exist.
Permissions required
View permission for the selected object type.
Example
var values = rbv_api.getRelatedFields("R1321", {!id}, "status");
for (var k=0; k<values.length; k++) {
var status = values[k];
rbv_api.println("status="+status);
}
rbv_api.getRelatedFields2()
Purpose
For external objects (such as those mapped to external tables, to OpenEdge Service objects, or through a D2C
connection), returns an array of field values from related records for a given relationship and record ID.
Note: For native Rollbase objects, you can use the method, rbv_api.getRelatedFields() on page 1005.
Syntax
rbv_api.getRelatedFields2(relName, objName, objId, fieldName)
Parameters
relName
objName
objId
fieldName
Return value
Array of field values from related records or NULL if no related records exist.
Permissions required
View permission for the selected object type.
Example
var values = rbv_api.getRelatedFields2("R1321", "ex_group", "{!#UID}", "status");
rbv_api.printArr(arr);
• AAA0001
• AAA0002
• BBBG001
• AAA003
The Auto-Number field cannot be used because more than one sequence is involved. Instead, to fulfill this
requirement, try the following solution:
• Use the following Object Script methods in an After Create trigger to populate the Document Number field
(read-only on pages):
rbv_api.getFieldValue()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This object script method returns the value of a field from an existing object record. You can access fields using
template tokens instead of this method for better performance.
To get integration codes for enumerated values such as picklists and status, append the #code suffix to the
fieldName parameter. For example, a fieldName value of status returns a status ID, status#code
returns the status code, status#value returns the status display name.
Formulas used in Object Script triggers can include other API methods and regular Rollbase template
functionality, such as loops. Object Script methods have no effect if called outside of update triggers.
Note: Because getFieldValue() acts on existing data, it cannot be used in a validation script, which checks
data before storing it.
Syntax
rbv_api.getFieldValue(objName, objId, fieldName)
Parameters
objName
objId
ID of object record
fieldName
Return value
Value of requested field
Permissions required
View permission for the selected object type.
Example
For regular Rollbase objects:
var x = rbv_api.getFieldValue("order", {!id}, "description");
rbv_api.getNumFieldValue()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This Object Script method returns the numeric value of a field from an existing object record. This method is
similar to getFieldValue(), but ensures that the returned value is a number or 0 if the field has a NULL
value.
Formulas used in Object Script triggers can include other API methods and regular Rollbase template
functionality, such as loops. Object Script methods have no effect if called outside of update triggers.
Syntax
rbv_api.getNumFieldValue(objName, objId, fieldName)
Parameters
Parameter Description
Return value
Value of requested field
Permissions required
View permission for the selected object type.
rbv_api.getBinaryData()
Purpose
This Object Script method returns uploaded file as a base-64 encoded string. This method only works with
native Rollbase objects.
Formulas used in Object Script triggers can include other API methods and regular Rollbase template
functionality, such as loops. Object Script methods have no effect if called outside of update triggers.
Syntax
rbv_api.getBinaryData(objName, objId, fieldName)
Parameters
Parameter Description
Return value
A base-64 encoded string or null
Permissions required
View permission for the selected object type.
rbv_api.getTextData()
Purpose
This Object Script method returns uploaded file as a plain-text string. Use only with plain-text uploaded files,
such as HTML or CSV. This method only works with native Rollbase objects.
Note: This API method works with Non-ASCII characters as well. However, if your text file contains characters
other than plain ASCII, you must ensure you save the text file as UTF-8 before uploading it.
Formulas used in Object Script triggers can include other API methods and regular Rollbase template
functionality, such as loops. Object Script methods have no effect if called outside of update triggers.
Syntax
rbv_api.getTextData(objName, objId, fieldName)
Parameters
Parameter Description
Return value
A plain-text string or Null
Permissions required
View permission for the selected object type.
rbv_api.isFieldEmpty()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This Object Script method checks whether value of particular field is null or empty without bringing the actual
value into the formula.
Note: Because isFieldEmpty() acts on existing data, it cannot be used in a validation script, which checks
data before storing it.
Formulas used in Object Script triggers can include other API methods and regular Rollbase template
functionality, such as loops. Object Script methods have no effect if called outside of update triggers.
Syntax
rbv_api.isFieldEmpty(objName, objId, fieldName)
Parameters
objName
objId
ID of object record
fieldName
Return value
true if value of a field from an existing object record is null or empty, false otherwise
Example
if (rbv_api.isFieldEmpty("order", {!id}, "description") {
do something
}
rbv_api.setFieldValue()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This Object Script method sets the value of a field for an existing object record. For picklists and status fields,
use integration names, since they will be valid after publishing and installing your application, unlike numeric
ids.
When called outside of a transaction scope, for instance, in a JavaScript report, the setFieldValue() method
changes the field value temporarily. The setFieldValue() method does not invoke triggers before or after
the update occurs. The reason is that this method can often be used repeatedly to update several fields and
invoking triggers on each update may result in undesired behavior.
Formulas used in Object Script triggers can include other API methods and regular Rollbase template
functionality, such as loops. Object Script methods have no effect if called outside of update triggers.
Syntax
rbv_api.setFieldValue(objName, objId, fieldname, newValue)
Parameters
objName
objId
ID of object record
fieldName
newValue
Value to be set
Return value
None
Permissions required
View permission for the selected object type.
Example
The following code sets a picklist (single-selection) or radio-buttons value:
rbv_api.setFieldValue("order", {!id}, "size", "S");
rbv_api.setBinaryFieldValue()
Purpose
This Object Script method sets the value of a file upload field using a base-64 encoded string. This method
only works with native Rollbase objects.
Formulas used in Object Script triggers can include other API methods and regular Rollbase template
functionality, such as loops. Object Script methods have no effect if called outside of update triggers.
Syntax
rbv_api.setBinaryFieldValue(objName, objId, fieldname, encodedValue, contentType,
fileName)
Parameters
objName
objId
fieldName
encodedValue
contentType
fileName
Return value
None
Permissions required
Edit permission for the selected object type.
rbv_api.setTextFieldValue()
Purpose
This Object Script method sets the value of a text field to the name of a file to be stored. This method only
works with native Rollbase objects.
Formulas used in Object Script triggers can include other API methods and regular Rollbase template
functionality, such as loops. Object Script methods have no effect if called outside of update triggers.
Syntax
rbv_api.setTextFieldValue(objName, objId, fieldname, textValue, contentType,
fileName)
Parameters
objName
objId
fieldName
textValue
contentType
fileName
Return value
None
Permissions required
Edit permission for the selected object type.
Example
var xmlBody = "<test>TEST</test>"
rbv_api.setTextFieldValue("invoice", {!id}, "xmlField", xmlBody,
"text/xml", "invoice.xml");
rbv_api.createRecord()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This Object Script method creates a new object record from the values passed in. The Object Script API invokes
triggers on create, on update and on delete the same way as the Rollbase user interface does. The ID of a
newly created record is available for other triggers in update chain through the shared value,
newID_objectName, that can be retrieved using getSharedValue().
Note: This methods observes required and unique field properties. An attempt to create or update a record
without setting required fields or by violating uniqueness of field values will cause an error.
Formulas used in Object Script triggers can include other API methods and regular Rollbase template
functionality, such as loops. Object Script methods have no effect if called outside of update triggers.
Syntax
rbv_api.createRecord(objName, arr)
Parameters
objName
arr
Return value
Object ID of the newly created record
Permissions required
Create permission for the selected object type.
Example
The following creates a related record:
var x = new Array();
x["amount"]=1000;
x["R477842"]={!id};
x["name"]="API Created";
var newId = rbv_api.createRecord("item", x);
rbv_api.print("Created record with id: "+newId);
rbv_api.updateRecord()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This Object Script method updates a record. Only supply values for the fields you want to change, others fields
will remain unchanged. The Object Script API invokes triggers on create, on update and on delete the same
way as the Rollbase user interface does. The ID of a newly created record is available for other triggers in
update chain through the shared value, newID_objectName, that can be retrieved using getSharedValue().
Note: This methods observes required and unique field properties. An attempt to create or update a record
without setting required fields or by violating uniqueness of field values will cause an error.
Formulas used in Object Script triggers can include other API methods and regular Rollbase template
functionality, such as loops. Object Script methods have no effect if called outside of update triggers.
Syntax
rbv_api.updateRecord(objName, objId, arr)
Parameters
objName
objId
arr
Return value
None
Permissions required
Edit permission for the selected object type.
Example
The following example loops through related records and updates them:
var x;
{!#LOOP_BEGIN.R477842}
x = new Array();
x["amount"]={!R477842.amount}+100;
rbv_api.updateRecord("item", {!R477842.id}, x);
{!#LOOP_END.R477842}
rbv_api.cloneRecord()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This Object Script method creates a new object record from the record and values passed in. The Object Script
API invokes triggers on create, on update, and on delete the same way as the Rollbase user interface does.
The ID of a newly created record is available for other triggers in update chain through the shared value,
newID_objectName, that can be retrieved using getSharedValue().
Note: This methods observes required and unique field properties. An attempt to create or update a record
without setting required fields or by violating uniqueness of field values will cause an error.
Formulas used in Object Script triggers can include other API methods and regular Rollbase template
functionality, such as loops. Object Script methods have no effect if called outside of update triggers.
Syntax
rbv_api.cloneRecord(objName, objID, arr)
Parameters
objName
objID
arr
Return value
Object ID of the newly created record
Permissions required
Create permission for the selected object type and View permission on the record to be cloned
Example
The following creates a related record:
rbv_api.attach()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This Object Script method creates a relationship between two records and returns true if a new relationship
has been successfully created.
Formulas used in Object Script triggers can include other API methods and regular Rollbase template
functionality, such as loops. Object Script methods have no effect if called outside of update triggers.
Syntax
rbv_api.attach(relName, objName1, objId1, objName2, objId2)
Parameters
relName
objName1
objId1
objName2
objId2
Return value
true, if association succeeded
Permissions required
Edit permission for the selected object type.
rbv_api.detach()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This Object Script method removes a relationship between two records.
Formulas used in Object Script triggers can include other API methods and regular Rollbase template
functionality, such as loops. Object Script methods have no effect if called outside of update triggers.
Syntax
rbv_api.detach(relName, objName1, objId1, objName2, objId2)
Parameters
relName
objName1
objId1
objName2
objId2
Return value
None
Permissions required
Edit permission for the selected object type.
rbv_api.runTrigger()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This Object Script method runs a trigger on the specified object. This method will invoke a trigger regardless
of timing options, such as On After Update. For HTTP calls, consider using sendHttpGet() or
setHttpPost() instead.
Formulas used in Object Script triggers can include other API methods and regular Rollbase template
functionality, such as loops. Object Script methods have no effect if called outside of update triggers.
Syntax
rbv_api.runTrigger(objName, objId, triggerOrigId, checkValidation, runRecursions)
Parameters
objName
objId
triggerOrigId
checkValidation
true or false. If set to true, check validation formula before running trigger, otherwise ignore
validation formula.
runRecursions
true or false. When runRecursions is set to true, configures the trigger to run recursively,
assuming recursive properties are set on the trigger definition page. Default value is false.
Return value
None
Permissions required
Edit permission for the selected object type.
Example
rbv_api.runTrigger("Query", {!id}, "TaC4hpbwSDmjSPOHavRqJA", false, true);
rbv_api.deleteRecord()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This Object Script method deletes the specified record.
Formulas used in Object Script triggers can include other API methods and regular Rollbase template
functionality, such as loops. Object Script methods have no effect if called outside of update triggers.
Syntax
rbv_api.deleteRecord(objName, objId)
Parameters
objName
objId
ID of record to delete
Return value
None
Permissions required
Delete permission for the selected object type.
Example
The following example deletes a record:
rbv_api.deleteRecord("item", {!R477842.id});
rbv_api.setCreator()
Purpose
This Object Script trigger method sets the Created By field value for the selected record. This method only
works with native Rollbase objects.
Formulas used in Object Script triggers can include other API methods and regular Rollbase template
functionality, such as loops. Object Script methods have no effect if called outside of update triggers.
Syntax
rbv_api.setCreator(objName, objId, creatorName, creatorId)
Parameters
objName
objId
creatorName
creatorId
Return value
None
Permissions required
The current user must have the Administrator role to use this method.
Example
rbv_api.setCreator("item", {!id}, "USER", 123456);
rbv_api.startApproval()
Purpose
Starts the approval process on a selected record with the Approval attribute. See Approvals on page 423 for
more information about the approval process.
Syntax
rbv_api.startApproval(objName, objId, actionId)
Parameters
objName
objId
actionId
The original ID of the workflow action that started the approval process (can be found on the workflow
action's view page).
Return value
None.
Permissions required
The current user must have Access permission on the workflow action that starts the approval process.
Example
rbv_api.startApproval("item", {!id}, "123456");
rbv_api.isViewed()
Purpose
Accesses the viewed attribute of a record for a particular user. This method only works with native Rollbase
objects.
Syntax
rbv_api.isViewed(objName, objId, userId)
Parameters
objName
objId
userId
Return value
true if a record was viewed
rbv_api.setViewed()
Purpose
Sets the viewed attribute for a specified record and user. This method only works with native Rollbase objects.
Syntax
rbv_api.setViewed(objName, objId, userId, isViewed)
Parameters
objName
objId
ID of object record
userId
isViewed
true or false
Return value
None
rbv_api.isFlagged()
Purpose
Determines whether a particular user flagged a record. Tip: Use the token {!#CURR_USER.id} to retrieve
the ID of the currently logged-in user. This method only works with native Rollbase objects.
Syntax
rbv_api.isFlagged(objName, objId, userId)
Parameters
objName
objId
ID of object record
userId
Return value
true if a record was flagged
rbv_api.setFlagged()
Purpose
Sets the flagged attribute for a specified record and user. This method only works with native Rollbase objects.
Syntax
rbv_api.setFlagged(objName, objId, userId, isFlagged)
Parameters
objName
objId
ID of object record
userId
isFlagged
true or false
Return value
None
rbv_api.getSelectedIds()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Gets an array of record ids selected by current user using check boxes in list view.
Syntax
rbv_api.getSelectedIds(objName)
Parameters
objName
Return value
Array of record IDs
Example
var arr = rbv_api.getSelectedIds("order");
var buff = '';
if (arr!=null) {
for (var k=0; k<arr.length; k++)
buff += arr[k]+', ';
}
return buff;
rbv_api.isAppInstalled()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Returns true if application with the given ID is installed for the current customer, false otherwise.
Syntax
rbv_api.isAppInstalled(appId)
Parameters
appId
Return value
true or false
Miscellaneous methods
The methods in this section can be used in formulas.
rbv_api.getIdByCode()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Returns the ID of a status or a picklist item with the given integration code.
Syntax
rbv_api.getIdByCode (objName, fieldName, code)
Parameters
objName
fieldName
code
Return value
ID of item or -1
Example
var itemId = rbv_api.getIdByCode("order", "type", "S",);
rbv_api.getCodeById()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Returns the code of a status or a picklist item with the given ID.
Syntax
rbv_api.getCodeById(objName, fieldName, id)
Parameters
objName
fieldName
Return value
Code of item or null
rbv_api.getIdByOriginalId()
Purpose
Given the original ID for an entity and an entity type, returns the entity's ID.
Syntax
rbv_api.getIdByOriginalId(entityType, origId)
Parameters
entityType
A string indicating the type of entity. Can be one of "object", "field", "relationship",
"webpage", "view", "template", "report", "chart", "gauge", "trigger", "process",
"status", "action", "button", or "datamap".
origId
Return value
If successful, the ID of the specified entity. If no entity of the specified type with the specified original ID exists,
throws an exception.
Example
The following example prints the ID of an object definition to the console.
try {
var id = rbv_api.getIdByOriginalId("object", "7550");
rbv_api.println(id);
} catch (error) {
rbv_api.println(error);
}
If no object with the specified original ID exists, the following message is printed to the console:
JavaException: com.rb.core.services.api.ApiException: Error: No object exists with
original ID - 7550
rbv_api.getPicklist()
Purpose
Returns items available for selected picklist field (including radio buttons and groups of check box fields) as a
JSON array. Each array entry has the elements name, id, and code.
Syntax
rbv_api.getPicklist (objName, fieldName, mainValueId)
Parameters
objName
fieldName
mainValueId
The ID of the main picklist item (optional, for dependent picklists only).
Return value
A JSON array of picklist items
Example
var arr = rbv_api.getPicklist("invoice", "options", null);
for (var k=0; k<arr.length; k++) {
rbv_api.println(k+" Name: "+arr[k].name+" Code: "+arr[k].code+" ID: "+arr[k].id);
}
rbv_api.getRoleById()
Purpose
Returns information about the specified role in JSON format. Throws an exception if roleId evaluates to
Super Admin.
Syntax
rbv_api.getRoleById(roleId)
URL Parameters
roleId
Permissions Required
Full administrative privileges.
Response
The integration code, name, description, ID, and original ID of the role in JSON format.
rbv_api.getValueById()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Returns the value of a status or a picklist item with the given ID.
Syntax
rbv_api.getValueById(objName, fieldName, id)
Parameters
objName
fieldName
id
Return value
Text value of item or null
Example
The following returns the value of an order type.
var itemValue = rbv_api.getValueById("order", "type", {!type#id});
rbv_api.runReport()
Purpose
Runs a report and returns it as a base-64 encoded string. This method only works with native Rollbase objects.
Syntax
rbv_api.runReport(reportId, filterName, filterValue)
Parameters
reportId
filterName
filterValue
Specifies a value for the field. Only records with this value will be added to the report.
Return value
Base-64 encoded string.
Example
The following example reads the order report and stores the results in the file upload field:
var reportData = rbv_api.runReport("23086", null, null);
rbv_api.setBinaryFieldValue("report", {!id}, "file",
reportData, "application/pdf", "report.pdf");
rbv_api.runTemplate()
Purpose
Runs a document template on a specified object record and returns it as a base-64 encoded string. This method
only works with native Rollbase objects.
Syntax
rbv_api.runTemplate(objName, ObjId, templateId)
Parameters
objName
objId
ID of object record.
templateId
Return value
The template as a base-64 encoded String.
Permissions required
Edit permission for the selected object type.
rbv_api.formatUsingMask()
Purpose
Formats a string containing digits as specified in the mask parameter.
Syntax
rbv_api.formatUsingMask(value, mask)
Parameters
value
mask
Example
var x = rbv_api.formatUsingMask("123456789", "###-##-####");
Result: 123-45-6789
rbv_api.getCurrentDate()
Purpose
Returns a string corresponding to the current date, relative to the current user's time zone. Use new Date()
to create a new instance of a JavaScript Date.
Syntax
rbv_api.getCurrentDate()
Return value
Current date as a string
rbv_api.firstDayOfMonth()
Purpose
Returns a value of 12AM on the first day of the current month plus or minus the number of months specified.
Syntax
rbv_api.firstDayOfMonth(offset)
Parameters
offset
Return value
Date as a string.
Example
var d = new Date(rbv_api.getCurrentDate());
rbv_api.println(d);
var d1 = new Date(rbv_api.firstDayOfMonth(0));
rbv_api.println(d1);
Output:
Sat Feb 26 2012 13:00:02 GMT-0800 (PST)
Tue Feb 01 2012 00:00:00 GMT-0800 (PST)
Sat Jan 01 2012 00:00:00 GMT-0800 (PST)
rbv_api.firstDayOfQuarter()
Purpose
Returns a value of 12AM on the first day of the current quarter plus or minus the number of quarters specified.
Syntax
rbv_api.firstDayOfQuarter(offset)
Parameters
offset
Return value
Date as a string.
rbv_api.firstDayOfYear()
Purpose
Returns a value of 12AM on the first day of the current year, plus or minus the number of years specified.
Syntax
rbv_api.firstDayOfYear(offset)
Parameters
offset
Return value
Date as a string
Example
The following example calculates first day of the current calendar year and uses Query API to sum invoice
records after that date:
rbv_api.formatDate()
Purpose
Formats a JavaScript Date class instance as specified in the pattern parameter.
Syntax
rbv_api.formatDate(date, pattern)
Parameters
date
pattern
A pattern specified using the conventions defined in the Java SimpleDateFormat class
Return value
Date formatted as a string
Example
var d = rbv_api.selectValue("select updatedAt from orders where id=?", {!id});
var x = rbv_api.formatDate(d, "yyyy-MM-dd");
rbv_api.println("x="+x);
Output:
x=2012-03-12
rbv_api.formatNumber()
Purpose
Formats a decimal number to a string according to the specified parameters.
Syntax
rbv_api.formatNumber(number, decPlaces, decSeparator, thSeparator)
Parameters
number
Number to be formatted
decPlaces
decSeparator
thSeparator
Return value
Number as a formatted string.
Example
var x = rbv_api.formatNumber(7000123.45, 2, ",", ".");
rbv_api.println("x="+x);
Output:
x=7.000.123,45
rbv_api.formatCurrency()
Purpose
Formats a currency number as a string according to the specified parameters.
Syntax
rbv_api.formatCurrency(number, currSymbol, decPlaces, decSeparator, thSeparator)
Parameters
number
Number to be formatted
currSymbol
decPlaces
decSeparator
thSeparator
Return value
Number as a formatted string.
Example
Example:
var x = rbv_api.formatCurrency(7000123.45, "$ ", 2, ".", " ");
rbv_api.println("x="+x);
Output:
x=$ 7 000 123.45
rbv_api.getExchangeRate()
Purpose
Returns an exchange rate between two currencies on a given date.
Syntax
rbv_api.getExchangeRate(srcCode, destCode, date)
Parameters
srcCode
destCode
date
Return value
Rate as a decimal number
Example
var rate = rbv_api.getExchangeRate("EUR", "USD", new Date());
rbv_api.setExchangeRate()
Purpose
Sets an exchange rate between two currencies on a given date.
Syntax
rbv_api.setExchangeRate(srcCode, destCode, rate, date)
Parameters
srcCode
destCode
rate
date
Return value
None
Permissions required
Requires full administrative permissions.
Example
var rate = rbv_api.setExchangeRate("EUR", "USD", 1.23, new Date());
rbv_api.getPDFProperty()
Purpose
Returns the specified property of the PDF document specified as a base-64 encoded string. This method only
works with native Rollbase objects.
Syntax
rbv_api.getPDFProperty(encodedValue, property)
Parameters
encodedValue
Property
Return value
Property of PDF document as a string
Example
var str = rbv_api.getBinaryData("document", {!id}, "file");
var author = rbv_api.getPDFProperty(str, 'AUTHOR');
var encrypted = rbv_api.getPDFProperty(str,'ENCRYPTED');
rbv_api.concatPDF()
Purpose
Concatenates two or more PDF documents specified as base-64 encoded strings. This method only works
with native Rollbase objects.
Syntax
rbv_api.concatPDF(encodedValue1, encodedValue2, …)
Parameters
encodedValue1
encodedValue2, ...
Return value
Merged PDF document as a base-64 encoded string
Example
var pdf1 = rbv_api.getBinaryData("document", {!id}, "pdf_file1");
var pdf2 = rbv_api.getBinaryData("document", {!id}, "pdf_file2");
var pdf3 = rbv_api.concatPDF(pdf1, pdf2);
rbv_api.setBinaryFieldValue("document", {!id}, "pdf_file3", pdf3,
"application/pdf", "merged.pdf");
rbv_api.getHostedAsText()
Purpose
Returns the content of a hosted file as a string. This method only works for text-based files such as those with
extensions of .xml, .html, and .txt. This method only works with native Rollbase objects.
Syntax
rbv_api.getHostedAsText(origId)
Parameters
origId
Return value
Content of hosted file as a string or NULL if file doesn't exist
rbv_api.getHostedAsBinary()
Purpose
Returns the content of a hosted file as a base-64 encoded string. This method only works with native Rollbase
objects.
Syntax
rbv_api.getHostedAsBinary(origId)
Parameters
origId
Return value
The content of a hosted file as a base-64 encoded string or NULL (if file does not exist).
HTTP API
The functions in this section can be used to send HTTP requests from server-side logic.
rbv_api.sendHttpGet()
Purpose
Sends HTTP GET requests to the specified URL and returns the HTTP response body.
Syntax
rbv_api.sendHttpGet(url,headers,charset)
Parameters
url
headers
Optional. A String of name-value pairs specifying the HTTP Headers to be sent in the request.
charset
Optional. Preferred encoding scheme for the HTTP response. Default value is UTF-8.
Return value
HTTP response
Example
var headers = {"Content-Type": "application/xml"};
var info =
rbv_api.sendHttpGet("http://www.rollbase.com/master/system/ri.jsp",headers,"ISO-8859-1");
rbv_api.println(info);
Output:
4.08|2013-06-01T
rbv_api.sendHttpPost()
Purpose
Sends multipart HTTP POST requests to the specified URL and returns the body of the HTTP response.
Syntax
rbv_api.sendHttpPost(url, params, headers, chunked)
Parameters
url
Note: Ensure that the URL parameters contain your customer ID or login name of your Rollbase
user account.
params
headers
chunked
Return value
Body of HTTP response
Example
The following example logs in to a remote server:
rbv_api.sendJSONRequest()
Purpose
Sends a JSON request to the specified URL and returns the HTTP response body.
Syntax
rbv_api.sendJSONRequest(url, data, method, contentType, username, password, headers)
Parameters
url
data
method
contentType
username
password
headers
Return value
Body of HTTP response
rbv_api.getHTTPCookie()
Purpose
Returns the value of an HTTP cookie sent to the server during a user interface-based update operation.
Syntax
rbv_api.getHTTPCookie(name)
Parameters
Parameter Description
Return value
The value of the HTTP cookie or Null.
Example
The following example logs the login name stored as a cookie on the Rollbase Private Cloud login page (if the
user chooses the Remember user name option when logging in):
var x = rbv_api.getHTTPCookie("loginName");
rbv_api.log("debug", "loginName="+x);
rbv_api.getHTTPParameter()
Purpose
This method returns the value of an HTTP parameter sent to the server during a UI-based update operation
from an object field or a custom HTML component.
Syntax
rbv_api.getHTTPParameter(name)
Parameters
name
Return value
HTTP parameter or null
rbv_api.parseXML()
Purpose
Parses an XML string and returns an instance of org.w3c.dom.Element corresponding to the XML root.
JavaScript can use all methods of this Java object. See
http://www.w3.org/2003/01/dom2-javadoc/org/w3c/dom/Element.html for more info.
Syntax
rbv_api.parseXML(xmlString)
Parameters
xmlString
Return value
Root element of an XML document
Example
var xml = "<a><b>BBB</b><c>CCC</c></a>";
var root = rbv_api.parseXML(xml);
var nodes = root.getChildNodes();
for (var k=0; k<nodes.length; k++) {
var child = nodes.item(k);
rbv_api.println("Tag="+child.getTagName());
var nodes2 = child.getChildNodes();
for (var n=0; n<nodes2.length; n++) {
var child2 = nodes2.item(n);
var x = child2.getNodeValue();
rbv_api.println("Value="+x);
}
}
Output:
Tag=b
Value=BBB
Tag=c
Value=CCC
rbv_api.evalXpath()
Purpose
Parses an XML string and evaluates an XPath expression. See http://www.w3schools.com/xsl for more
information on XPath.
Syntax
rbv_api.evalXpath(xmlString, xpathExpr)
Parameters
xmlString
xpathExpr
Return value
Result of XPath evaluation
Example
The following example evaluates a three-node XPath.
var xmlString =
"<a><b>node one</b><c>node two</c><b>node three</b></a>";
var xpathExpr = "/a/b/text()";
var res = rbv_api.evalXpath(xmlString, xpathExpr);
for (var k=0; k<res.length; k++)
rbv_api.println("Result: "+res.item(k));
Output:
Result: [#text: node one]
Result: [#text: node three]
rbv_api.jsonToString()
Purpose
Converts a JSON object into a text string.
Syntax
rbv_api.jsonToString(json)
Parameters
json
A JSON object
Return value
A text string
rbv_api.stringToJson()
Purpose
This method parses a text string into a JSON object
Syntax
rbv_api.stringToJson(str)
Parameters
str
A string value
Return value
A text string
Example
var x = {"a":"AAAA", "b":100};
var y = rbv_api.jsonToString(x);
rbv_api.println("y="+y);
var z = rbv_api.stringToJson(y);
rbv_api.println("z.a="+z.a);
rbv_api.println("z,b="+z.b);
Output:
y={"b": 100,"a": "AAAA"}
z.a=AAAA
z,b=100
rbv_api.setSharedValue()
Purpose
This method must be called within a trigger. It stores a value and makes it available for subsequent triggers
through the getSharedValue() method.
Syntax
rbv_api.setSharedValue(name, value)
Parameters
name
value
stored value
Return value
None
rbv_api.getSharedValue()
Purpose
This method must be called within a trigger. It returns a value stored by the setSharedValue() method.
Syntax
rbv_api.getSharedValue(name)
Parameters
name
Return value
Shared value or null
Example
Trigger 1:
var x = rbv_api.selectNumber(...);
// Store queried value for subsequent re-use
rbv_api.setSharedValue("x", x);
Trigger 2:
// Retrieve previously stored value
var x = rbv_api.getSharedValue("x");
• The environment in which your trigger is running: UI, Portal, API, or Delayed.
• What operation is currently being performed: create, update, delete, or something else.
Each of the APIs returns false if called outside of a trigger.
rbv_api.isUI()
Purpose
Returns true if the trigger was called or a formula containing this method was invoked from a regular UI page.
Syntax
rbv_api.isUI()
Parameters
None
N/A
Return value
true or false
Example
if (rbv_api.isUI()) rbv_api.print("Called from UI page");
rbv_api.isPortal()
Purpose
Returns true if a trigger is called or a formula is invoked from a portal UI page.
Syntax
rbv_api.isPortal()
Parameters
None
N/A
Return value
true or false
Example
To receive notification when a new lead record is created from portal page, but not from UI page, create an
Email notification trigger and set the condition formula to (no need to add return keyword):
rbv_api.isPortal()
rbv_api.isMobile()
Purpose
Returns true if a trigger is called from a Rollbase Mobile-Web page.
Syntax
rbv_api.isMobile()
Parameters
None
N/A
Return value
true or false
rbv_api.isAPI()
Purpose
Returns true if a trigger is called from a regular Web Services API or REST.
Syntax
rbv_api.isAPI()
Parameters
None
N/A
Return value
true or false
rbv_api.isDelayed()
Purpose
Returns true if this trigger is delayed and running when no user is logged in.
Syntax
rbv_api.isDelayed()
Parameters
None
N/A
Return value
true or false
rbv_api.isImport()
Purpose
Returns true if this trigger is running while importing records from spreadsheet.
Syntax
rbv_api.isImport()
Parameters
None
N/A
Return value
true or false
rbv_api.isCreate()
Purpose
Returns true if this trigger is called while creating a new record.
Syntax
rbv_api.isCreate()
Parameters
None
N/A
Return value
true or false
Example
if (rbv_api.isCreate()) rbv_api.print("Creating a new record");
rbv_api.isUpdate()
Purpose
Returns true if trigger is called while updating an existing record.
Syntax
rbv_api.isUpdate()
Parameters
None
N/A
Return value
true or false
Example
if (rbv_api.isCreate()) rbv_api.print("Creating a new record");
rbv_api.isDelete()
Purpose
Returns true if trigger is called while deleting an existing record.
Syntax
rbv_api.isDelete()
Parameters
None
N/A
Return value
true or false
Example
if (rbv_api.isCreate()) rbv_api.print("Creating a new record");
Debugging API
The methods in this section apply to debugging of server-side logic.
rbv_api.print()
Purpose
Prints text messages in the formula and trigger debugging windows. End-users will not see the messages at
runtime.
Syntax
rbv_api.print (text)
Parameters
text
Return value
None
Example
rbv_api.println()
Purpose
Prints text messages in the formula debugging window, adding an end-of-line "\n" symbol after the output.
End-users will not see the messages at runtime.
The print() and println() methods can also be used in JavaScript reports to generate output.
Syntax
rbv_api.println (text)
Parameters
text
message to be output
Return value
None
rbv_api.printARR()
Purpose
Prints the contents of a JavaScript array in the format key => value.
Syntax
rbv_api.printArr(arr)
Parameters
arr
Return value
None
rbv_api.setVerbose()
Purpose
Sets the verbose flag for debugging formulas and triggers. Methods such as selectQuery(),
createRecord(), updateRecord(), will generate additional debugging output if this flag is set to true.
Syntax
rbv_api.setVerbose (flag)
Parameters
flag
true or false
Return value
None
rbv_api.isVerbose()
Purpose
Returns the verbose flag that can be set using the setVerbose() method.
Syntax
rbv_api.isVerbose()
Parameters
NA
Not applicable
Return value
true or false
rbv_api.inArgs()
Purpose
Returns the position (0-based index) of the first argument in a variable length list of remaining arguments.
Syntax
rbv_api.inArgs(x, arg0, arg1, …)
Parameters
x
variable
args
Return value
true or false
Example
rbv_api.inArgs("Z", "X", "Y", "Z") returns 2
rbv_api.inArgs("A", "X", "Y", "Z", "1") returns -1 (i.e. not found)
Log API
The methods discussed in this section enables you to log information in a log file.
rbv_api.createActivityLog()
Purpose
Creates an activity log record on an existing object record. This method only works with native Rollbase objects.
Syntax
rbv_api.createActivityLog (objName, objId, text)
Parameters
objName
objId
ID of record
text
Return value
None
rbv_api.log()
Purpose
Creates an log entry in the specified system log file.
Note: The log() method can be used for debugging delayed triggers, SOAP calls, and REST calls where
UI-based debugging is unavailable.
Syntax
rbv_api.Log (logName, text)
Parameters
logName
The name of one of the system log files—webapi, rest, jobs, debug—where your log entry will
be recorded.
text
Return value
None
Example
var x = rbv_api.selectValue(...);
rbv_api.log("debug", "x="+x);
Email API
This section describes APIs used to read email messages from external email servers using IMAP or POP3
protocols. Only secure (SSL) connection is supported.
rbv_api.openIMAP()
Purpose
Opens connection to an external email server (such as Gmail) using IMAP protocol. It must be called once
before reading data from IMAP server.
Syntax
rbv_api.openIMAP(hostName, port, userName, password, mailProps)
Parameters
hostName
port
The port number for an SSL connection on the external mail server (typically 993).
userName
The user's name (typically user's email address) on the external mail server.
password
mailProps
The optional array of properties to be set on the external mail server. This may be null.
Return value
None
Example
rbv_api.openIMAP("imap.gmail.com", 993, "address@gmail.com", password, null);
rbv_api.openPOP3()
Purpose
Opens connection to an external email server (such as Microsoft Exchange) using POP3 protocol. It must be
called once before reading data from POP3 server.
Syntax
rbv_api.openPOP3(hostName, port, userName, password, mailProps)
Parameters
hostName
port
The port number for an SSL connection on the external mail server (typically 995).
userName
The user's name (typically user's email address) on the external mail server.
password
mailProps
The optional array of properties to be set on the external mail server. This may be null.
Return value
None
Example
rbv_api.openPOP3("mail.mydomain.com", 995, "address@mydomain.com", password, null);
rbv_api.getMailMessageCount()
Purpose
Returns the number of messages in the INBOX folder for the logged in user.
Syntax
rbv_api.getMailMessageCount()
Return value
Number of email messages.
Example
rbv_api.openPOP3("mail.mydomain.com", 995, "address@mydomain.com", password, null);
var x = rbv_api.getMailMessageCount();
rbv_api.closeMailSession();
rbv_api.getMailMessage()
Purpose
Returns the specified number of email messages from the INBOX folder of the logged in user.
Syntax
rbv_api.getMailMessage(msgNo)
Parameters
msgNo
Return value
Object representing message. The following properties are available:
• to: address “to”
• cc: address “CC”
• from: name of sender if available, else, address “from”
• fromEmail: address "from"
• subject: subject of email message
• body: body of email message as HTML
• text: body of email message as plain text
• date: date and time of email message as plain text
Example
rbv_api.openPOP3("mail.mydomain.com", 995, "address@mydomain.com", password, null);
var m = rbv_api.getMailMessage(100);
var x = m.get("subject");
rbv_api.closeMailSession();
rbv_api.getMailMessages()
Purpose
Returns email messages based on specified start and end indexes (1-based) from the INBOX folder of the
logged in user.
Syntax
rbv_api.getMailMessages(start, end)
Parameters
start
end
Return value
Array of objects representing messages. See available properties in rbv_api.getMailMessage() on page 1058.
Example
rbv_api.openPOP3("mail.mydomain.com", 995, "address@mydomain.com", password, null);
var arr = rbv_api.getMailMessages(100, 110);
for (var k=0; k<arr.length; k++) {
var m = arr[k];
rbv_api.println(m.get('subject'));
}
rbv_api.closeMailSession();
rbv_api.closeMailSession()
Purpose
Closes connection to a connected external email server.
Syntax
rbv_api.closeMailSession()
Return value
None
rbv_api.setSessionData()
Purpose
This function sets user session data as a key/value pair. The maximum number of key/value pairs is 50. If you
set a value for an existing key, the new value overrides the previous value. See User session data API on page
1059 for more information about user session data.
Syntax
rbv_api.setSessionData(key, value);
Parameters
key
A string that is the lookup key for user session data. The maximum length of a key is 50 characters.
value
The value associated with key. The value can be a boolean, number, string (maximum length is 1000
characters), or null (where null is the value).
Return value
The success message "Session Data set successfully" or throws exception upon error. Exception
messages include:
• Empty Key Received! — No input was passed
• Invalid Input — Input was in the wrong format
• Limit Violation. Max Allowed: 50 keys reached — User has already stored the maximum of
50 key/value pairs
Example
The following example sets a key/value pair:
try {
var key = "name1";
var value = "Joe";
} catch (error) {
rbv_api.println(error);
}
The following example passes a null key value and results in an error:
try {
} catch (error) {
rbv_api.println(error);
}
rbv_api.getSessionData()
Purpose
For user session data, this function returns the value for the specified key. See User session data API on page
1059 for more information about user session data.
Syntax
rbv_api.getSessionData(key);
Parameters
key
A string that is the lookup key for user session data. The maximum length of a key is 50 characters.
Return value
If successful, returns the value associated with that key. Note that you should call JSON.parse() on the response
to get the result in the correct JavaScript data type (see example below). Throws an exception if there is no
value associated with the key. Exception messages include:
• Empty key received! — No key parameter was passed
• No Mappings Set for [key] — There is no value associated with the specified key or there is no user
session data to retrieve
Example
The following example returns the value for the specified key.
try {
var key = "name1";
var resp = JSON.parse(rbv_api.getSessionData(key));
rbv_api.println(resp);
} catch (error) {
rbv_api.println(error);
}
If there is no value associated with the specified key, Rollbase throws an exception with the following string:
JavaException: java.lang.Exception: No Mappings Set for "name1"
rbv_api.getAllSessionData()
Purpose
For user session data, this function returns a complete map of key/value pairs stored as user session data as
a JavaScript object. See User session data API on page 1059 for more information about user session data.
Syntax
rbv_api.getAllSessionData();
Parameters
None
Return value
If successful, returns a complete map of key/value pairs stored as user session data as a JavaScript object.
Note that you should call JSON.parse() on the response to get the result in the correct JavaScript data types
(see example below). If there is no user session data, throws an exception with the string No Custom Session
Data is Set by User.
Example
The following example returns all key/value pairs set as user session data.
try {
var resp = JSON.parse(rbv_api.getAllSessionData());
rbv_api.println(resp);
} catch (error) {
rbv_api.println(error);
}
If there is no user session data, Rollbase throws an exception with the following string:
JavaException: java.lang.Exception: No Custom Session Data is Set by User
rbv_api.removeSessionData()
Purpose
For user session data, this function removes the session data for the specified key. See User session data API
on page 1059 for more information about user session data.
Syntax
rbv_api.removeSessionData(key);
Parameters
key
A string that is the lookup key for user session data. The maximum length of a key is 50 characters.
Return value
If successful, returns the string OK. If unsuccessful, throws an exception with one of the following messages:
• Empty key received! — No key parameter was passed
• No Mappings Set for [key] — There is no value associated with the specified key or there is no user
session data to retrieve
Example
If successful, the following example removes the user session data associated with the key "name1" and
returns the string OK.
try {
var key = "name1";
var resp = rbv_api.removeSessionData(key);
rbv_api.println(resp);
} catch (error) {
rbv_api.println(error);
}
If there is no value associated with the specified key, Rollbase throws an exception with the following string:
JavaException: java.lang.Exception: No Mappings Set for "name1"
rbv_api.removeAllSessionData()
Purpose
For user session data, this function removes all user session data. See User session data API on page 1059 for
more information about user session data.
Syntax
rbv_api.removeAllSessionData();
Parameters
None
Return value
If successful, returns the string OK.
Example
If successful, the following example removes all user session data and returns the string OK.
try {
var resp = rbv_api.removeAllSessionData();
rbv_api.println(resp);
} catch (error) {
rbv_api.println(error);
}
If there is no user session data, Rollbase throws an exception with the following string:
JavaException: java.lang.Exception: No Custom Session Data is Set by User
Queries
The Rollbase AJAX Query API allows developers to run SQL SELECT queries from application and portal
pages using AJAX.
The process of performing a SELECT query using the Client-Side Query API is similar to the server-side API
described (see Server-side API on page 989).
AJAX Query API functions typically require a callback function as a parameter. This is due to the asynchronous
nature of AJAX communications. You should process results inside that callback function rather than try to use
global JavaScript variables. For complex processing consider using other functions inside callback, possibly
included in the hosted files. For information on hosted files, see Hosted files on page 617.
Consider an example of invalid API usage:
var globalcount;
rbf_selectNumber("SELECT COUNT(1) FROM USER",
function(count) { globalcount = count; } );
alert("Counter="+globalcount);
The following code will display "Counter=undefined" since the processing of query result starts before that
result is fetched. However this example will work as expected:
rbf_selectNumber("SELECT COUNT(1) FROM USER",
function(count) { alert("Counter="+count); } );
Several Query API return results as JSON arrays or single values. JSON return values include those shown
in the following table.
Number Number
String String
rbf_createRecord()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This method creates a new record without changing the UI presentation. If an error occurred during operation
error notification procedure will be invoked. For fields that allow values in multiple languages, you can specify
those values using the fieldMap parameter. When setting field values, it is mandatory to set a field value in
the tenant's base language.
The current user must have Create permission on the selected object type to run this API.
Syntax
rbf_createRecord(objName, fieldMap, useIds, callback, useLegacyDateFormat)
Parameters
objName
fieldMap
useIds
If true, the API will accept numeric IDs; if false (default) the API will return integration codes for
status fields and picklists
callback
A callback function that will receive the new record ID as its parameter
useLegacyDateFormat
This optional parameter only applies to JSON output and, specifically, to Date and Date/Time fields.
If true, or if not specified, a date value is returned as a Date object. If false, a date value is returned
as a String.
rbf_deleteRecord()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This method deletes an existing backend record without changing UI presentation. If error occurred during
operation error notification procedure will be invoked (see rbf_setErrorsCallback).
The current user must have Delete permission on the selected object type to run this API.
Syntax
rbf_deleteRecord(objName, id, callback)
Parameters
objName
id
callback
A function to be executed when the operation is successful. It does not receive any parameters. This
is an optional parameter.
rbf_getCount()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function retrieves total number of records in a view. It brings info back to the page using an asynchronous
AJAX mechanism.
Syntax
rbf_getCount(viewId, callback)
Parameters
viewID
callback
rbf_getCount2()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
After applying the specified filter condition, retrieves the number of records in a view that meet that condition.
Syntax
rbf_getCount2(viewId, filterName, filterValue, callback)
Parameters
viewId
filterName
The integration name of the field to filter output using “equals” (replaces the filter set in the view, if
any).
filterValue
callback
A function to process the specified operation and receive its result, in the XML format, as the first
argument.
Example
The following example prints the number of records whose city = Austin to the console.
function my_callback(count) {
console.log("Count is: " + count);
}
rbf_getViewCount
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function fetches the number of records in a view, after applying filters, if any.
Syntax
rbf_getViewCount(viewId, callback, options);
Parameters
viewId
callback
A function to process the specified operation and receive the record count as the first argument.
options
An optional JSON object that sets the values of optional arguments. The properties that this object
can take are as follows:
• filtering: The filters to be applied on the view.
"filtering": {
"dateFilters": [{
"field": "<integration_name_of_field>",
"value": "<valid_date_filter_operand>"
}],
"filters": [{
"field": "<integration_name_of_field>",
"opCode": "<valid_opCode_for_field_type>",
"value": "<value>"
}, {
/* Additional filters */
}],
"joinType": "OR|AND"
}
Note: The dateFilters is an array type and only one date filter is supported in this API. The
dateFilter is not counted into the MaxFilters limit.
If there are filters mentioned in the view definition page, the joinType is derived from the view definition page
and it ignores the joinType (if any) specified on the API call.
If there are no filters defined in the view definition page, the joinType is derived from the API call. So, it is
mandatory to specify the joinType in such a case.
Note: The total number of allowed filters (including those defined in the view definition) cannot exceed the
shared property MaxFilters (default value 5). When sorting is specified on the API call, it overrides any sort
settings on the view definition. Only 3 sort levels are allowed on the API call.
Example
The following example filters columns by amount, price, and DOB and gives the number of records in the view:
rbf_getViewCount("12345", my_callback,
{
"filtering": {
"dateFilter": [{
"field": "DOB",
"value": "WEEK-1|WEEK"
}],
"filters": [
{
"field": "amount",
"value": "1606",
"opCode": "GE"
},
{
"field": "price",
"value": "102",
"opCode": "EQ"
}
],
"joinType": "OR"
}
});
rbf_getFields()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function retrieves the values of specified fields for a selected Rollbase record. It brings information back
to the page using the asynchronous AJAX mechanism. For fields that contain values for different languages,
pass a langCode value in the options parameter to get the values in a specific language. If the field does
not allow multiple languages, or if there is no value for the specified language, the value is returned in the
tenant's base language. To use the options parameter, you must specify a value for useLegacyDateFormat.
Throws an error if the specified language code is not configured for the tenant.
The current user must have View permission on the selected object type to run this API.
Syntax
rbf_getFields(objName, id, fields, callback, useLegacyDateFormat, options)
Parameters
objName
id
fields
callback
A callback function that will receive parameters: objName, id, an array of received values, which
can be accessed using field's integration name as a key (see example below).
useLegacyDateFormat
This optional parameter only applies to JSON output and, specifically, to Date and Date/Time fields.
If true, or if not specified, a date value is returned as a Date object. If false, a date value is returned
as a String.
options
An optional JSON object that sets the values of optional arguments. Currently this is only used for
setting langCode to a valid two-letter ISO language code, for example, {"langCode":"es"}.
Example
The following example reads two fields from a record in Spanish:
function my_callback(objName, objId, values) {
rbf_getPage()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function fetches a set of records in a view, including (optionally) dependent records. It brings info back to
the page using an asynchronous AJAX mechanism. The amount of processing and time required to get complete
results can vary widely, depending on whether it fetches related records and the number of rows you specify
per page.
For pages containing fields that allow values in multiple languages, you can use the options parameter to
specify the language in which to return the values. If the values are not available in the specified language, it
will return the values for the tenant's base language. If the specified language is not configured for the tenant,
it will throw an error. To use the options parameter, you must also provide values for the onlyViewFields
and useLegacyDateFormat parameters.
Only records on which the current user has View permission on the selected object type(s) will be fetched.
Syntax
rbf_getPage(viewId, startRow, rowsPerPage, composite, objNames, fieldList, callback,
onlyViewFields, useLegacyDateFormat, options)
Parameters
viewId
startRow
rowsPerPage
The maximum number of row to fetch in one call (user-specified value by default)
composite
objNames
A comma-separated list of dependent object names to fetch (use "*" for all objects - default value)
fieldList
A comma-separated list of field names to fetch (use "*" for all fields - default value)
callback
A callback function that will receive an array of fetched records as first parameter
onlyViewFields
When true, the output only includes fields in the specified view. When false, the output includes
all fields in the object definition.
useLegacyDateFormat
This optional parameter only applies to JSON output and, specifically, to Date and Date/Time fields.
If true, or if not specified, a date value is returned as a Date object. If false, a date value is returned
as a String.
options
An optional JSON object that sets the values of optional arguments. Currently this is only used for
setting langCode to a valid two-letter ISO language code, for example, {"langCode":"es"}.
Example
The following example fetches set or rows and processes results in a loop:
function my_callback(arr) {
for (var k=0; k<arr.length; k++) {
var amount = arr[k]['amount'];
var price = arr[k] [‘price'];
// Do something...
}
}
rbf_getPage2()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Similar to rbf_getPage() on page 1070, this function fetches a set of records in a view, including (optionally)
dependent records, but allows you to apply a filter to the results. It brings info back to the page using
asynchronous AJAX mechanism. The amount of processing and time required to get complete results can vary
widely, depending on whether it fetches related records and the number of rows you specify per page.
For pages containing fields that allow values in multiple languages, you can use the options parameter to
specify the language in which to return the values. If the values are not available in the specified language, it
will return the values for the tenant's base language. If the specified language is not configured for the tenant,
it will throw an error. To use the options parameter, you must also provide values for the onlyViewFields
and useLegacyDateFormat parameters.
Only records on which the current user has View permission on the selected object type(s) will be fetched.
Syntax
rbf_getPage2(viewId, startRow, rowsPerPage, composite, objNames, fieldList,
filterName, filterValue, callback, onlyViewFields, useLegacyDateFormat, options)
Parameters
viewId
startRow
rowsPerPage
The maximum number of row to fetch in one call (user-specified value by default)
composite
objNames
A comma-separated list of dependent object names to fetch (use "*" for all objects - default value)
fieldList
A comma-separated list of field names to fetch (use "*" for all fields - default value)
filterName
filterValue
A value used for filtering in the the same format as for spreadsheet import
callback
A callback function that will receive array of fetched records as first parameter
onlyViewFields
When true, the output only includes fields in the specified view. When false, the output includes
all fields in the object definition.
useLegacyDateFormat
This optional parameter only applies to JSON output and, specifically, to Date and Date/Time fields.
If true, or if not specified, a date value is returned as a Date object. If false, a date value is returned
as a String.
options
An optional JSON object that sets the values of optional arguments. Currently this is only used for
setting langCode to a valid two-letter ISO language code, for example, {"langCode":"es"}.
rbf_getViewPage
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function fetches a set of records in a view, including (optionally) dependent records and allows you to
apply a filter to the results. It brings info back to the page using an asynchronous AJAX mechanism. The amount
of processing and time required to get complete results can vary widely, depending on whether it fetches related
records and the number of rows you specify per page.
For pages containing fields that allow values in multiple languages, you can use the options parameter to
specify the language in which to return the values. If the values are not available in the specified language, it
will return the values for the tenant's base language. If the specified language is not configured for the tenant,
it will throw an error.
Syntax
rbf_getViewPage(viewId, callback, options);
Parameters
viewId
callback
A callback function that will receive an array of fetched records as first parameter.
options
An optional JSON object that sets the values of optional arguments. The properties that this object
can take are as follows:
• startRow: The row to start fetching records from (0 by default).
• rowsPerPage: The maximum number of row to fetch in one call (user-specified value by default).
• composite: The option to retrieve related records.
• level: The depth of recursion of dependent records (0 by default).
• objects: An array of objects where each element has two mandatory attributes – objName
and fieldList. There must be a valid value for objects if level >0.
• objName: A valid integration name of a related object. (null and * are not valid values).
• fieldList: A comma-separated list of field names to fetch for corresponding objects.
You can provide different fieldList for different related objects as part of composite. This
fieldList is independent of the view object fieldList. (null and * are not valid values).
• fieldList: A comma-separated list of field names to fetch (use "*" for all fields - default value).
• useLegacyDateFormat: If true, or if not specified, a date value is returned as a Date object.
If false, a date value is returned as a String.
• filtering: The filters to be applied on the view.
"filtering": {
"dateFilter": [{
"field": "<integration_name_of_field>",
"value": "<valid_date_filter_operand>"
}],
"filters": [{
"field": "<integration_name_of_field>",
"opCode": "<valid_opCode_for_field_type>",
"value": "<value>"
}, {
/* Additional filters */
}],
"joinType": "OR|AND"
}
Note: The dateFilters is an array type and only one date filter is supported in this API. The
dateFilter is not counted into the MaxFilters limit.
Note: The total number of allowed filters (including those defined in the view definition) cannot exceed the
shared property MaxFilters (default value 5). When sorting is specified on the API call, it overrides any sort
settings on the view definition. Only 3 sort levels are allowed on the API call.
Special date filter can be specified like the one available in UI. The 'name' should be the integration name of
the date field. The possible value that a filter value takes is as follows.
Today TODAY|TODAY+1
Yesterday TODAY-1|TODAY
Tomorrow TODAY+1|TODAY+2
The following table lists the different values that an opCode key can take for field types derived from UI.
EQ equals
ST starts with
CT contains
LT less than
GT greater than
LE less or equal
GE greater or equal
IN in array
CH checked
NCH unchecked
INC including
NUL is null
IS is
The following table lists the opCode keys that are available for different field types.
Picklist, Role, Status, Process, Appraisal, Approval EQ, NEQ, IN, NIN
Number (Integer, etc), Date EQ, NEQ, LT, GT, LE, GE, NUL, NNUL
Text EQ, NEQ, ST, END, CT, NCT, IN, NIN, NUL, NNUL
Example
The following example filters columns by amount, price, and DOB:
rbf_getViewPage("12345", my_callback, {
"useLegacyDateFormat": false,
"startRow": 0,
"rowsPerPage": 1000,
"composite": {
"level": 1,
"objects":[
{
"objName": "order",
"fieldList": "amount",
"}]
}
,
"fieldList": "amount, price,DOB",
"filtering": {
"dateFilter": [{
"field": "DOB",
"value": "WEEK-1|WEEK"
}],
"filters": [
{
"field": "amount",
"value": "1606",
"opCode": "GE"
},
{
"field": "price",
"value": "102",
"opCode": "EQ"
}
],
"joinType": "OR"
},
"sorting": [
{
"field": "amount",
"order": "asc"
},
{
"field": "price",
"order": "desc"
}
],
"langCode": "es"
});
rbf_getRelatedFields()
Purpose
Warning: This function is deprecated. Use rbf_getRelatedFields2() on page 1079.
For native Rollbase objects, this function retrieves the values of selected field for records related for a selected
Rollbase record.
The current user must have View permission on the selected object(s) to run this API.
The current user must have View permission on the selected object type to run this API.
Syntax
rbf_getRelatedFields(relName, id, fieldName, callback)
Parameters
relName
id
fieldName
callback
A callback function that will receive parameters: relName, id, an array of received values (one
value per related record).
Example
The following example reads field "amount" from related records and makes these values available for
computations:
function my_callback(relName, objId, values) {
for (var i=0; i<values.length; i++) {
var amount = values[i];
// Do something...
}
}
rbf_getRelatedFields2()
Purpose
This function retrieves the values of the selected fields for records related to a selected Rollbase record.
For fields that allow values in multiple languages, you can specify the language in which to return values in the
options parameter. If the values are not available in the specified language, it will return the values for the
tenant's base language. If the specified language is not configured for the tenant, it will throw an error. To use
the options parameter, you must set a value for useLegacyDateFormat.
The current user must have View permission on the selected object type to run this API.
Syntax
rbf_getRelatedFields2(relName, objName, id, fieldName, callback,
useLegacyDateFormat, options)
Parameters
relName
objName
id
fieldName
callback
A callback function that will receive parameters: relName, id, an array of received values (one
value per related record).
useLegacyDateFormat
This optional parameter only applies to JSON output and, specifically, to Date and Date/Time fields.
If true, or if not specified, a date value is returned as a Date object. If false, a date value is returned
as a String.
options
An optional JSON object that sets the values of optional arguments. Currently this is only used for
setting langCode to a valid two-letter ISO language code, for example, {"langCode":"es"}.
Example
The following example reads field "amount" from related records and makes these values available for
computations:
function my_callback(relName, objId, values) {
for (var i=0; i<values.length; i++) {
var amount = values[i];
// Do something...
}
}
rbf_getRelatedIds()
Purpose
For native Rollbase objects, this function retrieves the ids of records related to a selected Rollbase record.
The current user must have View permission on the selected object type to run this API.
Note: For external objects (such as those mapped to external tables, to OpenEdge Service objects, or through
a D2C connection), you can use the method, rbf_getRelatedIds2() on page 1081.
Syntax
rbf_getRelatedIds(relName, id, callback)
Parameters
relName
id
callback
A callback function that will receive parameters: relName, id, an array of related ids.
rbf_getRelatedIds2()
Purpose
For external objects (such as those mapped to external tables, to OpenEdge Service objects, or through a D2C
connection), this function retrieves the ids of records related to a selected Rollbase record.
The current user must have View permission on the selected object type to run this API.
Note: For native Rollbase objects, you can use the method, rbf_getRelatedIds() on page 1080.
Syntax
rbf_getRelatedIds2(relName, objName, id, callback)
Parameters
relName
objName
id
callback
A callback function that will receive parameters: relName, id, an array of related ids.
Example
function my_callback(relName, objId, values) {
for (var i=0; i<values.length; i++) {
var amount = values[i];
// Do something...
}
}
rbf_runTrigger()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function sends AJAX request to run a trigger on selected record.
The current user must have Edit permission on the selected object type to run this API.
Syntax
rbf_runTrigger(objName, id, triggerId, checkCondition, callback,
useLegacyDateFormat, options)
Parameters
objName
id
triggerID
checkCondition
If true, check trigger's condition formula before running trigger, otherwise ignore condition formula.
callback
A function to be called when AJAX request returns (optional). Will receive single parameter: true or
false depending on whether trigger has actually ran.
useLegacyDateFormat
This only applies to Date and Date/Time fields in JSON output. When set to false, a date value is
returned as a String. When set to true, a date value is returned as a Date object. Default value is
true
options
options is list of name-value pairs set in a variable in the form {name1 : value1 , name2 :
value2}. When the key runRecursions is set to true, configures trigger to run recursively,
assuming recursive properties are set on the trigger definition page. Default value is false.
Example
If you want the system to send email when portal user clicks on particular link on your portal page do the
following:
1. Prepare an email template.
2. Prepare a trigger to send email. This example uses the integration name sendEmail
3. Make sure the Edit operation is allowed for either Portal User or API User.
4. Prepare the following link:
<a href='#' onclick='rbf_runTrigger(
"myVisitor", {!#CURR_VISIT.id}, "sendEmail", false);'>Send Email</a>
For OpenEdge or any external objects use the {!#UID} token in quotes:
rbf_selectNumber()
Warning: Support for using this method with external objects (such as those mapped to external tables
or through a D2C connection) is a beta feature. This method is supported in production systems, except
for external objects.
Purpose
This function runs a SQL SELECT query on the server and returns a single decimal number to the callback
function. This is a simplified version of rbf_selectValue suitable for calculating totals etc.
The current user must have View permission on the selected object type to run this API.
The SELECT query used in this method consists of the following parts:
• The SELECT statement expects columns or expressions to be selected (mandatory). Use the field integration
names as SQL column names. You can use expressions such as COUNT(1). You cannot use * to retrieve
all columns.
• The FROM clause must consist of exactly one object name (mandatory).
• The WHERE clause can include a valid SQL expression to narrow the selection (optional). Use field integration
names as SQL column names.
• The ORDER BY clause can include a valid SQL expression to order the selection (optional). Use field
integration names as SQL column names.
You can use special tokens in your queries such as:
• TODAY for current time
• WEEK for 12PM of last Sunday
• MONTH for 12PM of 1st day of current month
• QUARTER for 12PM of 1st day of current quarter
• YEAR for 12PM of 1st day of current year
• CURR_USER for id of currently logged in user
Object and Field names are case-sensitive, while other components of the SQL query are not.
Use #code suffix to fetch integration codes for picklist fields rather than IDs. See Adding Logic to an Application
for more information.
Syntax
rbf_selectNumber(query, callback)
Parameters
query
callback
A callback function that will receive a single value returned by the query.
rbf_selectQuery()
Warning: Support for using this method with external objects (such as those mapped to external tables
or through a D2C connection) is a beta feature. This method is supported in production systems, except
for external objects.
Purpose
This function runs a SQL SELECT query on the server and returns results as a 2D array to the callback function.
For fields that contain values for different languages, pass a langCode value in the options parameter to
get the values in a specific language. If the field does not allow multiple languages, or if there is no value for
the specified language, the value is returned in the tenant's base language. To use the options parameter,
you must specify a value for useLegacyDateFormat. Throws an error if the specified language code is not
configured for the tenant.
The current user must have View permission on the selected object type to run this API.
The SELECT query used in this method consists of the following parts:
• The SELECT statement expects columns or expressions to be selected (mandatory). Use the field integration
names as SQL column names. You can use expressions such as COUNT(1). You cannot use * to retrieve
all columns.
• The FROM clause must consist of exactly one object name (mandatory).
• The WHERE clause can include a valid SQL expression to narrow the selection (optional). Use field integration
names as SQL column names.
• The ORDER BY clause can include a valid SQL expression to order the selection (optional). Use field
integration names as SQL column names.
You can use special tokens in your queries such as:
• TODAY for current time
• WEEK for 12PM of last Sunday
• MONTH for 12PM of 1st day of current month
• QUARTER for 12PM of 1st day of current quarter
• YEAR for 12PM of 1st day of current year
• CURR_USER for id of currently logged in user
Object and Field names are case-sensitive, while other components of the SQL query are not.
Use #code suffix to fetch integration codes for picklist fields rather than IDs. See Adding Logic to an Application
for more information.
Syntax
rbf_selectQuery(query, maxRows, callback, useLegacyDateFormat, options);
Parameters
query
SQL SELECT query. See Query API section below for examples and limitations.
maxRows
callback
A callback function that will receive a 2D JSON array with query results as parameter.
useLegacyDateFormat
This optional parameter only applies to JSON output and, specifically, to Date and Date/Time fields.
If true, or if not specified, a date value is returned as a Date object. If false, a date value is returned
as a String.
options
An optional JSON object that sets the values of optional arguments. Currently this is only used for
setting langCode to a valid two-letter ISO language code, for example, {"langCode":"es"}.
Example
The following example returns the query result in French:
function my_callback(values) {
var amount = values[0][0];
var price = values[0][1];
// Do something...
}
rbf_selectQuery2()
Warning: Support for using this method with external objects (such as those mapped to external tables
or through a D2C connection) is a beta feature. This method is supported in production systems, except
for external objects.
Purpose
This function runs a SQL SELECT query on the server and returns results as a 2D array to the callback function.
It differs from rbf_selectQuery() on page 1084 in that it takes a rowFrom parameter where you can specify a
starting row other than 0. For fields that contain values for different languages, pass a langCode value in the
options parameter to get the values in a specific language. If the field does not allow multiple languages, or
if there is no value for the specified language, the value is returned in the tenant's base language. To use the
options parameter, you must specify a value for useLegacyDateFormat. Throws an error if the specified
language code is not configured for the tenant.
The current user must have View permission on the selected object type to run this API.
The SELECT query used in this method consists of the following parts:
• The SELECT statement expects columns or expressions to be selected (mandatory). Use the field integration
names as SQL column names. You can use expressions such as COUNT(1). You cannot use * to retrieve
all columns.
• The FROM clause must consist of exactly one object name (mandatory).
• The WHERE clause can include a valid SQL expression to narrow the selection (optional). Use field integration
names as SQL column names.
• The ORDER BY clause can include a valid SQL expression to order the selection (optional). Use field
integration names as SQL column names.
You can use special tokens in your queries such as:
• TODAY for current time
• WEEK for 12PM of last Sunday
• MONTH for 12PM of 1st day of current month
• QUARTER for 12PM of 1st day of current quarter
• YEAR for 12PM of 1st day of current year
• CURR_USER for id of currently logged in user
Object and Field names are case-sensitive, while other components of the SQL query are not.
Use #code suffix to fetch integration codes for picklist fields rather than IDs. See Adding Logic to an Application
for more information.
Syntax
rbf_selectQuery(query, rowFrom, maxRows, callback, useLegacyDateFormat, options);
Parameters
query
SQL SELECT query. See Query API section below for examples and limitations.
rowFrom
maxRows
callback
A callback function that will receive a 2D JSON array with query results as parameter.
useLegacyDateFormat
This optional parameter only applies to JSON output and, specifically, to Date and Date/Time fields.
If true, or if not specified, a date value is returned as a Date object. If false, a date value is returned
as a String.
options
An optional JSON object that sets the values of optional arguments. Currently this is only used for
setting langCode to a valid two-letter ISO language code, for example, {"langCode":"es"}.
Example
The following example returns the query result in French:
function my_callback(values) {
var amount = values[0][0];
var price = values[0][1];
// Do something...
}
rbf_selectValue()
Warning: Support for using this method with external objects (such as those mapped to external tables
or through a D2C connection) is a beta feature. This method is supported in production systems, except
for external objects.
Purpose
This function runs a SQL SELECT query on the server and returns a single value to the callback function. For
fields that contain values for different languages, pass a langCode value in the options parameter to get
the values in a specific language. If the field does not allow multiple languages, or if there is no value for the
specified language, the value is returned in the tenant's base language. To use the options parameter, you
must specify a value for useLegacyDateFormat. Throws an error if the specified language code is not
configured for the tenant.
The current user must have View permission on the selected object type to run this API.
The SELECT query used in this method consists of the following parts:
• The SELECT statement expects columns or expressions to be selected (mandatory). Use the field integration
names as SQL column names. You can use expressions such as COUNT(1). You cannot use * to retrieve
all columns.
• The FROM clause must consist of exactly one object name (mandatory).
• The WHERE clause can include a valid SQL expression to narrow the selection (optional). Use field integration
names as SQL column names.
• The ORDER BY clause can include a valid SQL expression to order the selection (optional). Use field
integration names as SQL column names.
Syntax
rbf_selectValue(query, callback, useLegacyDateFormat, options)
Parameters
query
callback
A callback function that will receive a single JSON value brought by the query.
useLegacyDateFormat
This optional parameter only applies to JSON output and, specifically, to Date and Date/Time fields.
If true, or if not specified, a date value is returned as a Date object. If false, a date value is returned
as a String.
options
An optional JSON object that sets the values of optional arguments. Currently this is only used for
setting langCode to a valid two-letter ISO language code, for example, {"langCode":"es"}.
Example
The following example returns the query result in French:
function my_callback(returnAmt) {
// Do something...
}
rbf_setField()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function sets the value of specified field for a selected RollbaseRollbase record and modifies the actual
record value without changing the UI presentation. Compare with rbf_setFieldValue() API which sets UI
presentation but does not immediately change backend value.
If an error occurred during update operation, an error notification procedure will be invoked .
For fields that allow values in multiple languages, use the fieldValue parameter to set values for additional
languages. If there is not already a value in a field for the tenant's base language, it is mandatory to supply a
value for the base language.
The current user must have Edit permission on the selected object type to run this API.
Syntax
rbf_setField(objName, id, fieldName, fieldValue, useIds, callback,
useLegacyDateFormat)
Parameters
objName
id
fieldName
The name of the field for which the value will be set
fieldValue
The new value for the field. For fields that support multiple languages, the value of this parameter
is a JSON object that specifies the two-letter ISO language code and value for each language, for
example:
{":en":"EnglishValue","el":"GreekValue"}
useIds
If true, the API will accept numeric IDs; if false (default) the API will return integration codes for status
fields and picklists
callback
A function to be executed when the operation is successful. It does not receive any parameters. This
is an optional parameter.
useLegacyDateFormat
This optional parameter only applies to JSON output and, specifically, to Date and Date/Time fields.
If true, or if not specified, a date value is returned as a Date object. If false, a date value is returned
as a String.
rbf_updateRecord()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This method modifies record values of a RollbaseRollbase object without changing UI presentation. If an error
occurs during the operation, an error notification procedure will be invoked (see rbf_setErrorsCallback). For
fields that allow values in multiple languages, you can specify those values using the fieldMap parameter.
When updating field values, it only mandatory to update a field value in the tenant's base language when that
field does not already have a value in the base language.
The current user must have Edit permission on the selected object type to run this API.
Syntax
rbf_updateRecord(objName, id, fieldMap, useIds, callback, useLegacyDateFormat)
Parameters
objName
id
fieldMap
useIds
If true, the API will accept numeric IDs; if false (default) the API will return integration codes for
status fields and picklists
callback
A function to be executed when the operation is successful. It does not receive any parameters. This
is an optional parameter.
useLegacyDateFormat
This optional parameter only applies to JSON output and, specifically, to Date and Date/Time fields.
If true, or if not specified, a date value is returned as a Date object. If false, a date value is returned
as a String.
Field Manipulation
The functions in this section allow you to access and modify record fields.
rbf_getFieldContent()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function retrieves the HTML content of a read-only field on the current page.
Syntax
rbf_getFieldContent(fieldname)
Parameters
fieldName
rbf_getFieldValue()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function retrieves the value of a field on current page with a given integration name. It will return null if the
field does not exist or is not included on the current page. For fields that contain values for different languages,
pass a langCode value in the options parameter to get the value in a specific language. To retrieve the
value in the tenant's base language, do not use the options parameter.
Syntax
rbf_getFieldValue(fieldName, options)
Parameters
fieldName
options
An optional JSON object that sets the values of optional arguments. Currently this is only used for
setting langCode to a valid two-letter ISO language code, for example, {"langCode":"es"}.
Example
The following example returns the Spanish value of the field with the integration name name.
rbf_getFieldValue("name",{"langCode":"es"});
rbf_getPicklistCode()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Returns the integration code of the currently selected option for a picklist, multi-select picklist, group of
checkboxes, or radio buttons field. This function works in View and Edit pages.
Syntax
rbf_getPicklistCode(fieldName)
Parameters
fieldName
rbf_getPicklistCodes()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function returns a list of comma-separated integration codes corresponding to the currently selected
options in a picklist, multi-select picklist, or group of checkboxes field. This function works in view and edit
pages.
Syntax
rbf_getPicklistCodes(fieldName)
fieldName
rbf_setFieldContent()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function sets the HTML content for a formula or template field on current page. It will have no effect if the
field does not exist on the current page.
Syntax
rbf_setFieldContent(fieldname, value)
Parameters
fieldName
value
rbf_setFieldValue()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function sets the value of a field on current page with a given integration name. It will run the field's
onchange event handler if there is event handling code attached to that event. For fields that contain values
for different languages, pass a langCode value in the options parameter to set the value in a specific
language. To set the value in the tenant's base language, do not use the options parameter.
Syntax
rbf_setFieldValue(fieldname, value, options)
Parameters
fieldName
value
Value to set
options
An optional JSON object that sets the values of optional arguments. Currently this is only used for
setting langCode to a valid two-letter ISO language code, for example, {"langCode":"es"}.
Example
The following example sets the French value of the field with the integration name name:
rbf_setFieldValue("name", "Cafétéria", {"langCode":"fr"});
rbf_setFieldDisabled()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function disables or enables an input field on the current page. It will have no effect if the field does not
exist on the current page. For fields that allow values in multiple languages, use the options parameter to
specify which language for which to disable/enable the input field. If the language code is invalid, or is not
included in the tenant's supported languages, the field will not be disabled or enabled.
Note: According to the HTML specification, disabled fields do not send data back to server when HTML form
is submitted. So if you wish disabled to send data (probably set by some client-side script) you can re-enable
input field in page's onSubmit event handler.
Syntax
rbf_setFieldDisabled(fieldname, isDisabled, options)
Parameters
fieldName
isDisabled
options
A JSON object containing langCode, whose value is an array of two-letter ISO language codes, for
example, {"langCode":["ar","he","fr"]}. The field will be disabled/enabled for those
languages.
rbf_setPicklistCode()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function sets the value of a picklist field or radio buttons if the code attribute of the particular option is
equal to the optCode parameter. It will also invoke onchange (onclick) event handling code associated
with this field.
Syntax
rbf_setPicklistCode(fieldName, optCode)
Parameters
fieldName
optCode
This value will be compared to the integration code of a particular picklist option
Data Formatting
The methods in this section allow you to manipulate numbers, dates, and currency.
rbf_getDate()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function creates a JavaScript Date Object from a string. It returns null for an empty string.
Syntax
rbf_getDate(value)
Parameters
value
rbf_getDigits()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Extracts digits from string value and ignores all other characters.
Syntax
rbf_getDigits(value)
Parameters
value
rbf_getFloat()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Converts a given value from a string into a float number. It ignores symbols (e.g., $).
Syntax
rbf_getFloat(value)
Parameters
value
rbf_formatCurrency()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Formats a given number into a currency string.
Syntax
rbf_formatCurrency(value, currSymbol, showZero, decPlaces, thsSep)
Parameters
value
currSymbol
showZero
If true, empty and NaN values are treated as "$0.00", otherwise as empty string ""
decPlaces
thsSep
rbf_formatDate()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function formats a JavaScript Date object into a string suitable for storing in Date input fields.
Note: When using the New UI, Progress recommends obtaining the date format from the user's localization
settings via the PageLocalization object. See the example below. See PageLocalization on page 1157 for more
information about the PageLocalization object. In addition, all date formats used in the New UI should conform
to those in the Kendo formatting library. See the Kendo UI documentation for more information.
Syntax
rbf_formatDate(d, format)
Parameters
d
format
Example
This example uses the PageLocalization object to populate the format parameter:
rbf_formatNumber()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Formats a given number into a decimal string.
Syntax
rbf_formatNumber(value, decPlaces, decSeparator, thsSep)
Parameters
value
decPlaces
decSeparator
The symbol used to separate the integer part from the fractional part of a decimal number. ("." by
default)
thsSep
Example
var x = rbf_formatNumber(7000123.45,4,'.',',');
Result: 7,000,123.4500
rbf_formatUsingMask()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Formats a string containing digits as specified in the mask parameter.
Syntax
rbf_formatUsingMask(value, mask)
Parameters
value
mask
Example
var x = rbf_formatUsingMask("123456789", "###-##-####");
Result: 123-45-6789
rbf_getInt()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function converts a given value from a string into an integer number. It ignores symbols (e.g., $).
Syntax
rbf_getInt(value)
Parameters
value
The JavaScript API functions described in this section can be used to manipulate the rows and cells of an
existing Grid Control. At least one grid control must exist on a page before you can configure grids or use the
grid APIs. See Using grid controls to manage multiple records on page 511 for information on adding, configuring
and using grid controls. All Grid API names have the suffix 2 to distinguish them from the deprecated API.
Field-level HTML event handlers do not apply to fields in a grid control since there may be any number of
instances of the same field in a grid. Therefore, Rollbase provides special grid event handling options. Grid
Controls provide three types of event handlers:
The following topics provide examples and document the grid control API:
By adding an event handler, a script component, and JavaScript to perform the calculations, the grid totals will
dynamically update when the user tabs out of the calculated fields, as shown below:
}
</script>
4. Test by creating a new record and adding line items. Note that when you tab out of the quantity and price
fields, the totals update automatically.
function rbf_findPrice(rowIndex) {
m_rowIndex = -1;
var catId = rbf_getInt(rbf_getGridValue2(0, 'R8011504', rowIndex));
var p = rbf_getFloat(rbf_getGridValue2(0, 'price', rowIndex));
if (catId>0 && p<=0) {
rbf_getFields("catalog_item", catId, "msrp", rbf_callback);
m_rowIndex = rowIndex;
}
else {
rbf_showGridRow(rowIndex);
}
}
function rbf_showGridRow(rowIndex) {
var a = rbf_getFloat(rbf_getGridValue2(0, 'quantity', rowIndex));
var p = rbf_getFloat(rbf_getGridValue2(0, 'price', rowIndex));
var t = a*p;
rbf_setGridContent2(0, 'total', rowIndex, rbf_formatCurrency(t));
}
• If a related Catalog Item is selected but the Price field is not set yet, the rbf_findPrice() function sends
an AJAX request using rbf_getFields() to determine the price of the selected item and return it.
Otherwise rbf_showGridRow() calculates the Line Item totals.
• The rbf_callback function processes the information fetched by the AJAX response. It finds the 'msrp'
value from response and copies it to the 'price' field, and then updates the grid row using
rbf_showGridRow().
rbf_addGridRow()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Adds a new empty row to a grid.
Syntax
rbf_addGridRow(gridNo)
Parameters
gridNo
rbf_delGridRow()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Deletes the row with given index from a grid.
Syntax
rbf_delGridRow(gridNo, rowIndex)
Parameters
gridNo
rowIndex
rbf_getGridControlComponent()
Purpose
Returns the GridControl on page 1152 object from the current page in the position specified by the gridNo
parameter. You can also get a GridControl object using rbf_getPageComponent() on page 1134.
Note: This API and the GridControl on page 1152 object are only available in the New UI.
Syntax
rbf_getGridControlComponent(gridNo)
Parameters
gridNo
The order in which the grid control appears on the page. For the first grid control on the page, the
value is 0, for the second grid control on the page, the value is 1, and so on.
Return value
The specified GridControl on page 1152 object.
Example
The following example returns the number of grid rows in the first grid control component on the current page:
var numberOfGridRows = rbf_getGridControlComponent(0).getMaxRowIndex();
rbf_getGridFieldContext()
Purpose
Returns the GridFieldContext on page 1153 object for the specified grid control, row index, and field.
Note: This API and the GridFieldContext object are only available in the New UI.
Syntax
rbf_getGridFieldContext(gridNo, rowIndex, fieldName)
Parameters
gridNo
The order in which the grid control appears on the page. For the first grid control on the page, the
value is 0, for the second grid control on the page, the value is 1, and so on.
rowIndex
The index of the row of the grid from which to return the field context.
fieldName
Return value
The specified .
Example
The following example returns a JSON object representing the value of the description field in the fourth row
of the second grid control component on the current page:
var fieldData = rbf_getGridFieldContext(1, 3, "description").getGridFieldData();
rbf_getGridField()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Gets the name of the field that was last changed in the Grid.
Syntax
rbf_getGridField(gridNo)
Parameters
Parameter
Description
gridNo
rbf_getGridPicklistCode()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Gets the integration code of a grid control picklist field with the given integration name at the specified row
number. Returns null if the grid control does not exist on the current page.
Syntax
rbf_getGridPicklistCode(gridNo, fieldName, rowIndex);
Parameters
gridNo
fieldName
rowIndex
Return Value
The integration code of the grid control picklist field. Null if the grid control does not exist on the page.
rbf_getGridValue2()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Gets the value of a single field in a grid control with the given integration name at the specified row number.
Returns null if a field or grid control does not exist on the current page.
Syntax
rbf_getGridValue2(gridNo, fieldName, rowIndex)
Parameters
gridNo
fieldName
rowIndex
rbf_getMaxRowIndex2()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Returns the maximum value for the rowIndex in a grid. This may be different from the total number of rows in
the grid.
Note: A rowIndex is assigned to each grid row when it is first created or rendered. Deleting a row does not
affect (decrement) indexes of other rows.
Syntax
rbf_getMaxRowIndex2(gridNo)
Parameters
gridNo
Example
This function can be used to iterate through all grid rows:
var n = rbf_getMaxRowIndex2(0);
for (var rowIndex=0; rowIndex<n; rowIndex++) {
var x = rbf_getGridValue2(0, "amount", rowIndex);
}
rbf_setGridContent2()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Sets the HTML content for a formula or template field in GridControl. Has no effect if the fields don't exist in
GridControl.
Syntax
rbf_setGridContent2(gridNo, fieldName, rowIndex, value)
Parameters
gridNo
fieldName
rowIndex
value
rbf_setGridPicklistCode()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Sets integration code of picklist field in a grid control with the given integration name at the specified row
number. Has no effect if a field or grid control does not exist on the current page. This function is similar to
rbf_setPicklistCode() on page 1095.
Syntax
rbf_setGridPicklistCode(gridNo, fieldName, rowIndex, optCode)
Parameters
gridNo
fieldName
rowIndex
optCode
rbf_setGridValue2()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Sets the value of a single editable field in the grid control with the given integration name at the specified row
number. Has no effect if a field or grid control does not exist on the current page.
Syntax
rbf_setGridValue2(gridNo, fieldName, rowIndex, value)
Parameters
gridNo
fieldName
rowIndex
value
rbf_showGridTotals()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Calculate and display totals for grid.
Syntax
rbf_showGridTotals(gridNo)
Parameters
gridNo
rbf_sumGridColumn2()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Retrieves the sum of column values in a grid.
Syntax
rbf_sumGridColumn2(gridNo, fieldName)
Parameters
gridNo
fieldName
• Application
• Object
• Field
• Relationship
Note: All metadata methods require administrative privileges, regardless of the view, edit, create and delete
permissions set on the application or object. Establish the session to use these methods by logging in with
credentials for an administrative user.
To use the metadata API you must reference metadata.js on your web page. Use the Page Editor and add
the following HTML code-snippet to your Script component:
<script src='../js/metadata.js' type='text/javascript' charset='utf-8'></script>
For more information about XML metadata definitions for Rollbase applications, see Metadata XML reference
on page 1173.
rbf_createApplicationDef()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Creates an application from an XML document.
Syntax
rbf_createApplicationDef(xmlString, callback, errorCallback)
Parameters
xmlString
callback
A function to process the specified operation and receive its result, in the XML format, as the first
argument.
errorCallback
An optional parameter to receive an error message as the first argument. If you do not specify this
parameter in the method call, the callback defined by ref_setErrorsCallback(callback) is
invoked to receive the error message.
For information about the XML elements in an Application, see Application XML Elements on page 1173.
rbf_createFieldDef()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Creates a field definition from an XML document.
Syntax
rbf_createFieldDef(xmlString, callback, errorCallback)
Parameters
xmlString
callback
A function to process the specified operation and receive its result, in the XML format, as the first
argument.
errorCallback
An optional parameter to receive an error message as the first argument. If you do not specify this
parameter in the method call, the callback defined by ref_setErrorsCallback(callback) is
invoked to receive the error message.
For information about the XML definitions in a field, see Field XML Definition on page 1180.
rbf_createObjectDef()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Creates a new object definition, including any specified fields and relationships, from an XML document.
Syntax
rbf_createObjectDef(xmlString, callback, errorCallback)
Parameters
xmlString
callback
A function to process the specified operation and receive its result, in the XML format, as the first
argument.
errorCallback
An optional parameter to receive an error message as the first argument. If you do not specify this
parameter in the method call, the callback defined by ref_setErrorsCallback(callback) is
invoked to receive the error message.
For information about the XML definitions in an object, see Object XML Definition on page 1176.
rbf_createRelationshipDef()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Creates a new relationship from an XML document.
Syntax
rbf_createRelationshipDef(xmlString, callback, errorCallback)
Parameters
xmlString
callback
A function to process the specified operation and receive its result, in the XML format, as the first
argument.
errorCallback
An optional parameter to receive an error message as the first argument. If you do not specify this
parameter in the method call, the callback defined by ref_setErrorsCallback(callback) is
invoked to receive the error message.
For information about the XML definitions in a relationship, see Relationship XML Definition on page 1187.
rbf_deleteApplicationDef()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Deletes an application definition and all of its component definitions.
Syntax
rbf_deleteApplicationDef(appId, callback, errorCallback)
Parameters
appId
callback
A function to process the specified operation and receive its result, in the XML format, as the first
argument.
errorCallback
An optional parameter to receive an error message as the first argument. If you do not specify this
parameter in the method call, the callback defined by ref_setErrorsCallback(callback) is
invoked to receive the error message.
For information about the XML elements in an Application, see Application XML Elements on page 1173.
rbf_deleteFieldDef()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Deletes a field definition from the specified object.
Syntax
rbf_deleteFieldDef(objName, fieldName, callback, errorCallback)
Parameters
objName
fieldName
callback
A function to process the specified operation and receive its result, in the XML format, as the first
argument.
errorCallback
An optional parameter to receive an error message as the first argument. If you do not specify this
parameter in the method call, the callback defined by ref_setErrorsCallback(callback) is
invoked to receive the error message.
For information about the XML definitions in a field, see Field XML Definition on page 1180.
rbf_deleteObjectDef()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Deletes an object definition, including its fields and relationships.
Syntax
rbf_deleteObjectDef(objName, callback, errorCallback)
Parameters
objName
callback
A function to process the specified operation and receive its result, in the XML format, as the first
argument.
errorCallback
An optional parameter to receive an error message as the first argument. If you do not specify this
parameter in the method call, the callback defined by ref_setErrorsCallback(callback) is
invoked to receive the error message.
For information about the XML definitions in an object, see Object XML Definition on page 1176.
rbf_deleteRelationshipDef()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Deletes a relationship definition.
Syntax
rbf_deleteRelationshipDef(relName, callback, errorCallback)
Parameters
relName
callback
A function to process the specified operation and receive its result, in the XML format, as the first
argument.
errorCallback
An optional parameter to receive an error message as the first argument. If you do not specify this
parameter in the method call, the callback defined by ref_setErrorsCallback(callback) is
invoked to receive the error message.
For information about the XML definitions in a relationship, see Relationship XML Definition on page 1187.
rbf_getApplicationDef()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Retrieves an XML description of a Rollbase application.
Syntax
rbf_getApplicationDef(appId,callback,errorCallback)
Parameters
appId
callback
A function to process the specified operation and receive its result, in the XML format, as the first
argument.
errorCallback
An optional parameter to receive an error message as the first argument. If you do not specify this
parameter in the method call, the callback defined by ref_setErrorsCallback(callback) is
invoked to receive the error message.
For information about the XML elements in an application, see Application XML Elements on page 1173.
rbf_getFieldDef()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Retrieves a field definition as an XML document.
Syntax
rbf_getFieldDef(objname, fieldName, callback, errorCallback)
Parameters
objName
fieldName
callback
A function to process the specified operation and receive its result, in the XML format, as the first
argument.
errorCallback
An optional parameter to receive an error message as the first argument. If you do not specify this
parameter in the method call, the callback defined by ref_setErrorsCallback(callback) is
invoked to receive the error message.
For information about the XML definitions in a field, see Field XML Definition on page 1180.
rbf_getObjectDef()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Retrieves the specified object definition and returns it as an XML document.
Syntax
rbf_getObjectDef(objName, callback, errorCallback)
Parameters
objName
callback
A function to process the specified operation and receive its result, in the XML format, as the first
argument.
errorCallback
An optional parameter to receive an error message as the first argument. If you do not specify this
parameter in the method call, the callback defined by ref_setErrorsCallback(callback) is
invoked to receive the error message.
For information about the XML definitions in an object, see Object XML Definition on page 1176.
rbf_getRelationshipDef()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Retrieves a relationship definition as an XML document.
Syntax
rbf_getRelationshipDef(relName, callback, errorCallback)
Parameters
relName
callback
A function to process the specified operation and receive its result, in the XML format, as the first
argument.
errorCallback
An optional parameter to receive an error message as the first argument. If you do not specify this
parameter in the method call, the callback defined by ref_setErrorsCallback(callback) is
invoked to receive the error message.
For information about the XML definitions in a relationship, see Relationship XML Definition on page 1187.
rbf_updateApplicationDef()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Updates an application from an XML document.
Syntax
rbf_updateApplicationDef(xmlString, callback, errorCallback)
Parameters
xmlString
callback
A function to process the specified operation and receive its result, in the XML format, as the first
argument.
errorCallback
An optional parameter to receive an error message as the first argument. If you do not specify this
parameter in the method call, the callback defined by ref_setErrorsCallback(callback) is
invoked to receive the error message.
For information about the XML elements in an Application, see Application XML Elements on page 1173.
rbf_updateFieldDef()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Updates a field definition from an XML document.
Syntax
rbf_updateFieldDef(xmlString, callback, errorCallback)
Parameters
xmlString
callback
A function to process the specified operation and receive its result, in the XML format, as the first
argument.
errorCallback
An optional parameter to receive an error message as the first argument. If you do not specify this
parameter in the method call, the callback defined by ref_setErrorsCallback(callback) is
invoked to receive the error message.
For information about the XML definitions in a field, see Field XML Definition on page 1180.
rbf_updateObjectDef()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Updates an object definition from an XML document.
Syntax
rbf_updateObjectDef(xmlString, callback, errorCallback)
Parameters
xmlString
callback
A function to process the specified operation and receive its result, in the XML format, as the first
argument.
errorCallback
An optional parameter to receive an error message as the first argument. If you do not specify this
parameter in the method call, the callback defined by ref_setErrorsCallback(callback) is
invoked to receive the error message.
For information about the XML definitions in an object, see Object XML Definition on page 1176.
rbf_updateRelationshipDef()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Updates a relationship definition from an XML document.
Syntax
rbf_updateRelationshipDef(xmlString, callback, errorCallback)
Parameters
xmlString
callback
A function to process the specified operation and receive its result, in the XML format, as the first
argument.
errorCallback
An optional parameter to receive an error message as the first argument. If you do not specify this
parameter in the method call, the callback defined by ref_setErrorsCallback(callback) is
invoked to receive the error message.
For information about the XML definitions in a relationship, see Relationship XML Definition on page 1187.
Miscellaneous
Methods in this section allow you to obtain information such as integration codes and IDs, determine or set the
state of checkboxes, and set a callback for error conditions.
rbf_addOnLoadMethod()
Purpose
Attaches an onload event handler function to a page. This function is useful as a shorthand for adding an
onload event handler function to a page. Call this function in a script or HTML component on the page for
which you want to add an onload event handler. This function works for both the New UI and the Classic UI.
For the New UI, it works for both page refresh using AJAX as well as for a complete page load.
See HTML event handlers on page 584 and Managing object pages on page 492 for more information about
onload functions.
Syntax
rbf_addOnLoadMethod(callback)
Parameters
callback
Example
The following example prints a message to the console when the page loads.
<script>
var onLoad = function () {
if(console){
console.log("Executing function on page load");
}
};
rbf_addOnLoadMethod(onLoad);
</script>
rbf_getCodeById()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Returns the integration code of a picklist item, status, or template with the given ID.
Syntax
rbf_getCodeById(objName, fieldName, id, callback)
Parameters
objName
fieldName
id
ID of picklist item
callback
The callback function that will receive code of picklist item as first parameter (null if not found).
rbf_getExchangeRate()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Returns an exchange rate between two currencies on a given date.
Syntax
rbf_getExchangeRate(srcCode, destCode, date, callback)
Parameters
srcCode
destCode
date
callback
The callback function that will receive exchange rate as first parameter (null if not found)
Example
rbf_getExchangeRate("EUR", "USD", null, function(rate) { alert("EUR/USD="+rate); });
rbf_getIdByCode()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Returns the ID of a picklist item, status, or template with the given code.
Syntax
rbf_getIdByCode(objName, fieldName, code, callback)
Parameters
objName
fieldName
code
callback
The callback function that will receive the ID of picklist item as first parameter (-1 if not found).
rbf_getIdByOriginalId()
Purpose
Given the original ID and an entity type, passes the entity's ID to the specified callback function. If an entity
of the specified type with the specified original ID does not exist, sets the HTTP status to 500 and executes
the error callback function configured using rbf_setErrorsCallback().
Note: If this function call results in an error, and you have not configured an error callback function using
rbf_setErrorsCallback(), you will still see the HTTP status of 500 but will not see the reason for the
error.
Syntax
rbf_getIdByOriginalId(entityType, originalId, callback);
Parameters
entityType
A string indicating the type of entity. Can be one of "object", "field", "relationship",
"webpage", "view", "template", "report", "chart", "gauge", "trigger", "process",
"status", "action", "button", or "datamap".
origId
callback
The callback function that will receive the ID of the entity as its first parameter.
Return value
If successful, passes the entity's ID to callback function and sets the HTTP status to 200. If unsuccessful,
sets the HTTP status to 500 and passes the error message to the configured error callback function (see
above).
Example
The following example retrieves the ID of the specified object definition and outputs it to the console. If there
is an error, the error callback function displays an alert with an error message:
<script>
In the above example, If there is no entity with the specified original ID, Rollbase displays the following alert:
rbf_getPicklist()
Purpose
Returns items available for selected picklist field (including radio buttons and groups of check box fields) as a
JSON array. Each array entry has the elements name, id, and code. For fields that allow values in multiple
languages, pass a JSON object specifying which language's values to return in the options parameter. If the
values are not available in the request language, it will return the values for the tenant's base language. If the
specified language is not configured for the tenant, it will throw an error.
Syntax
rbf_getPicklist(objName, fieldName, mainValueId, callback, options)
Parameters
objName
fieldName
mainValueId
The ID of the main picklist item (optional, for dependent picklists only).
callback
The callback function that will receive a JSON array of picklist items as its first parameter.
options
An optional JSON object that sets the values of optional arguments. Currently this is only used for
setting langCode to a valid two-letter ISO language code, for example, {"langCode":"es"}.
rbf_isChecked()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Returns true if a checkbox with a given integration name is checked; false otherwise.
Syntax
rbf_isChecked(fieldName)
Parameters
fieldName
rbf_isEmpty()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Returns true if argument is null or empty string.
Syntax
rbf_isEmpty(arg)
Parameters
arg
Example
rbf_isEmpty() -> true
rbf_isEmpty(-1.23) -> false
rbf_isEmpty(0) -> true
rbf_isEmpty('') -> true
rbf_isEmpty(false) -> true
rbf_isEmpty("A") -> false
rbf_isEmpty("0") -> false
rbf_isSelected()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Returns true if record with given id is selected (check box checked) in list view.
Syntax
rbf_isSelected(recordId)
Parameters
Parameter
Description
recordId
rbf_isZero()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function can be useful in validation scripts, it returns true if the argument is any of the following:
• null
• the number zero
• a value that cannot be converted into a number
Syntax
rbf_isZero(arg)
arg
Example
rbf_isZero() -> true
rbf_isZero(-1.23) -> false
rbf_isZero(0) -> true
rbf_isZero('') -> true
rbf_isZero(false) -> true
rbf_isZero("A") -> true
rbf_isZero("0") -> true
rbf_setChecked()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Sets the state of the checkbox field with the given integration name to checked (true) or unchecked (false).
It will invoke any existing onchange event handlers for that field.
Syntax
rbf_setChecked(fieldName, isChecked)
Parameters
fieldName
isChecked
true or false
rbf_setErrorsCallback()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Assign a callback function to be used when processing API errors, such as errors in SQL queries, etc. By
default the API uses the rbf_showInfoMessage() method to display error messages, but this behavior can
be customized.
Syntax
rbf_setErrorsCallback(callback)
Parameters
callback
The callback function, which will receive an error message as a first parameter and API name (which
caused the error) as second parameter
Example
var callback = function(errMsg, apiName) {
alert("ERROR: "+errMsg+" in: "+apiName);
};
rbf_setErrorsCallback(callback);
rbf_setLookupFilter()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function sets a filter on the selection of related records for a lookup field. This method only applies to
Selector type lookup fields and cannot be used for dependent lookups. This method can be used for dynamic
filtering of available lookup choices.
Syntax
rbf_setLookupFilter(fieldname, filterName, filterValue);
Parameters
fieldName
filterName
filterValue
Return Value
Example
The call in the following example ensures that the selector window opening on the R12345 lookup field only
displays records where the value of the club_menber field equals true.
rbf_setSelected()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Selects/deselects record with given ID in list view.
Syntax
rbf_setSelected(recordId, selected)
Parameters
Parameter
Description
recordId
selected
true or false
Example
var x = rbf_isSelected(recordId);
rbf_setSelected(recordId, !x);
rbf_startServerDebugging()
Purpose
Starts server-side debugging. This API is used for debugging purposes.
Syntax
rbf_startServerDebugging(callback)
Parameters
callback
The function that is executed when server debugging operation is started. This doesn't receive any
parameters.
Permissions
It is only available for Administrative users.
Example
rbf_startServerDebugging(function() {
alert("Start debugging server-side API"); });
rbf_stopServerDebugging()
Purpose
Stops server-side debugging process started by rbf_startServerDebugging() on page 1132. This API is used for
displaying the results of debugging.
Syntax
rbf_stopServerDebugging(callback)
Parameters
callback
The function that is executed when server debugging operation is completed. This receives a string
parameter that contains a summary of debug operations.
Note: Outputs from rbv_api.println() and similar functions are included and displayed as the
results of debugging.
Permissions
It is only available for Administrative users.
Example
rbf_startServerDebugging(function() {
alert("Start debugging server-side API"); });
Display Functions
The Rollbase JavaScript API functions in this section can be useful in customizing UI presentation of Rollbase
pages.
rbf_activatePageTab()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Activate page-level tab with given index (only for pages where tabs are enabled).
Syntax
rbf_activatePageTab(tabIndex)
Parameters
tabIndex
rbf_getFieldContext()
Purpose
For any field in an object record form on a new, edit, status change, or quick create page, this function returns
a FieldContext object for that field. The FieldContext object encapsulates state and behavior details for the
associated field. See FieldContext on page 1151 for more information about the FieldContext object and its
interface.
Note: This API and the FieldContext object are only available in the New UI.
Syntax
rbf_getFieldContext(fieldIntegrationName)
Parameters
fieldIntegrationName
Example
The following example obtains the FieldContext object for a field with the integration name "city".
rbf_getPageComponent()
Purpose
Charts, grids, and tabular reports are represented as PageComponent objects in the new UI. This function
returns a PageComponent object for a given component. The PageComponent object can then be used to
refresh an individual page component or to access its Kendo configuration object. See PageComponent on
page 1155 for more information about PageComponent and its interface.
Note: This API and the PageComponent object are only available in the New UI.
Syntax
rbf_getPageComponent(componentId)
Parameters
componentId
For charts and grids, the original ID of the section that contains the chart or grid (available in the
section's Properties menu). For reports, the original ID of the report (available in the System
Information section when viewing the report).
rbf_getPageContext()
Purpose
This function returns a PageContext object for the current page. The PageContext object encapsulates all state
and behavior of a page.. See PageContext on page 1156 for more information about the PageContext object and
its interface.
Note: This API and the PageContext object are only available in the New UI.
Syntax
rbf_getPageContext()
Parameters
None
Return value
The PageContext on page 1156 object for the current page.
Example
The following example sets a variable to the ID of the current page:
var pageId = rbf_getPageContext().getPageId();
rbf_getSectionIdByTitle()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function finds ID of section with given title or null if section not found. This ID can be used in
rbf_setSectionCollapse and rbf_showOrHideSection API.
Important: For multi-lingual customers sectionTitle parameter must use customer's base language, not user
selected language.
Syntax
rbf_getSectionIdByTitle(sectionTitle)
Parameters
sectionTitle
rbf_getViewSelector()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function returns the view ID used by a lookup field for both auto-complete and pop-up selectors.
Syntax
rbf_getViewSelector(fieldName)
Parameters
fieldName
rbf_growl()
Purpose
Displays a growl-type floating notification in the upper right side of the screen.
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Syntax
rbf_growl(title, message, type);
Parameters
title
message
type
rbf_growlError()
Purpose
Displays a growl-type floating notification in the upper right side of the screen. End-users have to close the
notification to dismiss it.
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Syntax
rbf_growlError(title, message);
Parameters
title
message
rbf_hideGrowl()
Purpose
Hides a notification if one is being displayed.
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Syntax
rbf_hideGrowl();
rbf_hideInfoMessage()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function hides the status message at the top of the page. This method implementation calls rbf_hideGrowl()
on page 1137.
Syntax
rbf_hideInfoMessage()
rbf_growlInfo()
Purpose
Displays a growl-type floating notification in the upper right side of the screen. The notification closes
automatically after approximately 3.5 seconds.
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Syntax
rbf_growlInfo(title, message);
Parameters
title
message
rbf_growlSuccess()
Purpose
Displays a growl-type floating success notification in the upper right side of the screen. The notification closes
automatically after approximately 3.5 seconds.
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Syntax
rbf_growlSuccess(title, message);
Parameters
title
message
Return Value
Example
rbf_growlSuccess(null,
"Revised currency exchange rate applied.");
rbf_growlWarning()
Purpose
Displays a growl-type floating notification in the upper right side of the screen. End-users have to close the
notification to dismiss it.
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Syntax
rbf_growlWarning(title, message);
Parameters
title
message
rbf_showInfoMessage()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Displays a status message on the top of the page, which will automatically disappear after 40 seconds. This
method implementation calls rbf_growlInfo() on page 1138
Syntax
rbf_showInfoMessage(message, isError)
Parameters
message
isError
Value of true if message represents an error (errors are shown in dark red text rather than black)
rbf_showMessage()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Displays a status message on the top of the page, which will automatically disappear after 40 seconds. This
method implementation calls rbf_growl() on page 1136.
Syntax
rbf_showMsg (message, type);
Parameters
message
type
Return Value
?
Example
Introduce example here.
?
rbf_showOrHideField()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function shows or hides a field and its label. It will have no effect if the field is not shown on the page. On
view pages, this API can be used in the page’s onLoad script; on edit pages, it can be used in any event
handling code.
Syntax
rbf_showOrHideField(fieldName, showField, doNotHideResponsiveColumn)
Parameters
fieldName
showField
If true, show the field and its label. If false, hide the field and its label.
doNotHideResponsiveColumn
Optional. If true, Rollbase hides only the value of the field, not the column itself. The column for
the hidden field maintains its position regardless of the screen size. If false, Rollbase hides both
the value of the field and its column. The value in the next column will take its position. Defaults to
false.
Examples
The following examples show the behavior resulting from different options for showOrHideField(). In these
examples, the view page is configured for four columns. The field to show or hide is Status (with the integration
name t_status):
• Result of showOrHideField("t_status", true):
• Result of showOrHideField("t_status", false, false). The other fields in the row shift left, while
the following rows remain the same:
• Result of showOrHideField("t_status", true) on a narrower screen, where the four columns have
collapsed to two columns:
• Result of showOrHideField("t_status", false, false) with two columns. The other field in the
row, Tags, shifts left, while the following rows remain the same:
rbf_showOrHidePageTab()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Show or hide page-level tab with given index (only for pages where tabs are enabled).
Syntax
rbf_showOrHidePageTab(tabIndex, showTab)
Parameters
tabIndex
showTab
rbf_showOrHideSection()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function hides or shows a Page's section. It will have no effect if the section does not exist.
The ID for any section can be found by selecting that section while editing the page in the Page Editor. Highlight
the Page section by clicking on its header and use the "Original ID" parameter shown in the Properties box.
You can also use rbf_getSectionIdByTitle() on page 1135.
Syntax
rbf_showOrHideSection(sectionId, showSection)
Parameters
sectionId
showSection
rbf_setSectionCollapse()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function collapses or expands the Page's section. It will have no effect if the section does not exist or is
non-collapsible.
Syntax
rbf_setSectionCollapse(sectionId, collapsed)
Parameters
sectionId
collapsed
rbf_setViewSelector()
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
This function sets the view ID used by a lookup field for both auto-complete and pop-up selectors.
Important: This function cannot be used on dependent lookups. This function only apply for "Selector" style
lookup fields.
Syntax
rbf_setViewSelector(fieldName, selectorViewId)
Parameters
fieldName
selectorViewId
ID of view to use
rbf_setSessionData()
Purpose
This function sets user session data as a key/value pair. This data is stored in the Rollbase session and can
be accessed using the function rbf_getSessionData() on page 1146 and removed using the function
rbf_removeSessionData() on page 1148. The maximum number of key/value pairs is 50. If you set a value for
an existing key, the new value overrides the previous value.
If this function raises an error, Rollbase sets the HTTP status to 500 and invokes the callback function provided
via rbf_setErrorsCallback() on page 1130 and passes that function one of the following messages:
• Empty Key Received — No input was passed
• Invalid Input — Input was in the wrong format
• Limit Violation. Max Allowed: 50 keys reached — User has already stored the maximum of
50 key/value pairs
Note: If this function call results in an error, and you have not configured a callback function using
rbf_setErrorsCallback(), you will still see the HTTP status of 500 but will not see the reason for the
error.
Syntax
rbf_setSessionData(key, value, callback);
Parameters
key
A string that is the lookup key for user session data. The maximum length of a key is 50 characters.
value
The value associated with key. The value can be a boolean, number, string (maximum length is 1000
characters), or null (where null is the value).
callback
A function that takes a single data value. This parameter is optional; if it is not passed, the status of
the function call will appear in the console but you will not be able to access the return value.
Return value
If successful, passes the string "Session Data set successfully" to callback and sets the HTTP
status to 200.
Example
The following example sets a key/value pair:
<script>
var callback = function(errMsg, apiName) {
alert("ERROR: "+errMsg+" in: "+apiName);
};
rbf_setErrorsCallback(callback);
var handleSessionData = function (response) {
if(console){
console.log("**** Processing handleSessionData ****");
console.log("Response is: ", response);
}
}
rbf_setSessionData("name1", "John", handleSessionData);
</script>
rbf_getSessionData()
Purpose
For custom user session data, this function returns the value for the specified key and passes it to the specified
callback function. See User session data on page 1144 for more information about custom user session data.
If this function raises an error, Rollbase sets the HTTP status to 500 and invokes the callback function provided
via rbf_setErrorsCallback() on page 1130 and passes that function one of the following messages:
• Empty key received! — No key parameter was passed
• No Mappings Set for [key] — There is no value associated with the specified key or there is no
custom session data to retrieve
Note: If this function call results in an error, and you have not configured a callback function using
rbf_setErrorsCallback(), you will still see the HTTP status of 500 but will not see the reason for the
error.
Syntax
rbf_getSessionData(key, callback);
Parameters
key
A string that is the lookup key for user session data. The maximum length of a key is 50 characters.
callback
A function that takes a single data value. This parameter is optional; if it is not passed, the status of
the function call will appear in the console but you will not be able to access the return value.
Return value
If successful, passes the value associated with that key (JavaScript primitive) to callback function and sets
the HTTP status to 200
Example
The following example retrieves the value for the specified key and outputs it to the console. If there is an error,
the callback function displays an alert with an error message:
<script>
var callback = function(errMsg, apiName) {
alert("ERROR: "+errMsg+" in: "+apiName);
};
rbf_setErrorsCallback(callback);
var handleSessionData = function (dataValue) {
if(console){
console.log("**** Processing handleSessionData ****");
console.log("Data Value is: ", dataValue);
}
}
rbf_getSessionData("name1", handleSessionData);
</script>
If the specified key does not exist, Rollbase displays the following alert:
rbf_getAllSessionData()
Purpose
For custom user session data, this function returns a hashmap of all key/value pairs for that user and passes
it to the specified callback function. See User session data on page 1144 for more information about custom user
session data.
If this function raises an error, Rollbase sets the HTTP status to 500 and invokes the callback function provided
via rbf_setErrorsCallback() on page 1130 and passes that function the following message:
• No Custom Session Data is Set by User — No custom session data exists for the user
Note: If this function call results in an error, and you have not configured a callback function using
rbf_setErrorsCallback(), you will still see the HTTP status of 500 but will not see the reason for the
error.
Syntax
rbf_getAllSessionData(callback);
Parameters
callback
A function that takes a single data value. This parameter is optional; if it is not passed, the status of
the function call will appear in the console but you will not be able to access the return value.
Return value
If successful, passes a hashmap of all existing key/value pairs to callback function and sets the HTTP status
to 200
Example
The following example retrieves a hashmap of all key/value pairs and outputs it to the console. If there is an
error, the callback function displays an alert with an error message:
<script>
var callback = function(errMsg, apiName) {
alert("ERROR: "+errMsg+" in: "+apiName);
};
rbf_setErrorsCallback(callback);
var handleSessionData = function (dataValue) {
if(console){
console.log("**** Processing handleSessionData ****");
console.log("Data Value is: ", dataValue);
}
}
rbf_getAllSessionData(handleSessionData);
</script>
rbf_removeSessionData()
Purpose
This function removes the user session data for the specified key.
If this function raises an error, Rollbase sets the HTTP status to 500 and invokes the callback function provided
via rbf_setErrorsCallback() on page 1130 and passes that function one of the following messages:
• Empty key received! — No key parameter was passed
• No Mappings Set for [key] — There is no value associated with the specified key
Note: If this function call results in an error, and you have not configured a callback function using
rbf_setErrorsCallback(), you will still see the HTTP status of 500 but will not see the reason for the
error.
Syntax
rbf_removeSessionData(key, callback);
Parameters
key
A string that is the key for a key/value pair of stored custom session data
callback
A function that takes a single data value. This parameter is optional; if it is not passed, the HTTP
status will appear in the console but no return value is passed.
Return value
If successful, sets the HTTP status to 200 and passes the string OK to callback as the first argument
Example
The following example removes the custom user session data associated with the key "name1":
<script>
var callback = function(errMsg, apiName) {
alert("ERROR: "+errMsg+" in: "+apiName);
};
rbf_setErrorsCallback(callback);
var handleSessionData = function (returnValue) {
if(console){
console.log("**** Processing handleSessionData ****");
console.log("Response is " +returnValue);
}
}
rbf_removeSessionData("name1", handleSessionData);
</script>
rbf_removeAllSessionData()
Purpose
This function removes all session data for the user.
If this function raises an error, Rollbase sets the HTTP status to 500 and invokes the callback function provided
via rbf_setErrorsCallback() on page 1130 and passes that function the following message:
• No Custom Session Data is Set by User — No session data exists for the user
Note: If this function call results in an error, and you have not configured a callback function using
rbf_setErrorsCallback(), you will still see the HTTP status of 500 but will not see the reason for the
error.
Syntax
rbf_removeAllSessionData(callback);
Parameters
callback
A function that takes a single data value. This parameter is optional; if it is not passed, the status of
the function call will appear in the console but you will not be able to access the return value.
Return value
Sets the HTTP status to 200 and passes the string OK to callback as the first argument.
Example
The following example removes all session data for the user:
<script>
var callback = function(errMsg, apiName) {
alert("ERROR: "+errMsg+" in: "+apiName);
};
rbf_setErrorsCallback(callback);
var handleSessionData = function (returnValue) {
if(console){
console.log("**** Processing handleSessionData ****");
console.log("Response is " +returnValue);
}
}
rbf_removeAllSessionData(handleSessionData);
</script>
Client-side JavaScript
The client-side JavaScript API includes functions, objects with interfaces, properties, and events. You can use
the JavaScript API anywhere you can create a client-side script, for example, in a script component on a page
or in a custom header. See Adding business logic on page 349 for information about where you can use
client-side scripts. See Programmatic client-side customization on page 580 for examples of script components.
Note: The methods in this section apply to the new UI, not the classic UI. Most Rollbase tenants are using
the new UI. However, tenants on older Private Cloud installations might still be using the classic UI.
Debugging scripts
You can use the debugger statement to set a breakpoint in a script. This causes execution to pause. The
following example sets a breakpoint in a script:
<script id="executeBeforeUIStarts">
try {
if ( window.rb !== undefined && window.rb.newui !== undefined ) {
console.log("*** Executing Custom Sidebar for New UI");
debugger; // set breakpoint
rb.newui.options.filters.showAdvancedFilterTypes = false;
}
}
catch (e) {alert ('Error in custom sidebar code' + e);
}
</script>
Objects
Rollbase uses JavaScript objects to represent certain aspects of the user interface and environment in which
it is running. Each object described in this section can be accessed via a client-side AJAX API as indicated.
You can use these objects in client-side scripts.
Note: The methods in this section apply to the new UI, not the classic UI. Most Rollbase tenants are using
the new UI. However, tenants on older Private Cloud installations might still be using the classic UI.
FieldContext
Purpose
For any field in an object record form on a new, edit, status change, or quick create page, a FieldContext
object encapsulates state and behavior details for the associated field. The FieldContext object is only
available in the New UI. You can access a FieldContext object using the client-side function
rbf_getFieldContext() on page 1134.
Note: The methods in this section apply to the new UI, not the classic UI. Most Rollbase tenants are using
the new UI. However, tenants on older Private Cloud installations might still be using the classic UI.
Interface
The following functions return information about the state of the field:
• getNode() — Returns a jQuery object for the HTML control (input, select, textarea, etc.)
• getKendoConfig() — Returns the Kendo configuration object for the field (if the field is a Kendo control).
Progress recommends using this function to access the Kendo configuration object for a field. It is faster
and easier than using other methods, and it uses wrappers provided by Rollbase instead of working directly
with the page DOM.
• getFieldType() — Returns a string identifier for the field type, for example,'IntInput' for Integer
fields
• getFormNode() — Returns a jQuery node reference for the form element in t\he page DOM
• getContainer() — Returns a jQuery object for the root container element that holds the field control
and its related DOM elements
The following functions return information about and allow you to specify the field's behavior:
• validate() — Runs client-side validation against the field
• enable(isEnabled) — Toggles whether the field is enabled or disabled.
• show() — Shows the field
• hide() — Hides the field
• focus() — Gives focus to the field
• isRequiredField() — Returns true if the field is marked as a required form field, otherwise returns
false.
• getValue() — Returns the field's current value
• setValue(value) — Sets the field's value to value
• addOnChangeHandler(handlerFunc) — Adds the change handler function handlerFunc to the field
• getInitialValue() — Returns the initial value of the form field when the form page was rendered
• hasValueChanged() — Returns true if the field value was modified on the form page
• getPicklistCode() — Returns the integration code of the selected option for a picklist, multi-picklist,
checkbox group, or radio buttons. When multiple options are selected, returns an array of integration codes.
GridControl
Purpose
GridControl is a client-side JavaScript object that represents a grid control on an application page.
Note: The GridControl component and its interface are only available for the revised grid control introduced
in Rollbase 4.3. You can enable/disable the revised grid control on the Preferences setup page.
Interface
The GridControl component has the following public interface:
• addEventListener(eventType,handler) — Registers an event listener for the given event type
• addGridRow() — Adds a new grid row to the GridControl
Example
The following example returns the original ID of the first grid control on the page.
<script>
rbf_getGridControlComponent(0).getOriginalId();
</script>
GridFieldContext
Purpose
For any field in a grid control, a GridFieldContext object encapsulates state and behavior details for the
associated field. The GridFieldContext object is only available in the New UI. You can access a
GridFieldContext object using the client-side function rbf_getGridFieldContext() on page 1105. The interface
of GridFieldContext includes all functions defined for FieldContext on page 1151. See rbf_getGridFieldContext()
on page 1105 for an example of accessing a GridFieldContext and executing one of its functions.
Interface
The following functions return information about the state of the field:
• isGridControlField() — Returns true if the associated field is in a grid control. Otherwise returns
false.
• getGridRow() — Returns the GridRow on page 1154 object for the associated field.
• getGridFieldData() — Returns a JSON object representing the value of the associated field.
• getGridComponent() — Returns the GridControl on page 1152 object to which this field belongs.
GridRow
Purpose
GridRow is a client-side JavaScript object that represents a row in a grid control on an application page.
Note: The GridRow component and its interface are only available for the revised grid control introduced in
Rollbase 4.3. You can enable/disable the revised grid control on the Preferences setup page.
Access a GridRow from a GridControl by calling the method getGridRow(rowIndex), where rowIndex
is the number of the row (the first row has the rowIndex of 0). See GridControl on page 1152 for more information.
Interface
The GridRow component has the following public interface:
• getData() — Returns GridRow data in serialized JSON format
• getField(fieldName) — Returns the FieldContext object for the specified field in the row where the
field is identified by its integration name.. See FieldContext on page 1151 for more information.
• getFieldCell(fieldName) — Returns a jQuery object of the field container element where the field is
identified by its integration name.
• getFieldData(fieldName) — Returns field data in serialized JSON format where the field is identified
by its integration name.
• getIndex() — Returns the row Index of this GridRow
• getRecordId() — Returns the GridRow record's record ID. The value is -1 for new GridRow records.
Example
The following example returns the value of the field with the integration name "name" for the first row of the
first grid on the page .
<script>
rbf_getGridControlComponent(0).getGridRow(0).getFieldData("name");
</script>
PageComponent
Purpose
PageComponent is a client-side JavaScript object that represents a component on an application page. Charts,
grids, and tabular reports are all represented as PageComponent objects in the new UI. You can use a
PageComponent object's interface to refresh an individual PageComponent or to access its Kendo configuration
object. Use the client-side function rbf_getPageComponent() on page 1134 to access a specific PageComponent.
Note: The methods in this section apply to the new UI, not the classic UI. Most Rollbase tenants are using
the new UI. However, tenants on older Private Cloud installations might still be using the classic UI.
Interface
You can refresh an individual PageComponent without refreshing its entire page. Use the following methods
to refresh a PageComponent:
• refresh() — Refreshes an individual page component on an application page. For a report, refreshes
both the chart and the grid rendered as part of the report.
• refreshChart() — For a report, refreshes only the chart rendered as part of the report
• refreshGrid() — For a report, refreshes only the grid rendered as part of the report
You can access the Kendo configuration object for a grid or a report using the following method:
• getKendoConfig() — For a grid, returns the Kendo configuration object for the grid. For a report, returns
the Kendo configuration object for the grid rendered as part of the report
Example
The following example refreshes a chart component and a grid component every six seconds. You would add
this script to an HTML or script component in the page editor.
<script>
PageContext
Purpose
A PageContext object encapsulates all state and behavior of a page. This is the root level context object from
which you can access other top level objects such as PageLocalization. The PageContext object is only
available in the New UI. You can access a PageContext object using the client-side function
rbf_getPageContext() on page 1135.
Interface
The following functions return information about the state of the page or return components on the page:
• getPageType() — Returns an integer identifier for the current page. All page identifiers are defined as
properties of rb.newui.PAGE_TYPES. This API can be leveraged to have custom behavior specific to a
given page, for example, to differentiate between a new and edit page to set a default value for a field in
new pages.
Page types are defined as follows:
rb.newui.PAGE_TYPES = {
GENERIC : 0,
VIEW : 1,
EDIT : 2,
NEW : 3,
SEARCH : 4,
SEARCH_RESULTS : 5,
STATUS : 6,
SELECTOR : 7,
EMAIL_SELECTOR : 8,// Used as substitution to TYPE_SELECTOR
TREE_SELECTOR : 9,
IMPORT : 10,
TEMPLATES : 12,
REP_LIST : 13,
REPORT : 14,
LOGIN : 16,
MASS_UPDATE : 17,
NEW_QUICK : 18,
CUSTOM_PAGE : 19,
WEB_LINK : 20,
QUESTIONS : 21,
LIST : 22,// List of records
SURVEY : 23,// Take survey
EMBED_QC : 24,
R_BIN_VIEW : 25
};
• getSection(sectionId) — Returns the Section object for the page section identified by sectionID,
which is the original ID of the section
• getFormDetails(formName) — Returns the FormContext object identified by the formName, where
formName is one of:
• rb.newui.util.EDIT_FORM_NAME — The form name for a record form
• rb.newui.util.INLINE_FORM_NAME — The form name for an inline edit form
This is currently only available for record forms and inline edit forms.
PageLocalization
Purpose
A PageLocalization object encapsulates the settings on a user's My Localization Settings page. The
PageLocalization object is only available in the New UI. You can access a PageLocalization object
using the PageContext function getPageLocalization(). See PageContext on page 1156 for details.
Interface
Unless indicated otherwise, all of the following methods return the format specified in the user's localization
settings.
• getDateFormat() — Returns a string representing the date format pattern, for example, "MM/dd/yyyy"
• getDateTimeFormat() — Returns a string representing the date/time format pattern, for example, "MMM
d, yyyy, h:mm tt"
• getLongDateFormat() — Returns a string representing the long date format pattern, for example, "dddd,
MMMM d, yyyy"
• getLongDateTimeFormat() — Returns a string representing the long date/time format pattern, for
example, "dddd, MMMM d, yyyy 'at' h:mm tt"
• getTimeFormat() — Returns a string representing the time format pattern, for example, "h:mm tt"
• getDateEditFormat() — Returns a string representing the date format pattern used on form pages
(new, edit, quick create, status change) when showing Date field values in input widgets. This format is not
in the user's localization settings and depends on the locale.
• getDateTimeEditFormat() — Returns a string representing the date/time format pattern used on form
pages (new, edit, quick create, status change) when showing DateTime field values in input widgets. This
format is not in the user's localization settings and depends on the locale.
PageToolbar
Purpose
PageToolbar is a client-side JavaScript object that represents the page toolbar on an application page. A
page toolbar contains buttons. Use the PageContext on page 1156 function getPageToolbar() to access the
PageToolbar object.
Note: The methods in this section apply to the new UI, not the classic UI. Most Rollbase tenants are using
the new UI. However, tenants on older Private Cloud installations might still be using the classic UI.
Interface
PageToolbar supports the following functions:
• getItemByName(itemName) — Returns a jQuery object representing the button with the specified name
• getItemsByClassName(className) — Returns a set of jQuery objects representing all buttons in the
page toolbar with the CSS class identifier as specified by the argument className. Currently, all page
toolbar buttons have CSS class identifier "marker-pageToolbar-action".
• getKendoConfig() — Returns the Kendo Toolbar configuration object for the page toolbar
• getNode() — Returns a jQuery object representing the page toolbar
• showOrHideItem(itemName, show) — Shows or hides the button with the specified name. If the show
parameter is true, shows the button. If the show parameter is false, hides the button.
Examples
The following example returns a set of jQuery objects for all of the buttons in the page toolbar:
rbf_getPageContext().getPageToolbar().getItemsByClassName("marker-pageToolbar-action");
The following example hides the button with the specified name:
rbf_getPageContext().getPageToolbar().showOrHideItem("Button_1", false);
Functions
The functions described in this section can be run in client-side scripts.
Note: The methods in this section apply to the new UI, not the classic UI. Most Rollbase tenants are using
the new UI. However, tenants on older Private Cloud installations might still be using the classic UI.
addEventListener()
Purpose
Adds an event listener for a custom event. You can use this function to listen for Rollbase custom events. See
Custom events on page 1169 for a description of custom events in Rollbase.
Note: If your applications contain any script components that execute on the document.ready event, they
will no longer behave in the same way because document ready events can get delivered before components
are rendered on the page. Instead, you should replace the document.ready event with a call to
addEventListener() on the rbs_pageRender custom event as shown below.
Syntax
rb.newui.util.addEventListener(event, handler);
Parameters
event
handler
Return value
None
Example
The following example creates a listener for the rbs_pageRender custom event.
Note: This method applies to the new UI, not the classic UI. Most Rollbase tenants are using the new UI.
However, tenants on older Private Cloud installations might still be using the classic UI.
<script>
try {
if (!rbf_isNewUI()) {
throw 'This Script is written specific to New UI Context';
}
rb.newui.util.addEventListener(rb.newui.util.customEvents.rbs_pageRender, onPageRender);
}
catch (err) {
if (console) {
console.log(err);
}
}
</script>
isMobile()
Purpose
Detects whether Rollbase is running on a mobile device (tablet or smart phone).
Note: This method applies to the new UI, not the classic UI. Most Rollbase tenants are using the new UI.
However, tenants on older Private Cloud installations might still be using the classic UI.
Syntax
rb.newui.util.isMobile()
Parameters
None
Return value
Returns true if the device is mobile. Otherwise returns false.
isTablet()
Purpose
Detects whether Rollbase is running on a tablet.
Note: This method applies to the new UI, not the classic UI. Most Rollbase tenants are using the new UI.
However, tenants on older Private Cloud installations might still be using the classic UI.
Syntax
rb.newui.util.isTablet()
Parameters
None
Return value
Returns true if the device is a tablet. Otherwise returns false.
isSmartPhone()
Purpose
Detects whether Rollbase is running on a smart phone.
Note: This method applies to the new UI, not the classic UI. Most Rollbase tenants are using the new UI.
However, tenants on older Private Cloud installations might still be using the classic UI.
Syntax
rb.newui.util.isSmartPhone()
Parameters
None
Return value
Returns true if the device is a smart phone. Otherwise returns false.
removeFieldLabel()
Purpose
Removes the specified field label from the current View or Edit page. This is useful for cases where the field
label takes up extra space and/or is not necessary, such as when displaying an image.
Note: This method applies to the new UI, not the classic UI. Most Rollbase tenants are using the new UI.
However, tenants on older Private Cloud installations might still be using the classic UI.
Syntax
rb.newui.util.removeFieldLabel(fieldName)
Parameters
fieldName
Return value
None
Example
The following example removes the field label "photo" from the current View or Edit page.
rb.newui.util.removeFieldLabel("photo");
Properties
The properties described in this section allow you to set certain user interface behaviors. Some of these
properties must be set in a custom sidebar script that executes before the user interface starts. See Executing
a script before the UI starts for details.
Note: The properties in this section apply to the new UI, not the classic UI. Most Rollbase tenants are using
the new UI. However, tenants on older Private Cloud installations might still be using the classic UI.
Purpose
This property allows you to specify whether Rollbase uses page navigation using AJAX requests. Setting it to
false disables page navigation using AJAX requests. Setting it to true enables page navigation using AJAX
requests. This property applies to all of the actions listed below.
Note: This property applies to the new UI, not the classic UI. Most Rollbase tenants are using the new UI.
However, tenants on older Private Cloud installations might still be using the classic UI.
You must set this property's value in a custom sidebar script that executes before the UI starts. See Executing
a script before the UI starts for details.
Rollbase performs AJAX requests instead of full page reloads for the following actions:
• When navigating top level tabs on the application menu bar
• When viewing a record (from a record list page to a record view page)
• When navigating back to the record list view from a record view page
• When viewing the next and previous record from a record view page
• When editing a record (Clicking Edit on a record view page). Note: Save is a full page reload.
Example
The following example disables page navigation using AJAX requests for an application:
<script id="executeBeforeUIStarts">
if(rbf_isNewUI()){
rb.newui.options.applicationPage.ajaxNavigation = false;
}
</script>
Purpose
This property allows you to specify whether Rollbase uses AJAX requests to navigate between top-level tabs.
Setting it to false disables navigation between top-level tabs using AJAX requests. Setting it to true enables
navigation between top-level tabs using AJAX requests.
Note: This property applies to the new UI, not the classic UI. Most Rollbase tenants are using the new UI.
However, tenants on older Private Cloud installations might still be using the classic UI.
You must set this property's value in a custom sidebar script that executes before the UI starts. See Executing
a script before the UI starts for details.
Example
The following example disables navigation between top-level tabs using AJAX requests for an application:
<script id="executeBeforeUIStarts">
if(rbf_isNewUI()){
rb.newui.options.tabMenuLink.ajaxNavigation = false;
}
</script>
showAdvancedFilterTypes
Purpose
This property allows you to specify whether to show or hide the advanced filter options component in the filter
interface. Setting it to true shows the component.
Note: This property applies to the new UI, not the classic UI. Most Rollbase tenants are using the new UI.
However, tenants on older Private Cloud installations might still be using the classic UI.
Setting it to false hides the component. The screen below shows the advanced filter option component and
the Boolean operator component in the filter interface:
When used in conjunction with showBooleanOperators on page 1164, and both are set to false, the entire row
in which they appear is hidden, saving vertical space on the screen:
Note: You must set this property's value in a custom sidebar script that executes before the UI starts. See
Executing a script before the UI starts for details.
Example
The following code hides the advanced filter options component.
<script id="executeBeforeUIStarts">
rb.newui.options.filters.showAdvancedFilterTypes = false;
</script>
showBooleanOperators
Purpose
This property allows you to specify whether to show or hide the Boolean operator component in the filter
interface. Setting it to true shows the component.
Note: This property applies to the new UI, not the classic UI. Most Rollbase tenants are using the new UI.
However, tenants on older Private Cloud installations might still be using the classic UI.
Setting it to false hides the component. The screen below shows the Boolean operator component and the
advanced filter option component in the filter interface:
When used in conjunction with showAdvancedFilterTypes on page 1163, and both are set to false, the entire
row in which they appear is hidden, saving vertical space on the screen:
Note: You must set this property's value in a custom sidebar script that executes before the UI starts. See
Executing a script before the UI starts for details.
Example
The following code hides the Boolean operator component.
<script id="executeBeforeUIStarts">
rb.newui.options.filters.showBooleanOperators = false;
</script>
leftRightSectionPairStartsNewRow
Purpose
For generic pages with two columns, this property allows you to specify whether the sections in the left and
right columns align with each other. If set to true, each left/right pair of sections will align at the top. If set to
false (the default), sections in each column take up the available space after the sections above them. The
example below illustrates how this works on a generic page with two columns and four sections.
Note: This property applies to the new UI, not the classic UI. Most Rollbase tenants are using the new UI.
However, tenants on older Private Cloud installations might still be using the classic UI.
With this property set to true, the sections Report Left and Report Right are aligned at the top:
With this property set to true, the sections Report Left and Report Right maintain their alignment when the
Title Chart Right section is collapsed:
With this property set to false, the sections Report Left and Report Right are positioned with respect to the
chart sections in their columns:
With this property set to false, collapsing the Title Chart Right section causes the Report Right section to
move into the available space:
Example
The following code sets this property to true. This results in the behavior illustrated in the first two screens
above.
<script>
rb.newui.options.genericPage.leftRightSectionPairStartsNewRow = true;
</script>
onLeavingDirtyPage
Purpose
This property controls whether Rollbase opens a notification when a user tries to navigate away from a form
page (new, edit) which has unsaved changes. The notification gives the user a chance to save the changes.
This property has the value true by default. To disable the notifications, set its value to false. You can set
the value of this property in any script component. This property is only available when using the New UI.
Example
The following example disables notifications when a user navigates away from a page with unsaved changes:
<script>
try {
}
catch (e)
{alert ('Error in custom sidebar code' + e);
}
</script>
recordNavigationAjax
Purpose
This property allows you to specify whether Rollbase uses AJAX requests to navigate between object records
(previous and next). Setting it to false disables navigation between object records using AJAX requests.
Setting it to true enables navigation between object records using AJAX requests.
Note: This property applies to the new UI, not the classic UI. Most Rollbase tenants are using the new UI.
However, tenants on older Private Cloud installations might still be using the classic UI.
You must set this property's value in a custom sidebar script that executes before the UI starts. See Executing
a script before the UI starts for details.
Example
The following example disables navigation between object records using AJAX requests for an application:
<script id="executeBeforeUIStarts">
if(rbf_isNewUI()){
rb.newui.options.objectViewPage.recordNavigationAjax = false;
}
</script>
useResponsiveImage
Purpose
Note: This property is deprecated in Rollbase version 4.2. Responsive images are now enabled by default,
and you can control whether an image is responsive by selecting or deselecting the Responsive field for that
image in the page editor.
This property specifies whether image fields are responsive to different screen sizes. When true (the default),
image fields are responsive. When false, image fields are not responsive. When image fields are responsive,
Rollbase ignores image width and height properties for the field in the page editor.
Note: You must set this property's value in a custom sidebar script that executes before the UI starts. See
Executing a script before the UI starts for details.
Example
The following script turns off responsive images:
<script id="executeBeforeUIStarts">
if(rbf_isNewUI()){
rb.newui.options.useResponsiveImage = false;
}
</script>
Custom events
The events described below are jQuery custom events. You can handle these events in JavaScript to customize
an application that uses the new UI. Progress recommends using the function addEventListener() on page 1159
to handle custom events. See http://www.w3schools.com/jquery/jquery_events.asp for more information about
jQuery events.
Rollbase supports the following custom events:
Note: With AJAX navigation enabled, use a call to addEventListener() for this event instead of
document.ready. See addEventListener() on page 1159 for an example.
See HTML and Script components on page 351 for more information about script components.
• rb.newui.util.customEvents.rbs_recordsSelected — Raised when records are selected from
a record list view
• rb.newui.util.customEvents.rbs_recordSelectionCleared — Raised when selected records
in a record list view are cleared
• rb.newui.util.customEvents.rbs_sectionCollapsed — Raised when an expanded page section
is collapsed, after the collapse is complete
• rb.newui.util.customEvents.rbs_sectionExpanded — Raised when a collapsed page section
is expanded, after the expansion is complete
• rb.newui.util.customEvents.rbs_uiResized — Raised when the layout manager has finished
resizing the screen. You can use a handler for this event to perform post-sizing operations.
• rb.newui.util.customEvents.rbs_tabActivated — Raised when a page tab is activated and is
fully visible on the page
• rb.newui.util.customEvents.rbs_viewSelectorChange — Raised when a user selects a different
view on a record list page
• rb.newui.util.customEvents.rbs_sessionExtended — Raised when a user extends a session
from the notification that session is about to expire
• rb.newui.util.customEvents.rbs_notificationDisplayed — This event is for post processing
after a Growl message is displayed. The following parameters are passed in the data parameter as an
object:
Code Generator
To access Rollbase APIs from external computer systems, customers often need to write computer code that
uses Object names, Field names, and some other customer-specific parameters. Writing such code can be a
tedious and error-prone task, since it might require many copy-and-paste operations.
To simplify this task, Rollbase provides a Code Generator, available from the Administration Setup page.
The Code Generator parses and fetches a text template that uses the metadata tokens described below.
{!#CURR_CUSTM.id} Customer ID
{!#CLASS_NAME} Class name (free text input from the Code Generator
page)
Application Node
Element Name XML Element Type Data Type Description
ApplicationProps Node
The following elements exist in the ApplicationProps element, a child of the Application node.
DataObjectDef Node
The following table describes the DataObjectDef XML node.
ObjectProps Node
The elements in the following table are children of the ObjectProps node.
<PluralName>Bs</PluralName>
<DataFieldDefs>
<DataFieldDef id="19869" origId="19869" objName="b" fieldName="sumbur"
dataName="FieldDummy"
uiClass="FormulaField" isRequired="no" isReadOnly="yes" isTextIndexable="no"
isSystem="no"
isAuditable="no" maxLength="0">
<DisplayLabel>Sumbur</DisplayLabel>
<Props>
<returnType>1</returnType>
<decimalPlaces>0</decimalPlaces>
<hideLabel>false</hideLabel>
<formatIndex>0</formatIndex>
<formulaB64>eyFpZH0rMg==</formulaB64>
</Props>
</DataFieldDef>
<!-— More fields here -->
</DataFieldDefs>
<RelationshipDefs>
<RelationshipDef id="19891" origId="19891" relName="R19877" objDef1="b" objDef2="a1"
singularName1="B" pluralName1="Bs" singularName2="A" pluralName2="As" isMultiple1="yes"
DataFieldDef Node
FieldProps Node
The following table describes elements of a FieldProps node:
ListItem Node
RelationshipDef Node
The following table describes the child elements of a RelationshipDef node:
</RelationshipDef>
createApplicationDef()
Purpose
Creates a new application definition and its components from an XML document. This method will create any
objects described in the document, create their corresponding tabs and menus, and attach both objects and
menus to the newly created application.
See Application XML Elements on page 1173 for a description of the Application XML node and an example
of its use.
Syntax
createApplicationDef(string sessionId, string xmlString);
Parameters
sessionId
XMLString
A string containing an XML application node description that includes any objects to be created.
Output
Status text:
Permissions Required
All metadata methods require administrative privileges, regardless of the view, edit, create and delete permissions
set on the application or object. Establish the session by logging in with credentials for an administrative user.
Example
The following example passes in the XML required to create an application.
createObjectDef()
Purpose
Creates a new object definition and its components from an XML document.
See Object XML Definition on page 1176 for a description of the DataObjectDef XML node and an example
of its use.
Syntax
createObjectDef(string sessionId, string xmlString)
Parameters
sessionId
xmlString
An XML string describing the object in an DataObjectDef node, along with fields and relationships.
Output
Status text: Object ABC has been created
Permissions Required
All metadata methods require administrative privileges, regardless of the view, edit, create and delete permissions
set on the application or object. Establish the session by logging in with credentials for an administrative user.
Example
This example shows how to call createObjectDef():
createFieldDef()
Purpose
Creates a new field definition from an XML document.
See Field XML Definition on page 1180 for a description of the DataFieldDef XML node and an example of
its use.
Syntax
createFieldDef(string sessionId, string xmlString)
Parameters
sessionId
xmlString
Output
Status text: Field ABC has been created
Permissions Required
All metadata methods require administrative privileges, regardless of the view, edit, create and delete permissions
set on the application or object. Establish the session by logging in with credentials for an administrative user.
Example
This example shows how to call createFieldDef():
createRelationshipDef()
Purpose
Creates a new relationship definition from an XML document.
See Relationship XML Definition on page 1187 for a description of the RelationshipDef XML node and an
example of its use.
Syntax
createRelationshipDef(string sessionId, string xmlString);
Parameters
sessionId
xmlString
Output
Status text: Relationship R123456 has been created
Permissions Required
All metadata methods require administrative privileges, regardless of the view, edit, create and delete permissions
set on the application or object. Establish the session by logging in with credentials for an administrative user.
Example
The following example creates a relationship definition:
deleteApplicationDef()
Purpose
Permanently deletes an existing application and its components, including objects that are only assigned to
this application and all corresponding records.
See Application XML Elements on page 1173 for a description of the Application XML node and an example
of its use.
Syntax
Parameters
sessionId
appId
Output
Status text:
Permissions Required
All metadata methods require administrative privileges, regardless of the view, edit, create and delete permissions
set on the application or object. Establish the session by logging in with credentials for an administrative user.
Example
The following example deletes an application.
String infoMessage =
binding.deleteApplicationDef("7ae747a0e36648ef8bd016eec1502779@46216462", "7678");
deleteFieldDef()
Purpose
Permanently deletes an existing field definition from the specified object, along with any existing values for that
field.
See Field XML Definition on page 1180 for a description of the DataFieldDef XML node and an example of
its use.
Syntax
deleteFieldDef(string sessionId, string objDefName, string fieldName);
Parameters
sessionId
objDefName
String containing the integration name for the object containing the field
fieldName
String containing the integration name for the field definition to delete
Output
Status text: Field ABC has been deleted
Permissions Required
All metadata methods require administrative privileges, regardless of the view, edit, create and delete permissions
set on the application or object. Establish the session by logging in with credentials for an administrative user.
Example
The following example deletes the firstName field from lead objects:
deleteObjectDef()
Purpose
Permanently deletes an existing object definition, its components, and its records.
See Object XML Definition on page 1176 for a description of the DataObjectDef XML node and an example
of its use.
Syntax
deleteObjectDef(string sessionId, string objDefName);
Parameters
sessionId
objDefName
String containing the integration name for the object definition to delete
Output
Status text: Object ABC has been deleted
Permissions Required
All metadata methods require administrative privileges, regardless of the view, edit, create and delete permissions
set on the application or object. Establish the session by logging in with credentials for an administrative user.
Example
The following example deletes the definition of a lead object, its records, and components.
String infoMessage = binding.deleteObjectDef(sessionId, "lead");
deleteRelationshipDef()
Purpose
Permanently deletes an existing relationship definition.
See Field XML Definition on page 1180 for a description of the RelationshipDef XML node and an example
of its use.
Syntax
deleteObjectDef(string sessionId, string relName);
Parameters
sessionId
relName
String containing the integration name for the relationship definition to delete
Output
Status text: Field R123456 has been deleted
Permissions Required
All metadata methods require administrative privileges, regardless of the view, edit, create and delete permissions
set on the application or object. Establish the session by logging in with credentials for an administrative user.
Example
The following example deletes a relationship definition:
getApplicationDef()
Purpose
Retrieves a full description of a Rollbase application definition as an XML document. The XML schema for this
document can be found at: https://www.rollbase.com/webapi/wsdl/metadata.xsd
See Application XML Elements on page 1173 for a description of the Application XML node and an example
of its use.
Syntax
getApplicationDef(string sessionId, string appId);
Parameters
sessionId
appId
Output
XML document with the application definition in an Application node.
Permissions Required
All metadata methods require administrative privileges, regardless of the view, edit, create and delete permissions
set on the application or object. Establish the session by logging in with credentials for an administrative user.
Example
The following example retrieves an XML description of an application.
String xmlData =
binding.getApplicationDef("7ae747a0e36648ef8bd016eec1502779@46216462","7567");
getFieldDef()
Purpose
Retrieves a description of a field definition as an XML document in a sub-node of the DataObjectDef node.
See Field XML Definition on page 1180 for a description of the DataFieldDef XML node and an example of
its use.
Syntax
Parameters
sessionId
objDefName
String containing the integration name of the object definition that contains the field
fieldDefName
Output
An XML document with the field definition in a DataFieldDef node.
Permissions Required
All metadata methods require administrative privileges, regardless of the view, edit, create and delete permissions
set on the application or object. Establish the session by logging in with credentials for an administrative user.
Example
The following example retrieves the field definition of firstName:
getObjectDef()
Purpose
Retrieves a full description of an object definition as an XML document. The XML schema for this document
can be found at: https://www.rollbase.com/webapi/wsdl/metadata.xsd
See Object XML Definition on page 1176 for a description of the DataObjectDef XML node and an example
of its use.
Syntax
getObjectDef(string sessionId, string objDefName);
Parameters
sessionId
objDefName
String containing the integration name for the object definition to retrieve
Output
An XML document containing the object definition description in a DataObjectDef node.
Permissions Required
All metadata methods require administrative privileges, regardless of the view, edit, create and delete permissions
set on the application or object. Establish the session by logging in with credentials for an administrative user.
Example
The following example retrieves the definition of a lead object.
String xmlData = binding.getObjectDef(sessionId, "lead");
getObjectDefNames()
Purpose
Retrieves an array of object definition integration names.
Syntax
getObjectDefNames(string sessionId);
Parameters
sessionId
Output
Array of object definition integration names
Example
StringArr arr = binding.getObjectDefNames(sessionId);
getRelationshipDef()
Purpose
Retrieves a description of a relationship definition as an XML document in a sub-node of the DataObjectDef
node.
See Relationship XML Definition on page 1187 for a description of the RelationshipDef XML node and an
example of its use.
Syntax
Parameters
sessionId
relName
Output
An XML document with the relationship definition in a RelationshipDef node.
Permissions Required
All metadata methods require administrative privileges, regardless of the view, edit, create and delete permissions
set on the application or object. Establish the session by logging in with credentials for an administrative user.
Example
The following example retrieves a relationship definition:
metadataSearch()
Purpose
Searches for a string in metadata and returns results in XML format.
Syntax
metadataSearch(string sessionId, String query);
Parameters
sessionId
query
Output
An XML document with nodes for each metadata entity found for the search string.
Permissions Required
All metadata methods require administrative privileges, regardless of the view, edit, create and delete permissions
set on the application or object. Establish the session by logging in with credentials for an administrative user.
Example
String xmlResults = binding. metadataSearch(sessionId, "test");
updateApplicationDef()
Purpose
Updates an existing application definition and its components from an XML document. The XML document
must include a valid original ID attribute of the root XML node.
See Application XML Elements on page 1173 for a description of the Application XML node and an example
of its use.
Syntax
Parameters
sessionId
xmlString
XML description of the application in an Application node, including the objects to be updated
Output
Status text:
Permissions Required
All metadata methods require administrative privileges, regardless of the view, edit, create and delete permissions
set on the application or object. Establish the session by logging in with credentials for an administrative user.
Example
The following example shows how to invoke updateApplicationDef.
updateFieldDef()
Purpose
Updates an existing field definition from an XML document.
See Field XML Definition on page 1180 for a description of the DataFieldDef XML node and an example of
its use.
Syntax
updateFieldDef(string sessionId, string xmlString);
Parameters
sessionId
xmlString
Output
Status text: Field ABC has been updated
Permissions Required
All metadata methods require administrative privileges, regardless of the view, edit, create and delete permissions
set on the application or object. Establish the session by logging in with credentials for an administrative user.
Example
The following example shows how to invoke updateFieldDef():
updateObjectDef()
Purpose
Updates an existing object definition and its components from an XML document.
See Object XML Definition on page 1176 for a description of the DataObjectDef XML node and an example
of its use.
Syntax
updateObjectDef(string sessionId, string xmlString);
Parameters
sessionId
xmlString
An XML string describing the object in an DataObjectDef node, along with fields and relationships.
Output
Status text: Object ABC has been updated
Permissions Required
All metadata methods require administrative privileges, regardless of the view, edit, create and delete permissions
set on the application or object. Establish the session by logging in with credentials for an administrative user.
Example
The following example invokes updateObjectDef():
updateRelationshipDef()
Purpose
Updates an existing relationship definition from an XML document.
See Relationship XML Definition on page 1187 for a description of the RelationshipDef XML node and an
example of its use.
Syntax
updateRelationshipDef(string sessionId, string xmlString);
Parameters
sessionId
xmlString
Output
Status text: Relationship R123456 has been updated
Permissions Required
All metadata methods require administrative privileges, regardless of the view, edit, create and delete permissions
set on the application or object. Establish the session by logging in with credentials for an administrative user.
Example
The following example updates a relationship definition:
String infoMessage = binding.updateRelationshipDef(sessionId, xmlString);
createApplicationDef
Purpose
Creates a new application definition and its components from an XML document. This API will create the objects
corresponding tabs and menus, and attach both to the newly created application. See the XML schema for this
document: https://www.rollbase.com/webapi/wsdl/metadata.xsd
See Application XML Elements on page 1173 for a description of the Application XML node and an example
of its use.
HTTP Method
POST
URL
https://www.rollbase.com/rest/api/createApplicationDef
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
xmlString
An XML description of the application in an Application node, including the objects to be created.
Permissions Required
Full administrative privileges
Response
Application ABC has been created
createFieldDef
Purpose
Creates a new field definition from an XML document.
See Field XML Definition on page 1180 for a description of the DataFieldDef XML node and an example of
its use.
HTTP Method
POST
URL
https://www.rollbase.com/rest/api/createFieldDef
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
xmlString
Permissions Required
Full administrative permissions
Response
Status text: Field ABC has been created
createObjectDef
Purpose
Creates a new object definition and its components from an XML document. See the XML schema for this
document: https://www.rollbase.com/webapi/wsdl/metadata.xsd
See Object XML Definition on page 1176 for a description of the DataObjectDef XML node and an example
of its use.
HTTP Method
POST
URL
https://www.rollbase.com/rest/api/createObjectDef
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
xmlString
XML description of object in the DataObjectDef node, including the fields, and relationships to be
created.
Permissions Required
Full administrative permissions
Response
"test" object definition has been created. (ID=1953742)
createRelationshipDef
Purpose
Creates a new relationship definition from an XML document.
See Field XML Definition on page 1180 for a description of the RelationshipDef XML node and an example
of its use.
HTTP Method
POST
URL
https://www.rollbase.com/rest/api/createRelationshipDef
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
xmlString
Permissions Required
Full administrative permissions
Response
Status text: Relationship R123456 has been created
deleteApplicationDef
Purpose
Permanently deletes an existing application and its components. Any objects assigned to this application, that
are not assigned to other applications, and the corresponding records will also be deleted.
See Application XML Elements on page 1173 for a description of the Application XML node and an example
of its use.
HTTP Method
DELETE or GET
URL
https://www.rollbase.com/rest/api/deleteApplicationDef
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
appId
Permissions Required
Full administrative privileges
Response
Application ABC has been deleted
deleteFieldDef
Purpose
Deletes a field definition from the specified object.
See Field XML Definition on page 1180 for a description of the DataFieldDef XML node and an example of
its use.
HTTP Method
DELETE or GET
URL
https://www.rollbase.com/rest/api/deleteFieldDef
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
fieldName
Permissions Required
Full administrative permissions
Response
Status Text: Field ABC has been deleted
deleteObjectDef
Purpose
Permanently deletes an existing object definition, its components and its records.
See Object XML Definition on page 1176 for a description of the DataObjectDef XML node and an example
of its use.
HTTP Method
DELETE or GET
URL
https://www.rollbase.com/rest/api/deleteObjectDef
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
Permissions Required
Full administrative permissions
Response
Object ABC has been deleted
deleteRelationshipDef
Purpose
Deletes the relationship definition specified by the integration name.
See Field XML Definition on page 1180 for a description of the RelationshipDef XML node and an example
of its use.
HTTP Method
DELETE or GET
URL
https://www.rollbase.com/rest/api/deleteRelationshipDef
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
relName
Permissions Required
Full administrative permissions
Response
Status text: Relatinship R123456 has been deleted
getApplicationDef
Purpose
Retrieves the full description of a Rollbase application definition as an XML document. The XML schema for
this document can be found at: https://www.rollbase.com/webapi/wsdl/metadata.xsd
See Application XML Elements on page 1173 for a description of the Application XML node and an example
of its use.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getApplicationDef
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
appId
Required Permissions
One of: VIEW, CREATE, EDIT, DELETE (VIEW by default)
Response
XML document with the application definition description in an Application node.
An application XML generated by this API method will include only the subset of the metadata unlike the
application XML generated from UI. The elements that are exported as part of the getApplicationDef API which
has a relationship are:
• <Application>
• <DisplayName>
• <DependentDefs>
• <DataObjectDefs>
• <DataObjectDef> - <Props>, <SingularName> , <PluralName> , <NameTemplate>,
<DataFieldDefs> - <DataFieldDef>, <DisplayLabel>, <Description>
• <RelationshipDefs> - <RelationshipDef>
The following elements are not exported as a part of the application XML.
• <Attributes> - packedId, language
• <PostInstallScript>
• <PostAppInstallScript>
• <PostAppUpdateScript>
• <UITemplate>
• <DependentDefs> - not included if there is no relationship
• <DataObjectDefs> - The missing elements are – <ListViews>, <Actions>, <Statuses>,
<Processes>, <Buttons>, <ConversionMaps>, <Charts>, <Gauges>, <Reports>,
<Templates>, <Events>, <Questions>, <MobileCards>, and ‘hasPermissions’ attribute
in <DataFieldDef>
• <Menus>
• <WebPageDefs>
• <Portals>
• <LegacyReports>
• <CustomReports>
• <Roles>
• <HostedFiles>
• <CatalogDefs>
• <BatchJobs>
• <RolePages>
• <SeedRecords>
getFieldDef
Purpose
Retrieves a full description of a field definition as an XML document in the sub-node describing objects.
See Field XML Definition on page 1180 for a description of the DataFieldDef XML node and an example of
its use.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getFieldDef
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
fieldName
Permissions Required
One of: VIEW, CREATE, EDIT, DELETE (VIEW by default)
Response
An XML document with the field definition in a DataFieldDef node.
getObjectDef
Purpose
Retrieves the full description of an object definition as an XML document. See the XML schema for this document:
https://www.rollbase.com/webapi/wsdl/metadata.xsd
See Object XML Definition on page 1176 for a description of the DataObjectDef XML node and an example
of its use.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getObjectDef
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
Permissions Required
One of: VIEW, CREATE, EDIT, DELETE (VIEW by default)
Response
An XML document with the object definition description in a DataObjectDef node
getObjectDefNames
Purpose
Retrieves a list of object definition names. Output is limited to objects for which the current user has permissions
to view, create, edit, and delete.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getObjectDefNames
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
permissions
output
Optional parameter specifying the output format, one of: xml (default) or json.
Required Permissions
One of: VIEW, CREATE, EDIT, DELETE (VIEW by default)
Response
Names of object definitions in XML or JSON.
Example
Sample Response:
<?xml version="1.0" encoding="UTF-8"?>
<resp status="ok">
<names>
<name>visitor</name>
<name>process</name>
<name>COMMLOG</name>
</names>
</resp>
getRelationshipDef
Purpose
Retrieves an XML document containing a full description of a relationship definition in a sub-node of the node
describing an object.
See Field XML Definition on page 1180 for a description of the RelationshipDef XML node and an example
of its use.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getRelationshipDef
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
relName
Permissions Required
One of: VIEW, CREATE, EDIT, DELETE (VIEW by default)
Response
An XML document with a relationship definition in the RelationshipDef node.
metadataSearch
Purpose
Searches for a string in metadata and returns results in XML format.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/metadataSearch
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
query
Response
An XML document with nodes for each metadata entity found for the search string.
Permissions Required
Full administrative permissions.
Example
Sample XML response:
<resp status="ok">
<SearchResults>
<SearchResult id="376768" name="AJAX API Test" type="Application"
updatedAt="2014-08-22T18:57:41Z" />
<SearchResult id="376879" name="AJAX Test" type="Page" updatedAt="2014-08-25T21:16:27Z"
/>
<SearchResult id="376881" name="AJAX Test" type="Menu" updatedAt="2014-08-22T18:58:20Z"
/>
<SearchResult id="376825" name="All Tests" type="View" objDefName="test"
updatedAt="2014-08-22T18:57:41Z" />
</SearchResults>
</resp>
updateApplicationDef
Purpose
Updates an existing application definition and its components from an XML document. The XML document
must include a valid Original ID as an attribute to the root XML node for the application to be updated. See the
XML description.
See Application XML Elements on page 1173 for a description of the Application XML node and an example
of its use.
HTTP Method
PUT or POST
URL
https://www.rollbase.com/rest/api/createApplicationDef
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
xmlString
Permissions Required
Full administrative permissions
Response
Application ABC has been updated
updateFieldDef
Purpose
Updates an existing field definition from an XML document.
See Field XML Definition on page 1180 for a description of the DataFieldDef XML node and an example of
its use.
HTTP Method
PUT or POST
URL
https://www.rollbase.com/rest/api/updateFieldDef
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
xmlString
Permissions Required
Full administrative permissions
Response
Status text: Field ABC has been updated
updateObjectDef
Purpose
Updates an existing object definition and its components from an XML document. See the XML schema for
this document: https://www.rollbase.com/webapi/wsdl/metadata.xsd
See Object XML Definition on page 1176 for a description of the DataObjectDef XML node and an example
of its use.
HTTP Method
PUT or POST
URL
https://www.rollbase.com/rest/api/updateObjectDef
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
xmlString
An XML description of the object in a DataObjectDef node, including fields and relationships.
Permissions Required
Full administrative privileges
Response
Object ABC has been updated
updateRelationshipDef
Purpose
Updates an existing Relationship definition from an XML document.
See Field XML Definition on page 1180 for a description of the RelationshipDef XML node and an example
of its use.
HTTP Method
PUT or POST
URL
https://www.rollbase.com/rest/api/updateRelationshipDef
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
xmlString
Permissions Required
Full administrative permissions
Response
Status text: Relationship R123456 has been updated
Parameters to methods can be supplied as URL parameters for GET calls or in the HTTP request for POST
calls. An XML document or JSON object containing the result of the call or an error message will be returned
as a response.
Example of a GET call:
https://www.rollbase.com/rest/api/logout?sessionId=ba0787e245befcb47@1482&output=xml
A successful response:
<?xml version="1.0" encoding="UTF-8" ?>
<resp status="ok"></resp>
An error response:
<?xml version="1.0" encoding="UTF-8" ?>
<resp status="login">
<err>Session expired or invalid login credentials</err>
</resp>
Most REST methods require the logged-in user to have the appropriate permission for the type of object used
in the method call. For example, calling the the create method to create a Customer record requires the
logged-in user to have Create permission on the Customer object. The documentation for each method includes
the required permissions.
It is a good practice for REST-only clients to use credentials of users with the role Server API. Users with that
role cannot log into Rollbase as regular users.
See REST Metadata Methods on page 1203 for information about REST metadata methods.
appXML
Purpose
Returns a Rollbase application as an XML document.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/appXML
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
appId
Permissions Required
Full administrative privileges.
Response
Application XML
bulkCreate
Purpose
Creates records from a bulk CSV upload. The output parameter is optional.
In your REST request you must specify a content-type HTTP header with a value text/csv as your request
body contains CSV data. Refer to online resources for more information on HTTP headers.
HTTP Method
POST
URL
https://www.rollbase.com/rest/api/bulkCreate
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
mapId
synch
If true, process the import synchronously and return the IDs of the created records. If false
(default), process the import asynchronously. The user will receive an email with the results of the
import.
importMode
createAction
Boolean that specifies whether to create picklist values on the fly while importing. When true, picklist
values are created. When false, picklist values are not created. The importMode parameter must
be 0 or 1 for picklist values to be created.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Create permission for the requested object type.
Response
Report on created record similar to report after CSV import
bulkCreateOrUpdate
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Updates existing records or creates new records from a bulk CSV upload. The output parameter is optional.
In your REST request you must specify a content-type HTTP header with a value text/csv as your request
body contains CSV data. Refer to online resources for more information on HTTP headers.
HTTP Method
POST
URL
https://www.rollbase.com/rest/api/bulkCreateOrUpdate
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
mapId
[fieldId]|[triggerId]
The ID of unique field used to identify records to be updated or the original ID of a Unique Fields
Combination trigger.
synch
If true, process the import synchronously and return the IDs of the created records. If false
(default), process the import asynchronously. The user will receive an email with the results of the
import.
importMode
createAction
Boolean that specifies whether to create picklist values on the fly while importing. When true, picklist
values are created. When false, picklist values are not created. The importMode parameter must
be 0 or 1 for picklist values to be created.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Edit permission for the object type of each requested record. Create permission for the object type of each
new record.
Response
Report on created/updated record similar to report after CSV import.
bulkDelete
Purpose
Deletes (moves to Recycle Bin) a group of specified records. The output parameter is optional. If you are
deleting more than 1500 records in a single call, use the POST HTTP method.
HTTP Method
POST, DELETE, or GET
URL
https://www.rollbase.com/rest/api/bulkDelete
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
ids
objName
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Delete permission for the requested object type.
Response
Report on deleted record similar to report after CSVdelete.
bulkUpdate
Warning: Support for using this method with external objects (such as those mapped to external tables,
to OpenEdge Service objects, or through a D2C connection) is a beta feature. This method is supported
in production systems, except for external objects.
Purpose
Updates records from a bulk CSV upload. The output parameter is optional.
In your REST request you must specify a content-type HTTP header with a value text/csv as your request
body contains CSV data. Refer to online resources for more information on HTTP headers.
HTTP Method
PUT or POST
URL
https://www.rollbase.com/rest/api/bulkUpdate
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
mapId
[fieldId]|[triggerId]
The ID of unique field used to identify records to be updated or the original ID of a Unique Fields
Combination trigger.
synch
If true, process the import synchronously and return the IDs of the created records. If false
(default), process the import asynchronously. The user will receive an email with the results of the
import.
importMode
createAction
Boolean that specifies whether to create picklist values on the fly while importing. When true, picklist
values are created. When false, picklist values are not created. The importMode parameter must
be 0 or 1 for picklist values to be created.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Edit permission for the requested object type.
Response
Report on updated record similar to report after CSV update
clearDataObjectCache
Purpose
Clears the cache of object data records on production servers. Progress recommends you use this method
after heavy use of API operations. The output parameter is optional.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/clearDataObjectCache
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Full administrative permissions
Response
Standard success or failure output.
create
Purpose
Creates a new record using data from an XML document. This method can be used to create a single record
or a single record and related records.
Note: Do not use this method with PHP CURL. Instead use create2
HTTP Method
POST
URL
https://www.rollbase.com/rest/api/create
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
requestBody
XML document containing object name, "useIds" attribute(true or false - same meaning as in
Web API), and Fields for the new record (see example below).
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Create permission for the requested object type.
Response
The ID and integration name of the new record and a status of ok (see examples below).
Example
Create input example:
<?xml version="1.0" encoding="utf-8" ?>
<data objName="person" useIds="false">
<Field name="club_member">false</Field>
<Field name="lastName">Smith</Field>
<Field name="status">Created</Field>
</data>
To create related objects in the same call, include a "composite" XML node which wraps a set of "data" XML
nodes as described above. A new record is created for each "data" XML node. These new nodes have
relationships with with core record. Consider this example with dependent nodes:
<?xml version="1.0" encoding="utf-8" ?>
<data objName="person" useIds="false">
<Field name="club_member">false</Field>
<Field name="lastName">Smith</Field>
<Field name="status">Created</Field>
<composite>
<data objName="payment" useIds="false">
<Field name="amount">500.00</Field>
<Field name="paym_date">09/12/2011</Field>
</data>
<data objName="payment" useIds="false">
<Field name="amount">450.00</Field>
<Field name="paym_date">09/22/2011</Field>
</data>
</composite>
</data>
This XML creates one "person" record and two related "payment" records in one call. Output example:
<resp status="ok">
<data id="314452" objName="person" />
<Msg>12 fields have been processed. 2 related records have been created.</Msg>
</resp>
createArr
Purpose
Creates a group of new records using data from an XML document.
HTTP Method
POST
URL
https://www.rollbase.com/rest/api/createArr
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Request Body
XML document containing object name, "useIds" attribute(true or false - same meaning as in the
Web API), and Fields for new records wrapped in <data> XML nodes (see example below).
Required Permissions
Create permission for the requested object types.
Response
The ID and integration name of the new record and a status of ok (see examples below).
Example
Input example:
createCustomer
Purpose
Creates a new customer record and starts the creation process using data from URL parameters. For private
cloud users, the user credentials for the user sending this request must belong to the Master server. The URL
parameter password can be used to set specific password for first administrative user, otherwise, a temporary
password will be created and sent through email. The output parameter is optional.
HTTP Method
POST
URL
https://www.rollbase.com/rest/api/createCustomer
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
useIds
Boolean value. If true, use numeric IDs for lookup and picklist values; otherwise use integration
codes and record names.
field1;[field2; ...]
Parameter's name - integration name of field to set; parameter's value - value of field to set. Same
for other fields.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Create permission for the Customer type.
Response
ID of newly created record as a long wrapped in an XML document or a JSON string (see example below).
Example
Single create input example:
companyName=API+Test&email=myemail@mycompany.com&lastName=Admin
&loginName=myemail@mycompany.com&timeZone=PST
&mailSender=noreply@mycompany.com&password=my_password
Note: The API call must not have any blank spaces in it.
Output example:
{
id: 7941
objName: "CUSTOMER"
status: "ok"
}
create2
Purpose
Warning: This method is deprecated. Please change any existing code to use createRecord on page
1228, which takes an object ID as a parameter.
Creates a new record using data from URL parameters. The names of the URL parameters used by this API
are field integration names. If a field is not found, the system ignores the URL parameter. Field values must
be formatted the same way as CSV imported values. For more information, see Importing Data.
HTTP Method
POST
URL
https://www.rollbase.com/rest/api/create2
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
useIds
true or false.
output
field1;[field2; ...]
Parameter's name - integration name of field to set; parameter's value - value of field to set.
Permissions Required
Create permission for the requested object type.
Response
The ID and integration name of the new record wrapped in an XML document (see example below).
Example
Input example (URL parameters):
&objDefName=person&useIds=false&club_member=false&lastName=Smith&status=Created
Output example:
<resp status="ok">
<data id="314452" objName="person" />
<Msg>12 fields have been processed</Msg>
</resp>
createRecord
Purpose
Similar to create on page 1223, creates a new record. Returns the ID of the newly created record as a string.
This method works for external objects, including those mapped to OpenEdge service objects.
Provide the integration names of the fields to set along with their values. If a field is not found, the system will
ignore that URL parameter. Field values must be formatted the same way as you would for a CVS import; see
Importing data on page 699.
HTTP Method
POST
URL
https://www.rollbase.com/rest/api/createRecord
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
useIds
Boolean value. If true, use numeric IDs for lookup and picklist values; otherwise use integration
codes and record names.
Integration name of the field(s) and their values. You must supply a value for required fields. Some
fields, such as those that represent relationships, can have multiple values. Use the field name only
once, and specify the ID of the records to attach separated with a | symbol.
@p1
When creating a User record, the password for the new user. This parameter is optional. If it is not
specified:
• If the password is managed by Rollbase, Rollbase generates a temporary password for the user.
• If the password is not managed by Rollbase (external authentication), the password remains the
same as the one in the external system that manages the password.
@resetPassword
When creating a User record, sets a temporary password for the user. This parameter is optional.
This applies in cases where the user is already present in an external system and Rollbase can set
the password, for example, when the user already has a Progress ID (Hosted Rollbase) or is already
a user in an OpenEdge SPA configuration where set password is configured. If the @p1 parameter
is passed, Rollbase ignores this parameter.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Create permission for the requested object type.
Response
The ID of the newly created record as a long value and a status of ok, wrapped in an XML document or JSON
string.
Example
Input example (URL parameters):
&objName=USER&useIds=false&firstName=John&lastName=Smith&email=johns555@gmail.com&@p1=mypassword
delete
Purpose
Moves the specified data record to the Recycle Bin. The output parameter is optional.
HTTP Method
DELETE or GET
URL
https://www.rollbase.com/rest/api/delete
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
id
Record's ID.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Delete permission for the requested object type.
Response
Standard success or failure output
Example
Output example:
<resp status="ok">
<Msg>Record has been deleted</Msg>
</resp>
deleteArr
Purpose
Moves group of specified data record to the Recycle Bin. The output parameter is optional.
For external objects (such as those mapped to external tables, to OpenEdge Service objects, or through a D2C
connection), you must specify both the objName and id fields.
HTTP Method
DELETE or GET
URL
https://www.rollbase.com/rest/api/deleteArr
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
ids
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Delete permission for the requested object type.
Response
Standard success or failure output
Example
Output example:
<resp status="ok">
<Msg>2 records have been deleted.</Msg>
</resp>
deleteRecord
Purpose
Moves Rollbase object records to the Recycle bin. Deletes external objects, including those mapped to OpenEdge
Service objects.
HTTP Method
DELETE or GET
URL
https://www.rollbase.com/rest/api/deleteRecord
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
id
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Delete permission for the requested object type.
Response
Standard success or failure output.
Example
Output example in XML format:
<resp status="ok">
<Msg>Record has been deleted.</Msg>
</resp>
getApplicationIds
Purpose
Retrieves Ids of all the applications available for the currently logged user.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getApplicationIds
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Response
Ids of all the applications available for the currently logged user.
Example
Sample Response:
<?xml version="1.0" encoding="UTF-8"?>
<resp status="ok">
<ids>
<id>123456</id>
<id>123490</id>
</ids>
</resp>
getAuthentication
Purpose
Returns the authentication method for the tenant. This method is only available for Rollbase Private Cloud.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getAuthentication
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Full administrative privileges.
Response
The authentication for the tenant in XML or JSON format.
Examples
Output example in XML format:
<?xml version="1.0" encoding="UTF-8" ?>
<resp status="ok">
<authType>0</authType>
<authDescription>Password</authDescription>
<APIAuthType>0</APIAuthType>
<authAPIDescription>Password</authAPIDescription>
<useSecQuestions>false</useSecQuestions>
<securityLevel>Low</securityLevel>
<expirPolicy>0</expirPolicy>
<enablePasswordHistory>false</enablePasswordHistory>
<passwordHistoryLimit>1</passwordHistoryLimit>
<passwordActivationContextExpiry>2</passwordActivationContextExpiry>
<useKnowledgeFactorToken>true</useKnowledgeFactorToken>
<knowledgeFactorToken>email</knowledgeFactorToken>
</resp>
getBinaryData
Purpose
Retrieves the file attachment associated with a particular file field from a specific record.
HTTP Method
GET method
URL
https://www.rollbase.com/rest/api/getBinaryData
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
id
fieldName
output
Permissions Required
View permission for the requested object type.
Response
The file attachment from the specified file field. The content type and length of output will be set to correspond
to the attachment.
Example
Input example (URL parameters) specifying JSON output:
http://localhost:8080/rest/api/getBinaryData?objName=a&id=806765
&fieldName=My_File&output=json&sessionId=a78c32aeff854b9e91833efd4d304aef@5903
getBuildStatus
Purpose
Retrieves status of current Rollbase build and license info in XML format.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getBuildStatus
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Response
Build and license information in XML format.
Example
Sample Response:
<?xml version="1.0" encoding="UTF-8" ?>
<resp status="ok">
<status>
<releaseNo>3.7.4</releaseNo>
<releaseDate>2012-08-16T</releaseDate>
<edition>Multi-Tenant</edition>
<expiration>2013-01-30T</expiration>
<host>localhost:8080</host>
</status>
</resp>
getCodeById
Purpose
Retrieves the integration code of a picklist item or a status by providing its ID.
Note: This API only works when the ID is numeric. Therefore, Picklist(char) or Radio Button(char) are not
supported.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getCodeById
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
field
id
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
View permission for the requested object type.
Response
Integration code of item with matching ID or null
Example
Output example in JSON:
{ "code": "CREATED" }
getCount
Purpose
Returns the total number of records in a view (see Working with views on page 561 for more information about
views).
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getCount
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
viewId
filterName
Name of the field to filter the output using the “equals” option (replaces the filter set in the view, if
any).
filterValue
Value of the field to filter the output using the "equals" option.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
View permission for the requested object type.
Response
Total number of records in view
Example
Output example in XML:
<resp status="ok">
<count>100</count>
</resp>
getDataField
Purpose
Retrieves the value of a single field from a specific record.
For external objects (such as those mapped to external tables, to OpenEdge Service objects, or through a D2C
connection), you must specify both the objName and id fields.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getDataField
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
id
fieldName
useLegacyDateFormat
This optional URL parameter only applies to JSON output and, specifically, to DATE fields. If
useLegacyDateFormat=False, or is not specified, dates will be returned in the normal JSON
format, such as: "Wed Mar 05 17:52:38 IST 2014". If useLegacyDateFormat=True, dates
will be returned in a format similar to the following example: new Date("Wed Mar 05 2014
17:53:33 (IST)"). The following example shows results in normal and legacy formats:
• Normal:
{
"objName": "CUSTOMER",
"createdAt": "Wed Mar 05 17:52:38 IST 2014”
}
• Legacy:
{
"objName": "CUSTOMER",
"createdAt": new Date("Wed Mar 05 2014 17:53:33 (IST)")
}
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
View permission for the requested object type.
Response
Field's value.
Example
Output example in XML:
<?xml version="1.0" encoding="utf-8" ?>
<resp status="ok">
<Field name="status">Created</Field>
</resp>
getDataObj
Purpose
Warning: This method is deprecated. Please change any existing code to use getRecord on page 1250,
which takes an object ID as a parameter.
Retrieves all field data (including formulas) for a given record in XML format.
The composite output is generated recursively in a tree-type structure. The following rules apply:
• The maximum level of recursion is provided as a URL parameter.
• Each data record is included in the output only once.
• No more than 1000 total data records are included in the output.
• The objNames input parameter can be used to explicitly set the list of output data objects.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getDataObj
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
id
composite
The number of levels for related records to be included recursively in the output. Defaults to 0.
objNames
A comma-separated list of object names. If present, only objects from this list are included in the
output.
fieldList
A comma-separated list of field names. If present, only fields from this list are included in the output.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
View permission for the requested object type.
Response
All of the field data for the specified object record.
Example
Output example for core record:
<Field name="id">131227</Field>
<Field name="club_member">false</Field>
<Field name="lastName">Smith</Field>
<Field name="status">Created</Field>
<Field name="updatedAt">20110111T143331Z</Field>
</data>
</resp>
Output example for core and related record (composite parameter set to 1):
<?xml version="1.0" encoding="utf-8" ?>
<resp status="ok">
<data id="131227" objName="person">
<Field name="id">131227</Field>
<Field name="club_member">false</Field>
<Field name="lastName">Smith</Field>
<Field name="status">Created</Field>
<Field name="updatedAt">20110111T143331Z</Field>
<Field name="R986">131228,131229</Field>
<composite>
<data id="131228" objName="payment">
<Field name="amount">500.00</Field>
<Field name="paym_date">20110115T143331Z</Field>
<Field name="R986">131227</Field>
</data>
<data id="131229" objName="payment">
<Field name="amount">450.00</Field>
<Field name="paym_date">20110116T143331Z</Field>
<Field name="R986">131227</Field>
</data>
</composite>
</data>
</resp>
getIdByCode
Purpose
Retrieves the ID of a picklist item or status by providing its integration code.
Note: This API only works when the ID is numeric. Therefore, Picklist(char) or Radio Button(char) are not
supported.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getIdByCode
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
field
code
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
View permission for the requested object type.
Response
ID of item with matching integration code or -1
Example
Output example in JSON:
{ "id": 4567 }
getIdByOriginalId
Purpose
Given the original ID and an entity type, returns the entity's ID.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getIdByOriginalId
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
entityType
The type of entity. Can be one of object, field, relationship, webpage, view, template,
report, chart, gauge, trigger, process, status, action, button, or datamap.
origId
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
The user must have the Administrator role.
Response
If successful, the ID of the specified entity. If an entity of the specified type with the specified original ID does
not exist, returns an error message in the specified output format (XML or JSON).
Example
The following example retrieves the ID for an object with the original ID 7550.
https://www.rollbase.com/rest/api/getIdByOriginalId?
sessionId=e7bf663caa844ac89dce1c36c17c9300@46216462&entityType=object&origId=7550
If the specified entity does not exist, returns an error message as shown below (in XML format):
<?xml version="1.0" encoding="UTF-8" ?>
<resp status="fail">
<err>No object exists with original ID - 7550</err>
</resp>
getLDFIDs
Purpose
Retrieves IDs of LDF nodes (Locations, Departments, or Functions) assigned to the current non-administrative
user. This set of nodes is determined by:
• The groups assigned to current user
• The LDF nodes assigned to these groups
• The hierarchical structure of the LDF nodes
See the LDF Filter field on the user view page for more information.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getLDFIDs
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
The integration name of LDF dimension. It must be one of the following: $ORG_LOCN, $ORG_DEPT,
or $ORG_FUNC.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Response
Returns a comma-separated list of LDF node IDs assigned to the current user. Returns “Full Access” if
the user has full access to all LDF nodes. Returns “No Access” if the user has no access to LDF nodes.
Example
Example output (JSON):
{ "ids": "4567,7890,4567" }
getPage
Purpose
Retrieves the specified range of data records in a view. The selected view defines the sorting and filtering of
output. The amount of processing and time required to get complete results can vary widely, depending on
whether it fetches related records and the number of rows you specify per page.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getPage
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
viewId
startRow
rowsPerPage
The number of data records in the output. Defaults to the user-specified number of records per page.
composite
The number of levels for related records to be included recursively in the output. Defaults to 0.
objNames
A comma-separated list of object names. If present, only objects from this list are included in the
output.
fieldList
A comma-separated list of field names. If present, only fields from this list are included in the output.
filterName
Name of the field to filter the output using the “equals” option (replaces the filter set in the view, if
any).
filterValue
Value of the field to filter the output using the "equals" option.
onlyViewFields
When true, the output only includes fields in the specified view. When false, the output includes
all fields in the object definition.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
View permission for the requested object type.
Response
The set of data records in the view in the requested range
Example
Output example in XML format (no recursive output for related records):
<?xml version="1.0" encoding="utf-8" ?>
<resp status="ok">
<data id="131227" objName="person">
<Field name="firstName">Bill</Field>
<Field name="lastName">Smith</Field>
</data>
<data id="131228" objName="person">
<Field name="firstName">John</Field>
<Field name="lastName">Roth</Field>
</data>
</resp>
Output example in JSON format (no recursive output for related records):
[
{"objName": "lead", "id": 131227, "firstName": "Bill", "lastName": "Smith" },
{"objName": "lead", "id": 131228, "firstName": "John", "lastName": "Roth" }
]
getPermissionsByRole
Purpose
Returns information about all of the entities of the given type, including permissions granted to the specified
role. Throws an exception in the following cases:
• entityType is application, view, report, or chart, and the the specified roleID evaluates to
Server API
• entityType is menu, action, or field, and the specified roleID evaluates to Server API, Portal
Guest, or Portal User
• The specified roleID evaluates to Administrator or No Access
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getPermissionsByRole
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
roleId
entityType
The type of entity for which permissions should be listed. Can be one of the following: field, object,
application, menu, view, action, report, chart.
objId
The original ID of the object definition.This is required only when entityType is field, view,
action, report, or chart.
appId
The original ID of the application. This is required only when entityType is menu.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Full administrative privileges.
Response
The name, ID, original ID, and permissions granted for that role in XML or JSON format. Permissions include
true, false, and, for fields, conditional. See setPermissionsByRole on page 1277 for the possible permissions
for each entity type.
Example
Output example in JSON format for entityType=application:
[
{
"name": "Progress Rollbase",
"id": "46219010",
"originalId": "836899",
"View": "true"
},
{
"name": "Organization Management",
"id": "46219031",
"originalId": "2354424",
"View": "false"
},
{
"name": "Library",
"id": "46219857",
"originalId": "5903",
"View": "true"
},
{
"name": "Room Reservation",
"id": "46220403",
"originalId": "7549",
"View": "false"
},
{
"name": "Order Management",
"id": "46220807",
"originalId": "150491448",
"View": "false"
}
]
getPermissionsByUser
Purpose
Returns information about all of the entities of the given type, including permissions granted to the specified
role. Throws an exception in the following cases:
• entityType is application, view, report, or chart, and the the specified user's role is Server
API
• entityType is menu or action, and the specified user's role is Server API, Portal Guest, or Portal
User
• The specified user's role is Administrator or No Access
• entityType is field, as user-based access control is not supported for fields.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getPermissionsByUser
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
userId
entityType
The type of entity for which permissions should be listed. Can be one of the following: object,
application, menu, view, action, report, chart.
objId
The original ID of the object definition.This is required only when entityType is view, action,
report, or chart.
appId
The original ID of the Application. This is required only when entityType is menu.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Full administrative privileges.
Response
The name, ID, original ID, and permissions granted for that user in XML or JSON format. See
setPermissionsByUser on page 1278 for the possible permissions for each entity type.
Example
Output example in JSON format for entityType=object:
[
{
"name": "Product",
"id": "46220471",
"originalId": "151807756",
"View": "false",
"Create": "false",
"Edit": "false",
"Delete": "false"
},
{
"name": "Reservation",
"id": "46219904",
"originalId": "791755",
"View": "true",
"Create": "false",
"Edit": "false",
"Delete": "false"
},
{
"name": "Room",
"id": "46219927",
"originalId": "7550",
"View": "true",
"Create": "true",
"Edit": "true",
"Delete": "true"
}
]
getPicklist
Purpose
Returns items available for the selected Picklist field (including radio buttons and groups of check box fields)
as a JSON array. Each array entry has elements: name, id, and code.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getPicklist
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
fieldName
mainValueId
The ID of the main picklist item (optional, for dependent picklists only).
Response
A JSON string of picklist items.
Example
Example output:
[{"code":"S","id":721774,"name":"South"},{"code":"N","id":721775,"name":"North"},
{"code":"E","id":721776,"name":"East"},{"code":"W","id":721777,"name":"West"}]
getRecord
Purpose
Retrieves all field data (including formulas) for a given record in XML format.
The composite output is generated recursively in a tree-type structure. The following rules apply:
• The maximum level of recursion is provided as a URL parameter.
• Each data record is included in the output only once.
• No more than 1000 total data records are included in the output.
• The objNames input parameter can be used to explicitly set the list of output data objects.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getRecord
URL Parameters
objName
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
id
composite
The number of levels for related records to be included recursively in the output. Defaults to 0.
objNames
A comma-separated list of object names. If present, only objects from this list are included in the
output.
fieldList
A comma-separated list of field names. If present, only fields from this list are included in the output.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
View permission for the requested object type.
Response
All of the field data for the specified object record and related records.
Example
Output example for core record:
Output example for core and related record (composite parameter set to 1):
<?xml version="1.0" encoding="utf-8" ?>
<resp status="ok">
<data id="131227" objName="person">
<Field name="id">131227</Field>
<Field name="club_member">false</Field>
<Field name="lastName">Smith</Field>
<Field name="status">Created</Field>
<Field name="updatedAt">20110111T143331Z</Field>
<Field name="R986">131228,131229</Field>
<composite>
<data id="131228" objName="payment">
<Field name="amount">500.00</Field>
<Field name="paym_date">20110115T143331Z</Field>
<Field name="R986">131227</Field>
</data>
<data id="131229" objName="payment">
<Field name="amount">450.00</Field>
<Field name="paym_date">20110116T143331Z</Field>
<Field name="R986">131227</Field>
</data>
</composite>
</data>
</resp>
getRelationships
Purpose
Retrieves an array of related record IDs. If you supply the optional fieldList parameter is supplied, output
only includes values for those fields.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getRelationships
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
id
relName
fieldList
A comma-separated list of field names. If present, only fields from this list are included in the output.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
View permission for the requested object type.
Response
IDs of related records
Example
Output example (XML):
<resp status="ok">
<ids>
<id>314452</id>
<id>128003</id>
</ids>
</resp>
getRoleById
Purpose
Returns information about the specified role in XML or JSON format. Throws an exception if roleId evaluates
to Super Admin.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getRoleById
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
roleId
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Full administrative privileges.
Response
The integration code, name, description, ID, and original ID of the role in XML or JSON format.
Example
Output example in XML format:
<?xml version="1.0" encoding="UTF-8" ?>
<resp status="ok">
<role>
<name>Administrator</name>
<description>System Administrator has unrestricted access to all
applications.</description>
<id>90</id>
<originalId>90</originalId>
</role>
</resp>
"originalId": "90"
}
getRoles
Purpose
Returns a list in XML or JSON format of all the roles in the tenant with the following details:
• Name
• Integration code
• Description
• ID
• Original ID
Does not include the Super Admin role in the response.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getRoles
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Full administrative privileges.
Response
A list of all roles in the tenant in XML or JSON format.
Example
Output example in JSON format:
[
{
"name": "Server API",
"code": null,
"description": "System role used to check permissions in Server-side API calls.",
"id": "98",
"originalId": "98"
},
{
"name": "Portal Guest",
"code": null,
"description": "System role used to assign permissions to non-authenticated portal
users.",
"id": "99",
"originalId": "99"
},
{
"name": "Library Employee",
"code": null,
"description": null,
"id": "67956084",
"originalId": "67956084"
},
{
"name": "Administrator",
"code": null,
"description": "System Administrator has unrestricted access to all applications.",
"id": "90",
"originalId": "90"
},
{
"name": "Portal User",
"code": null,
"description": "System role used to assign permissions to authenticated portal
users.",
"id": "93",
"originalId": "93"
},
{
"name": "No Access",
"code": null,
"description": "",
"id": "94",
"originalId": "94"
}
]
getUpdated
Purpose
Retrieves an array of record IDs of the specified object type that were either created or updated within the
given date/time interval. This method is not available for external objects, including those mapped to OpenEdge
service objects.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/getUpdated
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
from
till
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
View permission for the requested object type.
Response
IDs of all records found in the search, returned as an array of longs
Example
Output example in XML:
<resp status="ok">
<ids>
<id>314452</id>
<id>128003</id>
</ids>
</resp>
header
Purpose
Warning: This method is deprecated.
install
Purpose
Installs or updates Rollbase application from an XML document. Invoking this API will cause a customer reload.
All currently logged users will be forced to log out.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/install
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
overrideChanges
A value of true or false. If true (default value), override changes made by administrative users.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Request Body
Application XML.
Permissions Required
Full administrative privileges.
Response
Short report on application installation/update
Example
Output example:
<resp status="ok">
<Report>Application "Test" has been installed.</Report>
</resp>
installByAppId
Purpose
Installs or updates a Rollbase application published to the Application Directory. Invoking this API will cause
customer reload. All currently logged in users will be forced to log out.
HTTP Method
POST
URL
https://www.rollbase.com/rest/api/installByAppId
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
id
overrideChanges
A value of true or false. If true (default value), override changes made by administrative users.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Full administrative privileges.
Response
Short report on application installation/update
Example
Output example:
<resp status="ok">
<Report>Application "Test" has been installed.</Report>
</resp>
licenseUpdate
Purpose
Updates the license for a running Rollbase instance based on the supplied xmlString. Only a user with the
Administrator role on the master tenant can execute this method. This method is only available on Rollbase
Private Cloud.
HTTP Method
POST
URL
https://www.rollbase.com/rest/api/licenseUpdate
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
xmlString
Permissions Required
Administrative privileges on the master tenant.
Response
Returns the status in JSON format.
Example
The following example is the response upon a successful license update:
{"status":"ok"}
login
Purpose
Performs a user log in and initiates an API session. This method must be called prior to any other API call. The
REST login creates a server-side session that may expire according to the security level selected for a
Customer (see Security and Access Control for more info). The API client should log in again if the session
expires. Progress recommends that an API client logs out after performing a group of operations rather than
keeping the session open for a long time. When an API client logs in, any previous sessions existing for the
same user credentials are terminated.
Master Server users with login permissions can use the login API with their credentials to access the REST
API for a specified Customer.
HTTP method
POST or GET
URL
https://www.rollbase.com/rest/api/login
password
User password.
custId
ID of the Customer to log in. Optional parameter: if not present, the Customer is determined by login
name.
URL parameters
loginName
Login name for an active Rollbase user account. This parameter is deprecated. Please change any
existing code to use the HTTP header parameter described above.
password
User password. This parameter is deprecated. Please change any existing code to use the HTTP
header parameter described above.
custId
ID of the Customer to log in. Optional parameter: if not present, the Customer is determined by login
name. This parameter is deprecated. Please change any existing code to use the HTTP header
parameter described above.
output
Optional parameter specifying the output format, one of: xml (default) or json.
adminFallback
When true, enables the to fallback to the default password authentication if the tenant uses a
different authentication method. Defaults to false. This parameter can also be specified in the
HTTP header.
Response
Session ID that must be used in all subsequent API calls during this session
Example
Sample XML response:
<?xml version="1.0" encoding="utf-8" ?>
<resp status="ok">
<sessionId> ecc701d2442e4f6b9fe2a7cc7b52078a@5857</sessionId>
</resp>
logout
Purpose
Terminates the specified API session. This method should be called to explicitly end each Web API session.
The output parameter is optional.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/logout
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Response
Standard success or failure output
Example
Sample XML response:
<?xml version="1.0" encoding="utf-8" ?>
<resp status="ok">
</resp>
resetPassword
Purpose
Resets the password of the specified user.
HTTP Method
POST
URL
https://www.rollbase.com/rest/api/resetPassword
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
loginName
Login name for an active Rollbase user account in the same tenant
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Requires administrative privileges. Establish the session by logging in with credentials for an administrative
user.
runAction
Purpose
Runs a workflow action on a record.
HTTP Method
POST
URL
https://www.rollbase.com/rest/api/runAction
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
id
actionId
output
Optional parameter specifying the output format, one of: xml (default) or json.
Additional parameters
The integration name(s) of field(s) to be updated as part of the workflow action. If the workflow action
type is Status Change, the Use Web Page property must be specified on the action for fields to be
updated. See Status Change action on page 418 for details.
Permissions Required
Edit permission for the requested object type.
Response
The status in XML or JSON format. The following is an XML response upon success:
<?xml version="1.0" encoding="UTF-8" ?>
<resp status="ok"></resp>
"message": "Action with original id 225886927 not applicable on the data record."
}
If the workflow action is of the type Related Record, the response includes the ID of the newly created record
(see example below). Note that a conversion map or a record template is required to run a Related Record
workflow action to create a record of a different object type; if neither is specified, the related record is not
created. If the action creates a record of the same object type, a record will get created with the same data as
the record on which the workflow action is being executed. See Related Record action on page 419 for details.
Example
The following example creates a new related record for an Order record and sets the value of the Product field:
https://www.rollbase.com/rest/api/runAction?sessionId=d802a98210e9447c95691e36b1e79f28@148219868
&objName=Order&id=203783751&actionId=226380776&Product=Cheese&output=xml
runTrigger
Purpose
Runs a trigger on an object.
HTTP Method
PUT or POST
URL
https://www.rollbase.com/rest/api/runTrigger
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
id
triggerId
checkValidation
If set to true, checks validation formula before running the trigger. This is set to false by default.
runRecursions
When true, configures the trigger to run recursively, if recursive properties on the trigger definition
page are set. Defaults to false if the parameter is not set.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Response
Standard success or failure output.
Permissions
Edit permission for the requested object type.
Example
Input example (URL parameters):
&objName=person&id=314452&triggerId=TR1
search
Purpose
Performs a full-text search in the database assigned to the account used to obtain the session ID. The search
query has the same syntax as that used in the standard Rollbase interface. See Views and Search for more
information on search query syntax.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/search
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
output
Optional parameter specifying the output format, one of: xml (default) or json.
query
A URL-encoded SQL query that adheres to the same syntax and restrictions as the server-side
Query API.
objName
Response
IDs of all records found in the search, returned as an array of longs
Example
Output example (XML):
<resp status="ok">
<ids>
<id>314452</id>
<id>128003</id>
</ids>
</resp>
selectNumber
Purpose
Runs an SQL SELECT query on the server and returns the first element of the results as a decimal number.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/selectNumber
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
output
Optional parameter specifying the output format, one of: xml (default) or json.
query
Permissions Required
View permission for the requested object type.
Response
Query result as decimal number
Example
Output: first element returned by query converted into number and wrapped in XML. Example:
selectQuery
Purpose
Runs an SQL SELECT query on the server and returns the results as a 2D-array.
The SELECT query used in this method consists of the following parts:
• The SELECT statement expects columns or expressions to be selected (mandatory). Use the field integration
names as SQL column names. You can use expressions such as COUNT(1). You cannot use * to retrieve
all columns.
• The FROM clause must consist of exactly one object name (mandatory).
• The WHERE clause can include a valid SQL expression to narrow the selection (optional). Use field integration
names as SQL column names.
• The ORDER BY clause can include a valid SQL expression to order the selection (optional). Use field
integration names as SQL column names.
You can use special tokens in your queries such as:
• TODAY for current time
• WEEK for 12PM of last Sunday
• MONTH for 12PM of 1st day of current month
• QUARTER for 12PM of 1st day of current quarter
• YEAR for 12PM of 1st day of current year
• CURR_USER for id of currently logged in user
Object and Field names are case-sensitive, while other components of the SQL query are not.
Use #code suffix to fetch integration codes for picklist fields rather than IDs. See Adding Logic to an Application
for more information.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/selectQuery
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
startRow
maxRows
The maximum number of rows in the output, which can be configured per Rollbase instance.
query
output
useLegacyDateFormat
This optional URL parameter only applies to JSON output and, specifically, to DATE fields. If
useLegacyDateFormat=False, or is not specified, dates will be returned in the normal JSON
format, such as: "Wed Mar 05 17:52:38 IST 2014". If useLegacyDateFormat=True, dates
will be returned in a format similar to the following example: new Date("Wed Mar 05 2014
17:53:33 (IST)"). The following example shows results in normal and legacy formats:
• Normal:
{
"objName": "CUSTOMER",
"createdAt": "Wed Mar 05 17:52:38 IST 2014”
}
• Legacy:
{
"objName": "CUSTOMER",
"createdAt": new Date("Wed Mar 05 2014 17:53:33 (IST)")
}
Permissions Required
The current user requires View permission on the selected object type to run this API.
Response
Query results as 2D array
Example
Query to run:
select id, firstName, lastName from lead oder by updatedAt desc
startRow=0
maxRows=2
selectValue
Purpose
Runs an SQL SELECT query on the server and returns the first element from the results as single value.
HTTP Method
GET
URL
https://www.rollbase.com/rest/api/selectValue
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
output
Optional parameter specifying the output format, one of: xml (default) or json.
query
useLegacyDateFormat
This optional URL parameter only applies to JSON output and, specifically, to DATE fields. If
useLegacyDateFormat=False, or is not specified, dates will be returned in the normal JSON
format, such as: "Wed Mar 05 17:52:38 IST 2014". If useLegacyDateFormat=True, dates
will be returned in a format similar to the following example: new Date("Wed Mar 05 2014
17:53:33 (IST)"). The following example shows results in normal and legacy formats:
• Normal:
{
"objName": "CUSTOMER",
"createdAt": "Wed Mar 05 17:52:38 IST 2014”
}
• Legacy:
{
"objName": "CUSTOMER",
"createdAt": new Date("Wed Mar 05 2014 17:53:33 (IST)")
}
Permissions Required
The current user requires View permission on the selected object type to run this API.
Response
Query result as single value
Example
Example of first element returned by query wrapped in XML:
setAuthentication
Purpose
Sets the authentication method for the tenant and returns a success/failure response. Most URL parameters
are specific to a particular authentication type, which is indicated in each parameter description. This method
is only available for Rollbase Private Cloud.
HTTP Method
POST
URL
https://www.rollbase.com/rest/api/setAuthentication
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
output
Optional parameter specifying the output format, one of: xml (default) or json.
authType
A signature method algorithm used to sign the request being sent to the IDP. The supported algorithms
are RSA-SHA1 and RSA-SHA256. The default value is RSA-SHA1.
formula
useSecQuestions
For Password authentication, a true value specifies that users must create and answer security
questions.
mustAnswerQuestionsInProfile
For Password authentication, the number of security questions a user must answer. Valid values
are 2, 3, and 4.
mustAnswerPreviouslyAnswered
For Password authentication, the number of previously answered security questions a user must
answer to be authenticated. Valid values are 1 and 2.
securityLevel
For Password authentication, the security level as a number, where 1=low, 2=medium, and 3=high.
expirPolicy
For Password authentication, the number of days before a password expires. Set to 0 for no password
expiration (the default) and a value of at least the value of the shared property
MinExpirationPolicy (30 by default) otherwise. For OpenEdge authentication, the parameter
managePassword must be true in order to set this parameter.
questionX
For Password authentication, security questions, where X is a number between 0 and 11. A maximum
of 12 security questions is allowed.
useKnowledgeFactorToken
For passowrd authentication, this must be set to true to use a knowledge factor token. See User
authentication and password management on page 759 for more information.
knowledgeFactorToken
For passowrd authentication, this must be a mandatory field from the User object definition that can
be configured as a token. See User authentication and password management on page 759 for more
information.
targetURL
For LDAP, LDAP Advanced, HTTP POST, and HTTP GET authentication, the target URL.
securityAuthentication
For LDAP authentication, the authentication mechanism to implement. See LDAP authentication
details on page 883 for details.
securityPrincipal
For LDAP authentication, the name of the user or program doing the authentication. Typically, this
is a query string to search the LDAP database.
securityCredential
For LDAP authentication, the credentials of the user or program doing the authentication.
additionalParamKeys
For LDAP authentication, a JSON array of keys for additional parameters. Only one additional
parameter is currently allowed.
additionalParamValues
For LDAP authentication, a JSON array of values for additional parameters. Only one additional
parameter is currently allowed.
idpCertificateFileContent
idpFileContentType
idpCertificateFileName
responseText
For HTTP POST and HTTP GET authentication, text that must be present in HTTP response to
indicate whether the authentication was successful.
httpBody
For HTTP POST and HTTP GET authentication, the template for the body of the HTTP POST request
(typically a SOAP call). This must include tokens for user input.
headerKeys
For HTTP POST and HTTP GET authentication, a JSON array of header keys. The first header key
for HTTP POST must always be Content-Type. Only five headers are currently allowed.
headerValues
For HTTP POST and HTTP GET authentication, a JSON array of header values. The first header
value for HTTP POST must be the content type. Only five headers are currently allowed.
realmURL
For OpenEdge authentication, the realm URL. See OpenEdge authentication details on page 886 for
details.
realmClass
For OpenEdge authentication, the realm class. See OpenEdge authentication details on page 886
for details.
openEdgeDomain
For OpenEdge authentication, the name of the domain to which the OpenEdge user must belong.
See OpenEdge authentication details on page 886 for details.
openEdgeAccessCode
For OpenEdge authentication, the code or key required for an OpenEdge user to access the
OpenEdge domain. See OpenEdge authentication details on page 886 for details.
noHostVerify
For OpenEdge authentication. If true, OpenEdge authentication will not validate the hostname of
the OpenEdge realm URL. See OpenEdge authentication details on page 886 for details.
managePassword
For OpenEdge authentication, enables password management options. See OpenEdge authentication
details on page 886 for details.
passwordGuidelines
For OpenEdge authentication, the text on the Change Password page that describes password
guidelines. The managePassword parameter must be true in order to set this parameter.
suLoginname
suPassword
guestLoginname
guestPassword
certJarFileContent
For OpenEdge authentication, the certificate JAR file content. It should be a Base64 encoded string.
certJarFileName
certJarFileContentType
tokenFileContent
For OpenEdge authentication, the token file content. It should be a Base64 encoded string.
tokenFileName
tokenFileContentType
baseDistinguishedName
For LDAP Advanced authentication, the root distinguished name (DN) to use while running queries
against your directory server. See LDAP advanced authentication details on page 883 for more
information.
additionalUserDN
For LDAP Advanced authentication, the value to be used in addition to the base DN when searching
for and loading users. See LDAP advanced authentication details on page 883 for more information.
authenticationType
For LDAP Advanced authentication, the authentication mechanism to implement. See LDAP advanced
authentication details on page 883 for more information.
searchCapabilities
For LDAP Advanced authentication, the LDAP authentication requirements to search for and get
results from a search query. Valid values are Anonymous and Authenticated. See LDAP advanced
authentication details on page 883 for more information.
adminSecurityPrincipal
For LDAP Advanced authentication, the admin security principal. This parameter is only applicable
if searchCapabilities is Authenticated. See LDAP advanced authentication details on page
883 for more information.
adminSecurityCredential
For LDAP Advanced authentication, the admin security credential. This parameter is only applicable
if searchCapabilities is Authenticated. See LDAP advanced authentication details on page
883 for more information.
userNameAttribute
For LDAP Advanced authentication, the attribute field to use when loading the user name. See LDAP
advanced authentication details on page 883 for more information.
additionalParamKeys
For LDAP Advanced authentication, a JSON array of keys for additional parameters. Only one
additional parameter is currently allowed.
additionalParamValues
For LDAP Advanced authentication, a JSON array of values for additional parameters. Only one
additional parameter is currently allowed.
passwordActivationContextExpiry
For passowrd authentication, the password activation link expiry time. See User authentication and
password management on page 759 for more information.
samlAuthnContextComparison
For SAML/ADFS authentication, this must be set to one of the four comparison values (better, exact,
maximum and minimum). If no value is set or some random value is set, the value will automatically
default to the value minimum. See Configuring SAML/ADFS authentication details for a tenant on
page 893 for more information.
Permissions Required
Full administrative privileges.
Response
The authentication for the tenant in XML or JSON format.
setBinaryData
Purpose
Sets the binary data (file attachment) associated with a particular file field from a specific record.
HTTP Method
GET or POST
URL
https://www.rollbase.com/rest/api/setBinaryData
URL Parameters
id
Record's id.
fieldName
value
Value to be set. Must be formatted the same way as values in spreadsheet imports. For File Upload
fields: Base-64 encoded binary value of file.
contentType
For File Upload fields only: MIME content type of uploaded data .
fileName
For File Upload fields only: original name of file being uploaded.
output
Optional parameter specifying the output format, one of: xml (default) or json.
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
Permissions Required
Edit permission for the requested object type.
Response
Status message wrapped in XML
setDataField
Purpose
Sets the value of a single field for a specific record.
For external objects (such as those mapped to external tables, to OpenEdge Service objects, or through a D2C
connection), you must specify both the objName and id fields.
HTTP Method
GET or POST
URL
https://www.rollbase.com/rest/api/setDataField
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
id
fieldName
value
Value to be set. Must be formatted the same way as values in spreadsheet imports. For File Upload
fields: Base-64 encoded binary value of file.
contentType
For File Upload fields only: MIME content type of uploaded data.
fileName
For File Upload fields only: original name of file being uploaded.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Edit permission for the requested object type.
Response
Status message wrapped in XML
Example
Output example:
<?xml version="1.0" encoding="utf-8" ?>
<resp status="ok">
<Msg>Field "amount" has been updated</Msg>
</resp>
setPermissionsByRole
Purpose
Sets the permissions for the specified role on the specified entity and returns a status.
HTTP Method
POST
URL
https://www.rollbase.com/rest/api/setPermissionsByRole
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
roleId
entityType
The type of entity for which permissions should be set. Can be one of the following: field, object,
application, menu, view, action, report, chart.
entityId
permissions
A comma-separated list of the permissions to set for the entity. Can be any of the following values:
view, create, edit, delete, login. An empty value clears all permissions on the entity for that
role. To grant edit permission on an entity, you must also grant view permission. You can set
login only on a master tenant when entityType is object and entityId evaluates to Customer.
Note that when entityType is application, menu, view, action, report, or chart, the only
valid permission is view.
viewConditionScript
When granting conditional permission for view access, the condition formula as a base64-encoded
string. To grant conditional view permission, the permissions parameter must include view. This
parameter only applies to field-level permissions.
editConditionScript
When granting conditional permission for edit access, the condition formula as a base64-encoded
string. To grant conditional edit permission, the permissions parameter must include view and
edit. This parameter only applies to field-level permissions.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Full administrative privileges.
Response
The status in XML or JSON format.
Example
Output example in XML format:
<?xml version="1.0" encoding="UTF-8" ?>
<resp status="ok">
</resp>
setPermissionsByUser
Purpose
Sets the permissions for the specified user on the specified entity and returns a status. Throws an exception
if entityType is field, as user-based access control is not supported for fields.
HTTP Method
POST
URL
https://www.rollbase.com/rest/api/setPermissionsByUser
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
userId
entityType
The type of entity for which permissions should be set. Can be one of the following: object,
application, menu, view, action, report, chart.
entityId
permissions
A comma-separated list of the permissions to be give to the entity. Can be any of the following values:
view, create, edit, delete, login. An empty value clears all permissions on the entity for that
role. You can set login only on a master tenant when entityType is object and entityId
evaluates to Customer. Note that when entityType is application, menu, view, action,
report, or chart, the only valid permission is view.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Full administrative privileges.
Response
The status in XML or JSON format.
Example
Output example in XML format:
<?xml version="1.0" encoding="UTF-8" ?>
<resp status="ok">
</resp>
update
Purpose
Updates an existing data record and, optionally, related records from values passed in as an XML document.
Note: Do not use this method with PHP CURL. Instead use update2
HTTP Method
PUT or POST
URL
https://www.rollbase.com/rest/api/update
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
Request Body
XML document valid record ID, "useIds" attribute (true or false - same meaning as in the Web
API) and data Fields to be updated (see example below). You only need to include the Fields that
should be changed; Fields not included will remain unchanged.
Permissions Required
Edit permission for the requested object type.
Response
Standard success or failure output.
Example
Input example:
<?xml version="1.0" encoding="utf-8" ?>
<data objName="person" id="314452" useIds="false">
<Field name="club_member">false</Field>
<Field name="lastName">Smith</Field>
<Field name="status">Created</Field>
</data>
Output example:
<resp status="ok">
<Msg>12 fields have been processed.</Msg>
</resp>
Like create, update can be used to update several related records in one call. To do that, include a composite
XML node that wraps a set of data XML nodes with valid id attributes as described above. Records
corresponding to each "data" XML node are updated. These updated nodes will have a relationship with the
core record.
Consider this example with dependent nodes:
<?xml version="1.0" encoding="utf-8" ?>
<data objName="person" id="314452" useIds="false">
<Field name="club_member">false</Field>
<Field name="lastName">Smith</Field>
<Field name="status">Created</Field>
<composite>
<data objName="payment" id="314453" useIds="false">
<Field name="amount">500.00</Field>
<Field name="paym_date">09/12/2011</Field>
</data>
<data objName="payment" id="314454" useIds="false">
<Field name="amount">450.00</Field>
<Field name="paym_date">09/22/2011</Field>
</data>
</composite>
</data>
This XML updates one existing record and two related records in one call. Output example:
<resp status="ok">
<data id="314452"/>
<Msg>12 fields have been processed. 2 related records have been updated.</Msg>
</resp>
updateArr
Purpose
Updates a group of records using data from an XML document.
HTTP Method
POST
URL
https://www.rollbase.com/rest/api/updateArr
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
output
Optional parameter specifying the output format, one of: xml (default) or json.
Request Body
An XML document with valid id and useIds attributes (true or false) and data fields to be
updated, wrapped in <data> XML nodes (see example below). You only need to include the fields
to be changed; all fields not included will remain unchanged.
Required Permissions
Edit permission for the requested object types.
Response
Standard success or failure output.
Example
Input example:
<?xml version="1.0" encoding="utf-8" ?>
<request>
<data id="314452" useIds="false">
<Field name="club_member">true</Field>
</data>
<data id="314453" useIds="false">
<Field name="lastName">Gray</Field>
</data>
<request>
Output example:
<resp status="ok">
<Msg>2 records have been updated.</Msg>
</resp>
updateCustomer
Purpose
Updates a customer record using data from the URL parameters. For private cloud users, the user credentials
for the user making this request must stored on the Master server. The output parameter is optional.
HTTP Method
POST
URL
https://www.rollbase.com/rest/api/updateCustomer
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
id
useIds
Boolean value: if true, use numeric IDs for lookup and picklist values, otherwise use integration codes
and record names.
field1;[field2; ...]
Parameter's name - integration name of field to set; parameter's value - value of field to set. Same
for other fields.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Edit permission for the Customer type.
Response
None
Example
Single create input example:
id=8330&companyName=API+Test+2&timeZone=EST
updateRecord
Purpose
Updates an existing data record from URL parameters.
Provide the integration names of the fields to set along with their values. If a field is not found, the system will
ignore that URL parameter. Fields values must be formatted the same way as you would for a CVS import,
see Importing data on page 699.
HTTP Method
PUT or POST
URL
https://www.rollbase.com/rest/api/updateRecord
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
objName
useIds
Boolean value. If true, use numeric IDs for lookup and picklist values; otherwise use integration
codes and record names.
Integration name of the field(s) and their values. You must supply a value for required fields. Some
fields, such as those that represent relationships, can have multiple values. Use the field name only
once, and specify the ID of the records to attach separated with a | symbol.
output
Optional parameter specifying the output format, one of: xml (default) or json.
Permissions Required
Edit permission for the requested object type.
Response
Standard success or failure output.
Example
Input example (URL parameters):
&objName=person&id=314452&useIds=false&club_member=false&lastName=Smith&status=Created
update2
Warning: This method is deprecated. Please change any existing code to use updateRecord on page
1283, which takes an object ID as a parameter.
Purpose
Updates an existing data record from URL parameters.
HTTP Method
POST or PUT
URL
https://www.rollbase.com/rest/api/update2
URL Parameters
sessionId
The session ID obtained from the body of the response when calling login on page 1259.
id
useIds
Boolean value. If true, use numeric IDs for lookup and picklist values; otherwise use integration
codes and record names.
field1
Parameter’s name – URL-encoded integration name of field to set; parameter’s value – URL-encoded
value of field to set.
field2
Names of URL parameters used by this API are integration names of your fields. If a field is not found, the
system ignores the URL parameter and keeps the current field's value. Fields' values must be formatted the
same way as CSV imported values; for more information, see Importing Data.
Permissions Required
Edit permission for the requested object type.
Response
Standard success or failure output.
Example
Input example (URL parameters):
&id=314452&useIds=false&club_member=false&lastName=Smith&status=Created
Output example:
<resp status="ok">
<Msg>12 fields have been processed</Msg>
</resp>
view
Purpose
Warning: This method is deprecated.
Permissions
Most SOAP methods require the logged-in user to have the appropriate permission for the type of object used
in the method call. For example, calling the the create() method to create a Customer record requires the
logged-in user to have Create permission on the Customer object. The documentation for each method includes
the required permissions.
It is a good practice for SOAP clients to use credentials of users with the role Server API. Users with that role
cannot log into Rollbase as regular users.
See SOAP Metadata Methods on page 1190 for information about SOAP metadata methods.
Purpose
Container class for a complete record. You can use this class to pass a complete record with all of its fields to
a method. Methods that return a complete record return an instance of this class. Attribute names are
case-sensitive.
For Rollbase objects, you must include the id and objDefName. For external objects, you must include the
UID and objDefName.
Class Attributes
id
UID
A string containing the object ID for external objects, including objects mapped to OpenEdge Services.
objDefName
DataFieldArr
An array of DataField instances containing the values for the record's fields.
Example
See getRecord() on page 1313 for an example.
Purpose
Container class for a record's field. You can use this class to pass a field to a method. Methods that return a
field return an instance of this class. Field names are case-sensitive.
Class Attributes
name
value
Example
See create() on page 1292, getDataField() on page 1305, and setDataField() on page 1321 for examples.
SearchFilter Class
Purpose
Defines a single search filter for the detailedSearch() on page 1301 method's filterArr parameter. There can
be up to five SearchFilters per search, and they are passed to the method in an array.
Parameters
fieldName
opCode
Code of operation. The following codes are available. Not all codes are compatible with all fields;
the same rules apply as in the Detailed search on page 502 component.
• EQ equals
• NEQ not equal
• ST starts with
• CT contains
• NCT does not contain
• LT less than
• GT greater than
• LE less or equal
• GE greater or equal
• IN in array
• NIN not in array
• CH checked
• NCH unchecked
• INC including
• NINC not including
• NUL is null
• NNUL not null
• IS is
• TREE in sub-tree
• NTREE not in sub-tree
• FLAG flagged
• UFLAG unflagged
• VIEW viewed
• UVIEW unviewed
opValue
Example
SearchFilter[] filters = new SearchFilter[1];
SearchFilter filter = new SearchFilter();
filter.setFieldName("firstName");
filter.setOpCode("EQ");
filter.setOpValue("Smith");
filters[0] = filter;
bulkCreate()
Purpose
Creates new records using an existing import map and a supplied CSV string.
Syntax
bulkCreate(string sessionId, string mapId, boolean sync, string csvString);
Parameters
sessionId
mapId
sync
A boolean value: if true, do synchronous import and return IDs of created records; if false, do
asynchronous import.
csvString
Output
Comma-separated IDs of newly created records for synchronous import
Permissions Required
Create permission for the requested object types.
bulkCreateUpdate()
Purpose
Updates existing records or creates new ones using an existing import map and a supplied CSV string.
Syntax
bulkCreateUpdate(string sessionId, string mapId, [string
uniqueFieldId|uniqueCombinationId], boolean sync, string csvString);
Parameters
sessionId
mapId
uniqueFieldId
uniqueCombinationId
sync
A boolean value: if true, do synchronous import and return IDs of created records; if false, do
asynchronous import.
csvString
Output
Comma-separated IDs of updated records for synchronous update
Permissions Required
Edit permission for the object type of each requested record. Create permission for the object type of each
new record.
bulkUpdate()
Purpose
Updates existing records using an existing import map and a supplied CSV string.
Syntax
bulkUpdate(string sessionId, string mapId, [string
uniqueFieldId|uniqueCombinationId], boolean sync, string csvString);
Parameters
sessionId
mapId
uniqueFieldId
uniqueCombinationId
sync
A boolean value: if true, do synchronous import and return IDs of created records; if false, do
asynchronous import.
csvString
Output
Comma-separated IDs of updated records for synchronous update
Permissions Required
Edit permission for the requested object types.
clearDataObjectCache()
Purpose
Clears the cache of object data records from production servers. Progress recommends that you call this
method after heavy use of the SOAP API to perform updates.
Syntax
clearDataObjectCache(sessionId);
Parameters
sessionId
Output
None
Permissions Required
All metadata methods require administrative privileges, regardless of the view, edit, create and delete permissions
set on the application or object. Establish the session by logging in with credentials for an administrative user.
Example
Output example:
<resp status="ok">
<Msg>Cleared cache of object records</Msg>
</resp>
create()
Purpose
Creates a new record.
This method only works with native Rollbase objects. To create an external object record, see createRecord()
on page 1297
Syntax
create(string sessionId, string objDefName, DataFieldArr arr, boolean useIds);
Parameters
sessionId
objDefName
arr
A DataFieldArr array of values for fields of a newly created record. Record ID and auto-numbers
are assigned automatically.
useIds
A boolean value: if true, use numeric IDs for lookup and picklist values; otherwise, use integration
codes and record names.
Output
ID of newly created record as a long
Permissions Required
Create permission for the requested object type.
Example
// Populate data Fields to be set for new record
DataField[] Fields = new DataField[5];
DataField Field = new DataField();
Field.setName("firstName");
Field.setValue("John");
Fields[0]=Field;
Field.setName("lastName");
Field.setValue("Smith");
Fields[1]=Field;
createArr()
Purpose
For native Rollbase objects, this method creates an array of new object records. This API increments the hits
counter for each array element. This method and createArrNoAudit() each take an array of transport
Objects of type DataObj wrapped in a DataObjArr instance. This transport Object carries:
• Object name
• Record ID (for update only)
• Fields to be set
This is a convenient form for transporting data. Note that, this API is optimized for faster performance in cases
when related records must be resolved by name.
Note: For external objects (such as those mapped to external tables, to OpenEdge Service objects, or through
a D2C connection), you can use the method, createArr2() on page 1294.
Syntax
createArr(string sessionId, DataObjArr arr, boolean useIds);
Parameters
sessionId
arr
A DataObjArr array of DataObjs with data for new records. Record IDs and auto-numbers are
assigned automatically.
useIds
A boolean value: if true, use numeric IDs for lookup and picklist values; otherwise, use integration
codes and record names.
Output
Ids of newly created records as a LongArr
Required Permissions
Create permission for the requested object type.
Example
// Array of transport objects to be sent to createArr
DataObj[] arr = new DataObj[10];
Field.setValue("1000");
Fields[0]=Field;
// Create record 0
DataObj obj = new DataObj();
obj.setObjDefName("lead");
obj.setFields(Fields);
arr[0] = obj;
createArr2()
Purpose
For external objects (such as those mapped to external tables, to OpenEdge Service objects, or through a D2C
connection), creates an array of new object records. This API increments the hits counter for each array element.
This transport Object carries:
• Object name
• Record ID (for update only)
• Fields to be set
This is a convenient form for transporting data.
Note: createArr API is optimized for faster performance in cases when related records must be resolved by
name.
Note: For native Rollbase objects, you can use the method, createArr() on page 1293.
Syntax
createArr2(string sessionId, DataObjArr arr, boolean useIds);
Parameters
sessionId
arr
A DataObjArr array of DataObjs with data for new records. Record IDs and auto-numbers are
assigned automatically.
useIds
A boolean value: if true, use numeric IDs for lookup and picklist values; otherwise, use integration
codes and record names.
Output
Ids of newly created records as a StringArr
Required Permissions
Create permission for the requested object type.
Example
// Array of transport objects to be sent to createArr
DataObj[] arr = new DataObj[10];
// Create record 0
DataObj obj = new DataObj();
obj.setObjDefName("lead");
obj.setFields(Fields);
arr[0] = obj;
createArrNoAudit()
Purpose
Creates an array of new object records. This API increments the hits counter for each array element. This is
the same as createArr(), except that it blocks Audit records.
Syntax
createArrNoAudit(string sessionId, DataObjArr arr, boolean useIds);
Parameters
sessionId
arr
A DataObjArr array of DataObjs with data for new records. Record IDs and auto-numbers are
assigned automatically.
useIds
A boolean value: if true, use numeric IDs for lookup and picklist values; otherwise, use integration
codes and record names.
Output
Ids of newly created records as a LongArr
Required Permissions
Create permission for the requested object type.
createCustomer()
Purpose
Starts the process of creating a new customer tenant. A welcome email containing a temporary password is
sent to the first administrative user when the process is complete. If the password field is included in the list of
fields, as in the example below, its value is used as the password for the first administrative user. In this case,
the system does not send the welcome email to first administrative user and the password will not expire after
the first log in.
Syntax
createCustomer(string sessionId, DataFieldArr arr, boolean useIds);
Parameters
sessionId
arr
A DataFieldArr array of values for fields of a newly created record. Record ID and auto-numbers
are assigned automatically.
useIds
A boolean value: if true, use numeric IDs for lookup and picklist values; otherwise, use integration
codes and record names.
Output
ID of newly created Customer
Permissions Required
Create permission for the Customer object type
Example
DataField[] arr = new DataField[7];
arr[0] = getField("companyName", "API Test");
arr[1] = getField("email", "myemail@mycompany.com");
arr[2] = getField("lastName", "Admin");
arr[3] = getField("loginName", "myemail@mycompany.com");
arr[4] = getField("timeZone", "Pacific/Guam");
arr[5] = getField("mailSender", "noreply@mycompany.com");
arr[6] = getField("password", "my_password");
binding.createCustomer(sessionId, new DataFieldArr(arr), true);
createRecord()
Purpose
Similar to create() on page 1292, creates a new record. Returns the ID of the newly created record.
This method works with external objects (including those mapped to OpenEdge services) and native Rollbase
objects.
Syntax
createRecord(string sessionId, string objDefName, DataFieldArr arr, string useIds);
Parameters
sessionId
objDefName
arr
A DataFieldArr array of values for fields of a newly created record. Record ID and auto-numbers
are assigned automatically.
useIds
A boolean value: if true, use numeric IDs for lookup and picklist values; otherwise, use integration
codes and record names.
Output
The ID of the newly created record as a string.
Permissions Required
Create permission for the requested object type.
delete()
Purpose
Moves the specified record to the Recycle Bin. For users and Customers this API deletes records permanently.
This method only works with native Rollbase objects. To delete an external object record, see deleteRecord()
on page 1299.
Syntax
delete(string sessionId, long id);
Parameters
sessionId
id
Output
None
Permissions Required
Delete permission for the requested object type.
Example
long id = 123456;
binding.delete(sessionId, id);
deleteArr()
Purpose
For native Rollbase objects, this method moves the specified array of records to the Recycle Bin. This method
increments the hits counter for each array element.
Note: For external objects (such as those mapped to external tables, to OpenEdge Service objects, or through
a D2C connection), you can use the method, deleteRecords() on page 1300.
Syntax
deleteArr(string sessionId, LongArr ids);
Parameters
sessionId
ids
Output
None
Permissions Required
Delete permission for the requested object type.
Example
long[] ids = new long[] { 123456, 123457 };
binding.deleteArr(sessionId, new LongArr(ids));
deleteArrNoAudit()
Purpose
For native Rollbase objects, this method moves the specified array of records to the Recycle Bin. Similar to
deleteArr(), except deleteArrNoAudit() blocks Audit records. This method will increment the hits counter
for each array element.
Note: For external objects (such as those mapped to external tables, to OpenEdge Service objects, or through
a D2C connection), you can use the method, deleteRecords() on page 1300.
Syntax
deleteArrNoAudit(string sessionId, LongArr ids);
Parameters
sessionId
ids
Output
None
Permissions Required
Delete permission for the requested object type.
deleteRecord()
Purpose
Moves an object record to the recycle bin.
This method works with external object records (including those mapped to OpenEdge services) and native
Rollbase object records.
Syntax
deleteRecord(string sessionId, string objDefName, string uid);
Parameters
sessionId
objDefName
uid
Output
None.
Permissions Required
Delete permission for the requested object type.
deleteRecords()
Purpose
For external objects (such as those mapped to external tables, to OpenEdge Service objects, or through a D2C
connection), this method moves the specified array of records to the Recycle Bin. This method will increment
the hits counter for each array element.
Note: For native Rollbase objects, you can use the method, deleteArr() on page 1298 and deleteArrNoAudit()
on page 1299.
Syntax
deleteRecords(string sessionId, String objDefName, StringArr ids, Boolean
blockAudit);
Parameters
sessionId
objDefName
ids
blockAudit
Output
None
Permissions Required
Delete permission for the requested object type.
Example
Introduce example here.
detailedSearch()
Purpose
Performs a detailed search throughout the customer's Rollbase database. This is equivalent to the search
capabilities provided by the Detailed search on page 502 component.
Syntax
detailedSearch(string sessionId, string query, string objDefName, SearchFilterArr
filterArr, string joinType, string expression)
Parameters
sessionId
query
objDefName
String integration name for selected object definition. This parameter is optional and allows you to
narrow the search to a specified object.
filterArr
SearchFilterArr instance which wraps an array of SearchFilter instances. See SearchFilter Class
on page 1287 for more information.
joinType
Type of join between filters. Valid values are: AND (default), OR, or null (if expression is present)
expression
String SQL Expression that includes tokens for filters. Example: ((1 OR 2) AND 3)
Output
IDs of all records found in the search, returned as LongArr
Example
SearchFilter[] filters = new SearchFilter[1];
SearchFilter filter = new SearchFilter();
filter.setFieldName("firstName");
filter.setOpCode("EQ");
filter.setOpValue("Smith");
filters[0] = filter;
getBinaryData()
Purpose
Retrieves the file attachment associated with a particular file field from a specific record.
Syntax
getBinaryData(string sessionId, long id, string fieldName);
Parameters
sessionId
id
fieldName
Output
Binary data (file attachment) from specified file Field wrapped in a ByteArr
Permissions Required
View permission for the requested object type.
Example
long id = 123456;
ByteArr arr = binding.getBinaryData(sessionId, id, "picture");
if (arr != null {
byte[] data = arr.getArr();
}
getCodebyId()
Purpose
Retrieves the integration code of a picklist item or status by ID.
Note: This API only works when the ID is numeric. Therefore, Picklist(char) or Radio Button(char) are not
supported.
Syntax
getCodeById(string sessionId, string objDefName, string fieldName, long id);
Parameters
sessionId
objDefName
fieldName
id
Output
Integration code of item with matching ID or null
Example
String code = binding.getCodeById(sessionId, "lead", "type", 98765);
getCount()
Purpose
Retrieves the total number of records in a view (see Working with views on page 561 for more information about
views).
Syntax
getCount(string sessionId, string viewId, string filterName, string filterValue);
Parameters
sessionId
viewId
filterName
The name of the field to filter output using the equals option (will replace the filter set in the view,
if any).
filterValue
The value of the field to filter output using the equals option.
Output
Number of Records
Permissions Required
View permission for the requested object type.
Example
int count = binding.getCount("7ae747a0e36648ef8bd016eec1502779@46216462", "123",
"lastName", "Grey");
getIdByCode()
Purpose
Retrieves the ID of the pick item or status by integration code.
Note: This API only works when the ID is numeric. Therefore, Picklist(char) or Radio Button(char) are not
supported.
Syntax
getIdByCode(string sessionId, string objDefName, string fieldName, string code);
Parameters
sessionId
objDefName
fieldName
code
Output
ID of item with matching integration code or -1
Example
long id = binding.getIdByCode(sessionId, "lead", "type", "HOT");
getDataField()
Purpose
For native Rollbase objects, this method retrieves the value of a single field from a specific record.
Note: For external objects (such as those mapped to external tables, to OpenEdge Service objects, or through
a D2C connection), you can use the method, getDataField2() on page 1306.
Syntax
getDataField(string sessionId, long id, string fieldName, boolean useIds);
Parameters
sessionId
id
fieldName
useIds
A boolean value: if true, use numeric IDs for lookup and picklist values; otherwise, use integration
codes and record names.
Output
Field's value wrapped in a DataField container.
Permissions Required
View permission for the requested object type.
Example
long id = 123456;
DataField field = binding.getDataField(sessionId, id, "lastName", false);
if (field != null) {
String lastName = field.getValue();
}
getDataField2()
Purpose
For external objects (such as those mapped to external tables, to OpenEdge Service objects, or through a D2C
connection), this method retrieves the value of a single field from a specific record.
Note: For native Rollbase objects, you can use the method, getDataField() on page 1305.
Syntax
getDataField2(string sessionId, String objDefName, String uid, String fieldName,
Boolean useIds);
Parameters
sessionId
objDefName
uid
fieldName
useIds
A boolean value: if true, use numeric IDs for lookup and picklist values; otherwise, use integration
codes and record names.
Output
Field's value wrapped in a DataField container.
Permissions Required
View permission for the requested object type.
Example
DataField field = binding.getDataField2(sessionId, "client", "123456", "lastName", false);
if (field != null) {
String lastName = field.getValue();
}
getDataObj()
Purpose
Warning: This method is deprecated. Please change any existing code to use getRecord() on page
1313, which takes an object ID as a parameter.
Syntax
getDataObj(string sessionId, long id, boolean useIds);
Parameters
sessionId
id
useIds
A boolean value: if true, use numeric IDs for lookup and picklist values; otherwise, use integration
codes and record names.
Output
All of the field data for the specified object record. Each field value is wrapped in a DataField container.
Permissions Required
VIEW permission for requested record
Example
long id = 123456;
DataObj obj = binding.getDataObj(sessionId, id, true);
if (obj != null) {
DataField[] fields = obj.getFields();
}
getExchangeRate()
Purpose
Returns the exchange rate between two currencies on the given date.
Syntax
getExchangeRate(string sessionId, string srcCode, string destCode, Calendar date);
Parameters
sessionId
srcCode
destCode
date
Output
Exchange rate as decimal
Example
Calendar today = Calendar.getInstance();
today.setTime(new Date());
getPage()
Purpose
Retrieves a specified range of data records in a view. The selected view defines sorting and filtering of the
output. The amount of processing and time required to get complete results can vary widely, depending on
whether it fetches related records and the number of rows you specify per page.
Syntax
getPage(string sessionId, string viewId, string filterName, string filterValue,
int startRow, int rowsPerPage, boolean useIds);
Parameters
sessionId
viewId
filterName
The name of the field to filter output using the equals option (will replace the filter set in the view,
if any).
filterValue
The value of the field to filter output using the equals option.
startRow
rowsPerPage
useIds
A boolean value: if true, use numeric IDs for lookup and picklist values; otherwise, use integration
codes and record names.
Output
Selected records as DataObjArr
Permissions Required
View permission for the requested object type.
Example
DataObj[] arr = binding.getPage("7ae747a0e36648ef8bd016eec1502779@46216462", "25513", "
lastName", "Grey ", 0, 20, false).getObjects();
for (DataObj obj: arr) {
System.out.println("\nID="+obj.getId()+
" objName="+obj.getObjDefName());
DataField[] fields = obj.getFields();
for (DataField field: fields) {
System.out.println("Name="+field.getName()+
" Value="+field.getValue());
}
}
getRelatedIDs()
Purpose
Retrieves an array of related record IDs. Unlike getRelationships(), this API works with external objects,
including those based on OpenEdge services.
Syntax
getRelatedIDs(sessionId, objDefName, id, relName);
Parameters
sessionId
objDefName
id
relName
Output
A stringArr containing a list of related record IDs.
Permissions Required
View permission for the requested object types.
Example
The following example returns the IDs of the records related to the oeTest object through the R291855
relationship.
getRelationships()
Purpose
Retrieves an array of related record IDs.
Note: This method does not work for external objects. Use getRelatedIDs() on page 1310 for external objects,
including those mapped to OpenEdge services.
Syntax
getRelationships(string sessionId, long id, string relName);
Parameters
sessionId
id
relName
Output
IDs of related records wrapped in a LongArr
Permissions Required
View permission for the requested object types.
Example
long id = 123456;
LongArr arr = binding.getRelationships(sessionId, id, "R76543");
if (arr != null {
long[] ids = arr.getArr();
}
getRuntimeStatus()
Purpose
Retrieves the runtime status of the Customer on the Web API server.
Syntax
getRuntimeStatus(string sessionId, long id);
Parameters
sessionId
id
Output
Runtime status:
• RUNTIME_ERROR = -1;
• RUNTIME_UNLOADED = 1;
• RUNTIME_LOADED = 2;
• RUNTIME_LOADING = 3;
• RUNTIME_CREATING = 4;
• RUNTIME_BUSY = 5;
Permissions Required
View permission for the Customer type.
Example
int status = binding.getRuntimeStatus(sessionId, 123456);
getUpdated()
Purpose
Retrieves an array of record IDs of a specified object type that were either created or updated within the given
date/time interval. This method is not available for external objects, including those mapped to OpenEdge
service objects.
Syntax
getUpdated(string sessionId, Calendar from, Calandar till, string objDefName);
Parameters
sessionId
from
till
objDefName
Output
IDs of all records found in the search, returned as LongArr
Example
Calendar from = Calendar.getInstance();
from.setTime(...);
Calendar till = null;
getRecord()
Purpose
Retrieves all field data (including formulas) for a given record in XML format. This method works with external
objects, including those mapped to OpenEdge services.
Syntax
getRecord(string sessionId, string objDefName, string uid, boolean useIds);
Parameters
sessionId
objDefName
uid
useIds
A boolean value: if true, use numeric IDs for lookup and picklist values; otherwise, use integration
codes and record names.
Output
All of the field data for the specified object record. Each field value is wrapped in a DataField container. See
DataField Container Class on page 1287 for more information.
Permissions Required
View permission for the requested object type.
Example
if (obj != null) {
DataField[] fields = obj.getFields();
}
login()
Purpose
Performs a user log in and initiates a SOAP API session. Either this method or login2() (see below) must
be called prior to any other API call. The customer tenant to login is determined by the login name. The Web
API login creates a server-side session which might expire according to the security level set for the customer
tenant (see Security and Access Control for more information).
The API client should re-login if the session expires. Progress recommends that an API client logs out after
performing a group of operations instead of keeping the API session open for a long time. When an API client
logs in, all sessions with the same user credentials are terminated.
Subsequent API calls that use a session ID are considered to be made on behalf of the logged in user. That
user's permissions are checked for each subsequent call. For example, to update a record a logged in user
must have sufficient permissions or the API call will fail.
Syntax
login(string loginName, string password);
Parameters
loginName
password
Output
Session ID that must be used in all subsequent API calls during this session
login2()
Purpose
Performs regular user or super-admin login to the specified customer tenant and initiates a SOAP API session.
Unlike the login() method, the customer to login to is specified explicitly by ID. Master Server users with
super-admin login permissions can use login2() to call Web Service APIs on the specified customer tenant.
Syntax
login2(string loginName, string password, string custID);
Parameters
loginName
password
custID
Output
Session ID that must be used in all subsequent API calls during this session
logout()
Purpose
Terminates the specified API session. This method should be called to explicitly end each SOAP session.
Syntax
logout(string sessionID);
Parameters
sessionId
Output
None
Example
URL url = new URL("https://www.rollbase.com/webapi/services/rpcrouter");
binding.logout(sessionId);
resetPassword()
Purpose
Resets the password of the specified user.
Syntax
resetPassword(string sessionId, string loginName);
Parameters
sessionId
loginName
Login name for an active Rollbase user account in the same tenant
Output
None
Permissions Required
Requires administrative privileges. Establish the session by logging in with credentials for an administrative
user.
selectNumber()
Purpose
Runs an SQL SELECT query on the server and returns a single decimal value as the result. This is a simplified
version of selectQuery() and is suitable for calculations such as finding a sum of values.
The SELECT query used in this method consists of the following parts:
• The SELECT statement expects columns or expressions to be selected (mandatory). Use the field integration
names as SQL column names. You can use expressions such as COUNT(1). You cannot use * to retrieve
all columns.
• The FROM clause must consist of exactly one object name (mandatory).
• The WHERE clause can include a valid SQL expression to narrow the selection (optional). Use field integration
names as SQL column names.
• The ORDER BY clause can include a valid SQL expression to order the selection (optional). Use field
integration names as SQL column names.
You can use special tokens in your queries such as:
• TODAY for current time
• WEEK for 12PM of last Sunday
• MONTH for 12PM of 1st day of current month
Syntax
selectNumber(string sessionId, string query);
Parameters
sessionId
query
Output
Single result of the SELECT query as a decimal number
Permissions Required
View permission for the requested object type.
Example
Double total = binding.selectNumber(sessionId,
"SELECT SUM(amount) FROM customer WHERE name LIKE 'M%'");
selectQuery()
Purpose
Runs a SQL SELECT query on the server and returns the results as a 2D-array. Either the current user or the
API user must have View access for all records of the given type.
The selectQuery() method, as well as selectValue() and selectNumber(), use the same permissions
model as the server-side query API (see Adding Logic to an Application for more details).
Examples of valid queries on the User object (you can find more examples in Adding Logic to an Application):
SELECT id, name, updatedAt, updatedBy FROM USER WHERE name LIKE 'M%' ORDER BY name
The SELECT query used in this method consists of the following parts:
• The SELECT statement expects columns or expressions to be selected (mandatory). Use the field integration
names as SQL column names. You can use expressions such as COUNT(1). You cannot use * to retrieve
all columns.
• The FROM clause must consist of exactly one object name (mandatory).
• The WHERE clause can include a valid SQL expression to narrow the selection (optional). Use field integration
names as SQL column names.
• The ORDER BY clause can include a valid SQL expression to order the selection (optional). Use field
integration names as SQL column names.
You can use special tokens in your queries such as:
• TODAY for current time
• WEEK for 12PM of last Sunday
• MONTH for 12PM of 1st day of current month
• QUARTER for 12PM of 1st day of current quarter
• YEAR for 12PM of 1st day of current year
• CURR_USER for id of currently logged in user
Object and Field names are case-sensitive, while other components of the SQL query are not.
Use #code suffix to fetch integration codes for picklist fields rather than IDs. See Adding Logic to an Application
for more information.
Syntax
selectQuery(string sessionId, string query, int maxRows);
Parameters
sessionId
query
maxRows
An integer value representing the maximum number of rows to retrieve (can be configured per
Rollbase instance)
Output
SELECT query wrapped in a StringArr2D
Permissions Required
View permission for the requested object type.
Example
StringArr2D values = binding.selectQuery(sessionId, "SELECT loginName, firstName, lastName
FROM USER ORDER BY lastLogin DESC", 10);
selectValue()
Purpose
Runs an SQL SELECT query on the server and returns a single String value as the result.
The SELECT query used in this method consists of the following parts:
• The SELECT statement expects columns or expressions to be selected (mandatory). Use the field integration
names as SQL column names. You can use expressions such as COUNT(1). You cannot use * to retrieve
all columns.
• The FROM clause must consist of exactly one object name (mandatory).
• The WHERE clause can include a valid SQL expression to narrow the selection (optional). Use field integration
names as SQL column names.
• The ORDER BY clause can include a valid SQL expression to order the selection (optional). Use field
integration names as SQL column names.
You can use special tokens in your queries such as:
• TODAY for current time
• WEEK for 12PM of last Sunday
• MONTH for 12PM of 1st day of current month
• QUARTER for 12PM of 1st day of current quarter
• YEAR for 12PM of 1st day of current year
• CURR_USER for id of currently logged in user
Object and Field names are case-sensitive, while other components of the SQL query are not.
Use #code suffix to fetch integration codes for picklist fields rather than IDs. See Adding Logic to an Application
for more information.
Syntax
selectValue(string sessionId, string query);
Parameters
sessionId
query
Output
Single result of SELECT query as string
Permissions Required
View permission for the requested object type.
Example
// Login name of last login user (one value)
String loginName = binding.selectValue(sessionId,
"SELECT loginName FROM USER ORDER BY lastLogin DESC");
setBinaryData()
Purpose
Sets the binary data (file attachment) associated with a particular file field from a specific record.
Syntax
setBinaryData(string sessionId, long id, string fieldName, string contentType,
string suggestedFileName, ByteArr binData);
Parameters
sessionId
id
fieldName
contentType
text/html
text/plain
application/pdf
application/msword
application/excel
application/vnd.ms-powerpoint
application/wordperfect5.1
application/rtf
suggestedFileName
binData
Output
None
Permissions Required
Edit permission for the requested object type.
Example
// Read binary data
byte[] data;
long id = 123456;
setDataField()
Purpose
For native Rollbase objects, this method sets the value of a single Field for a specified record.
Note: For external objects (such as those mapped to external tables, to OpenEdge Service objects, or through
a D2C connection), you can use the method, setDataField2() on page 1322.
Syntax
setDataField(string sessionId, string id, DataField df, boolean useIds);
Parameters
sessionId
id
df
useIds
A boolean value: if true, use numeric IDs for lookup and picklist values; otherwise, use integration
codes and record names.
Output
None
Permissions Required
Edit permission for the requested object type.
Example
// Populate data Field to be set for existing record
DataField Field = new DataField();
Field.setName("R34567");
Field.setValue("100088,100089");
setDataField2()
Purpose
For external objects (such as those mapped to external tables, to OpenEdge Service objects, or through a D2C
connection), this method sets the value of a single Field for a specified record.
Note: For native Rollbase objects, you can use the method, setDataField() on page 1321.
Syntax
setDataField2(string sessionId, String objDefName, String uid, DataField df,
Boolean useIds);
Parameters
sessionId
objDefName
uid
df
useIds
A boolean value: if true, use numeric IDs for lookup and picklist values; otherwise, use integration
codes and record names.
Output
None
Permissions Required
Edit permission for the requested object type.
Example
// Populate data Field to be set for existing record
DataField Field = new DataField();
Field.setName("R34567");
Field.setValue("100088,100089");
setExchangeRate()
Purpose
Sets the exchange rate between two currencies on a given date.
Syntax
setExchangeRate(string sessionId, string srcCode, string destCode, Calendar date,
double rate);
Parameters
sessionId
srcCode
destCode
date
rate
Output
None
Permissions Required
Manage Exchange Rates permission for the logged-in user
Example
Calendar today = Calendar.getInstance();
today.setTime(new Date());
setRelationship()
Purpose
For native Rollbase objects, this method assigns an array of related records to the specified record.
Note: For external objects (such as those mapped to external tables, to OpenEdge Service objects, or through
a D2C connection), you can use the method, setRelatedIDs() on page 1325.
Syntax
setRelationship(string sessionId, long id, string relName, LongArr arr);
Parameters
sessionId
id
relName
arr
Output
None
Permissions Required
Edit permission for the requested object type.
Example
long id = 123456;
long[] arr = new long[] { 100890, 100891 };
setRelatedIDs()
Purpose
For external objects (such as those mapped to external tables, to OpenEdge Service objects, or through a D2C
connection), this method assigns an array of related records to the specified record.
Note: For native Rollbase objects, you can use the method, setRelationship() on page 1324.
Syntax
setRelatedIDs(string sessionId, String objDefName, String uid, String relName,
StringArr arr);
Parameters
sessionId
objDefName
uid
relName
arr
Output
None
Permissions Required
Edit permission for the requested object type.
Example
String[] arr = new String[] { "100890", "100891" };
textSearch()
Purpose
Performs a full-text search in the Rollbase database. The search query has the same syntax used in the
standard Rollbase interface. For more information about search syntax, see Views and Search.
Syntax
textSearch(string sessionId, string query, [string objDefName]);
Parameters
sessionId
query
Query for full-text search like "John Smith" (see Views and Search for more details)
objDefName
Integration name for selected object definition. This parameter is optional and allows you to narrow
the search to a specified object.
Output
IDs of all records found in the search, returned as LongArr
Example
LongArr arr = binding.textSearch(sessionId, "John Smith", "lead");
long[] ids = arr.getArr();
update()
Purpose
Updates an existing record.
This method only works with native Rollbase objects. To update an external object record, see updateRecord
on page 1330.
Syntax
update(string sessionId, long id, DataFieldArr arr, boolean useIds);
Parameters
sessionId
id
arr
A DataFieldArr array of values for fields of a newly created record. Record ID and auto-numbers
are assigned automatically.
useIds
A boolean value: if true, use numeric IDs for lookup and picklist values; otherwise, use integration
codes and record names.
Output
None
Permissions Required
Edit permission for the requested object type.
Example
// Populate data Fields to be updated for existing record
DataField[] Fields = new DataField[5];
DataField Field = new DataField();
Field.setName("R34567");
Field.setValue("100088,100089");
Fields[0]=Field;
updateArr()
Purpose
Updates array of existing Object records. Note that this method increments the API hits counter for each array
element.
Syntax
updateArr(string sessionId, DataObjArr arr, boolean useIds);
Parameters
sessionId
arr
An Array of DataObj instances with data for existing records. DataObj instances must include
valid record IDs.
useIds
A boolean value: if true, use numeric IDs for lookup and picklist values; otherwise, use integration
codes and record names.
Output
None
Permissions Required
Edit permission for the requested object type.
Example
// Array of transport objects to be sent to updateArr
DataObj[] arr = new DataObj[10];
// Update record 0
DataObj obj = new DataObj();
obj.setId(123456); // Required for update
obj.setObjDefName("lead");
obj.setFields(Fields);
arr[0] = obj;
updateArrNoAudit()
Purpose
Updates array of existing object records. This method is similar to updateArr, except that it blocks audit records.
This method will increment the API hits counter for each array element.
Syntax
updateArrNoAudit(string sessionId, DataObj arr);
Parameters
sessionId
arr
An Array of DataObj instances with data for existing records. DataObj instances must include
valid record IDs.
useIds
A boolean value: if true, use numeric IDs for lookup and picklist values; otherwise, use integration
codes and record names.
Output
None
Permissions Required
Edit permission for the requested object type.
updateCustomer()
Purpose
Updates a Customer record with the supplied values.
Syntax
updateCustomer(string sessionId, long id, arr, useIds);
Parameters
sessionId
id
arr
useIds
A boolean value: if true, use numeric IDs for lookup and picklist values; otherwise, use integration
codes and record names.
Output
None
Permissions Required
Edit permission for the Customer type.
Example
DataField[] arr = new DataField[1];
arr[0] = getField("companyName", "API Updated Test");
binding.updateCustomer(sessionId, 123456, new DataFieldArr(arr), true);
updateRecord
Purpose
Updates an existing record.
This method works with external objects (including those mapped to OpenEdge services) and native Rollbase
objects.
Syntax
updateRecord(string sessionId, string objDefName, string uid, DataFieldArr arr, boolean
useIds);
Parameters
sessionId
objDefName
uid
arr
A DataFieldArr array of values for fields of a newly created record. Record ID and auto-numbers
are assigned automatically.
useIds
A boolean value: if true, use numeric IDs for lookup and picklist values; otherwise, use integration
codes and record names.
Output
None.
Permissions Required
Edit permission for the requested object type.
Table Styles
The following classes define Rollbase table styles.
rbs_breadcrumbs Renders the table that has the setup breadcrumbs link
(print | Edit Page Layout)
rbs_editorFormTable Renders the form table in page editor for portal pages
rbs_fieldBottomColumn Renders a column that fills the entire row and has
bottom border (AssignPages.jsp)
rbs_mainContentTable Renders the table that has all the contents in a page,
sidebar and other contents
rbs_parentRow Renders a list Item that is a parent row for other items.
This row has the group name for the list Items. Other
styles that must inherit this style are td.listItemValue,
td. smallIcon, td.actonCol, td.groupSpacer,
td.checkbox, td.listItemNumberValue, td.summary,
td.totalSummary, td.rbs_listItemValueRight. these
define the individual styles of column within this row.
rbs_rowUnviewed Renders a row to render a list Item that has not been
viewed yet. Other styles that must inherit this style are
td.listItemValue, td. smallIcon, td.actonCol,
td.groupSpacer, td.checkbox, td.listItemNumberValue,
td.summary, td.totalSummary,
td.rbs_listItemValueRight. these define the individual
styles of column within this row.
rbs_whiteListItem Renders a white row to render a list Item that has not
been viewed yet. Other styles that must inherit this
style are td.listItemValue, td. smallIcon, td.actonCol,
td.groupSpacer, td.checkbox, td.listItemNumberValue,
td.summary, td.totalSummary,
td.rbs_listItemValueRight. these define the individual
styles of column within this row.
Text Styles
the following CSS classes define Rollbase text styles.
rbs_silverBold Renders the text in silver and bold and center. used
in rendering the relation type names
rbs_peloginTable Renders the mockup login table in page editor for login
pages
Link Styles
The following CSS classes define Rollbase link styles.
rbs_wideSectionLinks Renders links in a section and fills the entire row like
Edit Chart Link.
Sidebar Styles
The following CSS classes define Rollbase sidebar styles.
rbs_sidebarContent Renders the column that has the entire sidebar content
Field types
The topics in this section describe field types.
Text field
The Text field type can contain any combination of characters. You can optionally define the following properties:
• Default Size — The default size of the input field shown in forms (you can override this default as a page-level
property using the page editor)
• Length — The maximum allowed length (number of characters)
• This field allows storing multiple values for supported languages — Check if this field allows multiple
values for supported languages (for customers with more than one language assigned; see Language
support on page 815)
• Input Mask — Allows you to place restrictions on the type and format of data entered in the field. The input
mask is applied during input on new, edit, and quick create pages. The input mask can include:
Note: Input masks are not applied during inline editing on a record list page. Disabling inline editing for a
field with an input mask can prevent users from entering invalid data. See Advanced field properties on
page 1352 for information about enabling and disabling inline editing. See Inline editing on page 572 for
information about inline editing.
Note: The maximum allowed length cannot exceed 100 characters. However this limitation does not apply to
external databases. See Using external tables as Rollbase objects on page 692 for more information.
Checkbox Field
With the Checkbox Field type, users can select a Checked (true) or Unchecked (false) value. When creating
a Checkbox Field, you specify:
Decimal field
With the Decimal field type, users can enter any number with decimals. You can optionally define the following
properties:
Currency field
With the Currency field type, users can enter a dollar or other currency amount. You can optionally define the
following properties:
• Currency Format (this setting will only affect formatting of the field). See Currency formats on page 807 for
supported currency formats.
• Default value for new records.
• Minimum allowed value for this field.
• Maximum allowed value for this field.
Note: On Edit pages, Rollbase adds an HTML DOM handler to automatically format the value of a Currency
field (according to the selected format) when an input field loses focus.
When you create a new Currency field for objects that support the multi-currency attribute, you can optionally
create a counterpart Base Currency field that will transfer the foreign currency amount into the currency of your
bookkeeping.
Note: Due to database limitations, Currency and Decimal fields cannot hold values larger than
100,000,000,000.0
• The Currency Field that holds the original amount in foreign currency.
• The Base Currency to transfer to (typically currency of your bookkeeping).
See Multi-currency support on page 477 for more info on multi-currency support in Rollbase.
Date Field
With the Date Field type, users can enter a date or pick a date from a calendar popup. You can optionally
define the following properties:
• Whether you want to us the date format or long date format on application pages. See Configuring Date
and Date/Time field formats on page 306 for more information.
• Whether you want to use the current date, or the current date plus or minus several days, as the default
creation date for new records.
• Whether you want to use the current date, or the current date plus or minus several days, as the default
update date for changed records.
Date/Time field
With the Date/Time field, users can enter a date and a time, or pick a date from a calendar popup. When the
user selects a date from the calendar popup, Rollbase enters that date and the current time into the Date/Time
field.
When you create a date/time field, you can specify whether you want to format the value as full text or as an
abbreviation and whether you want the field to be automatically populated in specified situations. See Configuring
Date and Date/Time field formats on page 306 for more information.
Time field
With the Time field type, users can enter the time (hours and minutes). This field does not provide any
type-specific settings. Time fields are formatted on application pages according to the time format selected for
a user on the My Localization Settings page on page 793.
Email Field
With the Email Field type, users can enter an email address that is server-side validated to ensure it is in a
valid email format.
You can optionally define a maximum length for the email address.
Password Field
With the Password Field type, users can enter and securely store passwords for authentication of Portal Users
or for any other purpose, such as integration with third-party systems. You can optionally define the following
properties:
Integer field
With the Integer field type, users can enter any number (without decimals). This field offers the same settings
(min value, max value, default value) as other numeric input fields.
See Configuring Integer and Decimal field formats on page 306 for information about formatting Integer fields.
Percent Field
With the Percent Field type, users can enter a percentage (number including decimals) and a % sign is
automatically added. You can optionally define a maximum number of decimal places.
Picklist Field
The Picklist field type allows users to select a value from a list you define. Several other field types (multi-select
picklists, radio buttons and group of checkboxes) have a similar configuration.
Creating a picklist
First, define a list of values, one value per line, for the picklist. Each value represents a selectable item. The
length of a picklist value cannot exceed 100 characters. If you want a particular value to be selected by default
for new records, prefix it with {D}. Optionally, at the end of each line, add | followed by an integration name for
that value (no longer than 40 characters). Formulas and APIs can use this integration name to access unique
picklist values (e.g., for data import and export).
Example: In the following list of picklist values, each value is assigned an integration name and Yes is the
default value:
You can also choose whether to display values sorted alphabetically (the default) or in the order the values
were entered.
Sharing a picklist
In some situations, you might want picklists belonging to different objects to have the same set of values.
Rollbase allows you to share picklists among those objects. To share a picklist, select Share as New from the
Shared As drop-down when you create the picklist.
To use values from an existing shared picklist, select the integration name of the shared picklist from the Shared
As drop-down when you create the picklist. The content of the Values box is replaced with existing values
from the selected shared picklist.
Editing picklists
The following rules and behaviors apply when editing picklists:
• You cannot change the integration name of a shared picklist. All picklists that share the same values have
the same integration name.
• Changing the text value of a picklist item destroys the modified item and creates a new item. Existing records
will lose their assigned values. If you just want to change the text of a picklist item, use the Replace
functionality as described in Replacing a picklist value on page 309.
• If you delete the text value of a picklist item, existing records will lose their assigned values.
• Shared picklists share the same text values for their picklist items. If you delete the text value from one
shared picklist, that value is deleted from all of the picklists that share with it.
Picklist Multiselect
With the Picklist (Multi-Select) Field type, users can select any number of values from a list of values you define.
You define Multi-select picklists in the same way as single-select picklists, with two additional optional capabilities:
• You can mark more than one value as a default value with the {D} prefix.
• You can choose a height (in rows) to determine the number of values visible at any given time. If more than
one value is visible the user can use the CTRL key plus their mouse to select multiple items.
URL Field
With the URL Field type, Users can enter any website address and the URL is displayed as an HTML link. The
content of that link will be displayed in a new browser window.
Tip: You can specify "Link Text" to be used as the text representation of this URL. If link text is not specified
the URL itself (possibly truncated with ellipses) will be used.
Auto-Number Field
The Auto-Number Field type is an automatically generated sequential number or code that uses a display
format you define. This number is incremented for each new record created. An Auto-number format may also
include year, month and day. When you create an auto-number Field you can specify:
• A display format (mandatory) defined by a template. Syntax and examples are presented inline while creating
the Field.
• A starting number (mandatory) for the sequence number portion.
• An option allowing you to assign auto-numbers to all existing Object records once this Field is created or
updated.
• By default Auto-Number Fields do not allow duplicate values.
Note: Every time you request for a new record creation through UI, the auto-number is incremented.
However, if you remove the auto-number field from the Create page, it will be incremented only when a new
record is saved.
Note: When editing a File Upload or Image Upload file that holds a previously uploaded file, you have an
option to delete that file. This action cannot be undone, even if you cancel the entire record edit operation.
Image Upload and Shared Image fields are responsive by default. Responsive image fields change size to fit
the current screen size. You can specify that an image field is not responsive on a particular page; see
Responsive user interface on page 555 for details.
When an object definition contains multiple Image Upload fields, Rollbase groups the images into an image
carousel. The carousel is rendered where the first image field is located on the page. The width of the carousel
is based on the width of the cell in which the carousel is placed. By default, the height of the carousel is based
on the first image's proportions.
A carousel is responsive to the cell in which it is rendered on the page, keeping the proportions of the image.
It is responsive even if the images are not responsive. See Responsive user interface on page 555 for information
about configuring image responsiveness and maximum width.
Note: Use shared images throughout your apps for icons and logos to enhance the presentation and user
experience.
Shared Image and Image Upload fields are responsive by default. Responsive image fields change size to fit
the current screen size. You can specify that an image field is not responsive on a particular page; see
Responsive user interface on page 555 for details.
Formula Field
Formula field values are calculated from a formula and are automatically updated when any fields used in the
formula expression change value. You write formula field expressions in JavaScript. Rollbase executes them
to compute a dynamic output that can be displayed on the screen, and can be used by other components.
Formula fields can be displayed in views, see Views on page 312, but cannot be used for sorting, totaling, and
filtering of records in Views. Use an expression field instead to sort, total or filter. Formula fields execute
immediately when you create them and upon any update to the values to which they refer, while expression
fields only execute after an update operation.
In addition to fields that specify the label and appearance in views and reports, the New Field screen for a
formula field includes:
• The return type, which can be Decimal, Currency, Integer, String, Boolean, or Date.
• The currency format (only for fields with a Currency return type).
• The number of decimal places (only for fields with Decimal return type).
• An optional checkbox for hiding the display label of the field on UI Pages.
• The Formula Editor for defining the JavaScript expression. You can use merge fields from the current
object record and related records to return a dynamically computed value. This value can be numeric or
strings. Strings can consist of plain text, rich HTML, or JavaScript code that will be executed on the client's
browser. For more information about formulas, including examples, see Formulas on page 373.
Keep the following in mind when working with formula fields:
• To define loops, you can use the LOOP_BEGIN and LOOP_END tokens, as described in Iterating through
records on page 362. However, this technique should only be used for a small number of related records.
Looping through a large set of records using these tokens can degrade performance. It is better to use a
pre-defined function or the Rollbase Query API to obtain the required record. See the list of methods available
in the Query API on page 990.
• All merge tokens are replaced with the exact contents of the corresponding field's value before the formula
logic is executed. For example, a text field included by a token {!myTextField} with a value of Hello
World will be used as is without the quotes around it. Always remember to use quotes around any value
where JavaScript requires them.
• To use dates:
• In a formula: create a JavaScript Date instance by providing the merge token with quotes around it as
the parameter:
var myDate = new Date("{!myDateField}");
• As the return type of a formula: return the full value of the JavaScript getTime() method. For example:
return myDate.getTime();
• When using images and shared images in formulas, wrap them in quotes to avoid errors. For example, the
following formula returns a different starred image (representing a star rating from 1 to 5) based on a picklist
value. In this example, the tokens {!star0} through {!star5} refer to hosted images and {!rating}
refers to a picklist:
if ({!rating}==106469)
return "{!star1}";
else if ({!rating}==106470)
return "{!star2}";
else if ({!rating}==106471)
return "{!star3}";
else if ({!rating}==106472)
return "{!star4}";
else if ({!rating}==106473)
return "{!star5}";
else
return "{!star0}";
Expression Field
Expression fields are similar to formula fields. Unlike formula fields, expression fields can be used for sorting,
totaling, and filtering of records in views. Expression field values are updated when a record is updated, while
formula field values update dynamically with any change.
Expression fields have the following limitations:
• The JavaScript code for expression fields cannot include loops and references to related records. However,
you can use the server-side API to query an expression field.
• The expression field value will not be updated when related records are updated.
• Expression field values are updated when the containing record is updated — not when the record is viewed.
• The data type of an expression field cannot be changed.
• Unlike formula fields, expression fields are stored in the database, so they are subject to limitations on the
number of columns per object.
Template Field
A Template Field type is a non-editable Field that is automatically populated from a template expression you
define. When you define a template Field, you can use merge Fields and HTML markup from the current Object
record and any related records.
Tip: Template Fields (with a hidden display label) can be a good way to add client-side JavaScript to your
Application and Portal Pages.
Related Field
The Related Field type enables access to the value of a Field from a related Object. Related Fields allow you
to display and use Fields from related Objects. Before you can use a Field from another Object, you must
establish an N-to-1 or 1-to-1 Relationship from the current Object to the related Object.
When creating a related Field, select the appropriate related Object and then select the desired Field as shown
below:
Related Fields can be used to edit data of related Record if the following conditions are met:
For each value of the main picklist, you can enter a comma-separated list of available values as shown below.
A typical example of a dependent picklist is a list of States or Provinces that depends on the selection of a
Country picklist. Once the selection in the Country picklist changes, Rollbase will automatically update the
available list of states.
Limitation: Each value in a dependent picklist may belong to only one value from the main picklist. If you need
to re-use values in dependent picklists because one or more values needs to be associated with more than
one value from the main picklist, you should instead create new Object definitions and use a lookup Field
dependency. See the Relationships section below for more information regarding configuring relationship
Lookup Fields to use Main and Link lookups to dynamically filter available selection choices.
Reference Field
With the Reference Field type, Users can reference any object record (typically parent) from current record
(typically child). When creating this field select group of object which can be referenced. At run time User can
select referenced Object type from drop-down list, then select actual record the same way as in Lookup field
(by type-ahead or from pop-up window).
• Index this field as part of the text search engine — This setting is available on text, numeric and date
fields, as well as on file uploads. If enabled, this field will be indexed and added to the global search engine
whenever a record is created and updated. Users will then be able to perform global and object-specific
searches on this field (field-specific searches in filters, etc., do not require enabling this property). If an
object definition does not have this option enabled for any field:
1. On the object definition page, Text Index Enabled is deselected.
2. The object is not listed in global search drop-down list. See Search on page 44 for more information
about global searches.
3. The Search box is not displayed on selector pages.
4. The Keywords box is not displayed on search pages
• Track all changes to this field in each record's Audit Trail for a complete historical log — Enabling
this property automatically adds a record-level audit trail entry whenever the field is updated, showing the
value of the field before and after the update, as well as the user that performed the update and the date
and time the update occurred. This option is only available if the parent object has Audit Trail Enabled
checked. See Auditing on page 338. for more information on auditing.
• Store uploaded files in an encrypted format. — This setting is only available for File Upload and Text
fields. After applying this setting, you cannot undo it.
Uploaded files are stored in encrypted format for added security and to meet compliance requirements. In
views, encrypted fields cannot be used for sorting.
• Always require a value in this field in order to save a record — This is a global setting specifying whether
this field is always required in form pages (such as New and Edit). If this property is enabled, it is not possible
to make this field non-required at the page level using the page editor.
• Do not allow duplicate values in this field — This setting is only available for text-based fields (including
auto-number). If set, it enforces uniqueness of this field's value across all records of that object type.
• This field allows inline editing from view pages by clicking on icon — When checked, users can edit
this field on record view pages by clicking the pencil icon.
• Allow filtering by this field in List Views — When checked (the default), this field will appear in the
drop-down list when filtering a view. When unchecked, this field will not appear in the drop-down list.
Users can click the comment icon above the Comments table to add a new comment.
You can use Comments fields in templates and formulas. When doing so, the Comments field's value is the
text of the most recently created comment.
Tag Field
This field displays search tags assigned for a particular record by different users.
IP Address Field
The IP Address Field type provides a convenient way to capture, store and resolve the IP address of Portal
users. This Field is particularly useful in Portals that require authentication and allow self-registration, see
Rollbase portals on page 594. This Field will also resolve to display the country code of the IP address, allowing
you to receive real information about the source of each of your requests.
• For help with getting started on Rollbase, see the videos posted on:
https://www.progress.com/video?product=progress-rollbase.
• For How-To-Videos on Rollbase, visit https://www.progress.com/video/how-to?product=progress-rollbase.
• For help with technical issues, see The Progress Technical Users Community Forum:
https://community.progress.com/community_groups/rollbase/.
• For knowledge base articles, visit http://knowledgebase.progress.com and select Rollbase as the Product
Group.
• For customer service, billing, and licensing questions, visit https://www.progress.com/company/contact.
• For Tutorial and quick learning, visit the Quick Start Tutorial page
https://documentation.progress.com/output/rb/tutorial-qs/index.html#page/rollbasetutorial%2Fwelcome-to-the-quick-start-tutorial!.html%23.
The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are
not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed
and/or sold with any software provided that any reserved names are not used by derivative works. The fonts
and derivatives, however, cannot be released under any other type of license. The requirement for fonts to
remain under this license does not apply to any document created using the fonts or their derivatives.
Progress Rollbase Public Cloud v4.5 incorporates Exchange Integration v2.0. Such technology is subject to
the following terms and conditions:
The MIT License
Copyright (c) 2012 Microsoft Corporation
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of
the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Progress Rollbase Public Cloud v4.5 incorporates jquery.min.js v1.7.1. Such technology is subject to the
following terms and conditions:
Copyright (c) 2011 John Resig, http://jquery.com/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of
the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Progress Rollbase Public Cloud v4.5 incorporates icu4j v54.1.1. Such technology is subject to the following
terms and conditions: ICU License - ICU 1.8.1 and later - COPYRIGHT AND PERMISSION NOTICE
Copyright (c) 1995-2014 International Business Machines Corporation and others. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Software, and to permit persons
to whom the Software is furnished to do so, provided that the above copyright notice(s) and this permission
notice appear in all copies of the Software and that both the above copyright notice(s) and this permission
notice appear in supporting documentation.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL
THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR
ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
OF THIS SOFTWARE.
Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise
to promote the sale, use or other dealings in this Software without prior written authorization of the copyright
holder.
All trademarks and registered trademarks mentioned herein are the property of their respective owners.
Third-Party Software Licenses
This section contains third-party software notices and/or additional terms for licensed third-party software
components included within ICU libraries.
1. Unicode Data Files and Software
COPYRIGHT AND PERMISSION NOTICE
Copyright © 1991-2014 Unicode, Inc. All rights reserved.
Distributed under the Terms of Use in
http://www.unicode.org/copyright.html
Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and any
associated documentation (the "Data Files") or Unicode software and any associated documentation (the
"Software") to deal in the Data Files or Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, and/or sell copies of the Data Files or Software, and to permit
persons to whom the Data Files or Software are furnished to do so, provided that (a) this copyright and permission
notice appear with all copies of the Data Files or Software, (b) this copyright and permission notice appear in
associated documentation, and (c) there is clear notice in each modified Data File or in the Software as well
as in the documentation associated with the Data File(s) or Software that the data or software has been modified.
THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD
PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE.
Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise
to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of
the copyright holder.
2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt)
The Google Chrome software developed by Google is licensed under the BSD license. Other software included
in this distribution is provided under other licenses, as set forth below.
The BSD License
http://opensource.org/licenses/bsd-license.php
Copyright (C) 2006-2008, Google Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The word list in cjdict.txt are generated by combining three word lists listed below with further processing for
compound word breaking. The frequency is generated with an iterative training against Google web corpora.
Libtabe (Chinese)
- https://sourceforge.net/project/?group_id=1519
- Its license terms and conditions are shown below.
IPADIC (Japanese)
- http://chasen.aist-nara.ac.jp/chasen/distribution.html
- Its license terms and conditions are shown below.
---------COPYING.libtabe ---- BEGIN--------------------/*
Copyright (c) 1999 TaBE Project. Copyright (c) 1999 Pai-Hsiang Hsiao. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the distribution.
. Neither the name of the TaBE Project nor the names of its contributors may be used to endorse or promote
products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Copyright (c) 1999 Computer Systems and Communication Lab,
Institute of Information Science, Academia Sinica.
Therefore, neither ICOT, the copyright holder, or any other organization that participated in or was otherwise
related to the development of the program and their respective officials, directors, officers and other employees
shall be held liable for any and all damages, including, without limitation, general, special, incidental and
consequential damages, arising out of or otherwise in connection with the use or inability to use the program
or any product, material or result produced or otherwise obtained by using the program, regardless of whether
they have been advised of, or otherwise had knowledge of, the possibility of such damages at any time during
the project or thereafter. Each user will be deemed to have agreed to the foregoing by his or her commencement
of use of the program. The term "use" as used herein includes, but is not limited to, the use, modification,
copying and distribution of the program and the production of secondary products from the program.
In the case where the program, whether in its original form or modified, was distributed or delivered to or
received by a user from any person, organization or entity other than ICOT, unless it makes or grants
independently of ICOT any specific warranty to the user in writing, such person, organization or entity, will also
be exempted from and not be held liable to the user for any such damages as noted above as far as the program
is concerned.
---------------COPYING.ipadic-----END--------------------------------
3. Lao Word Break Dictionary Data (laodict.txt)
Copyright (c) 2013 International Business Machines Corporation and others. All Rights Reserved.
Project: http://code.google.com/p/lao-dictionary/
Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt
License: http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt (copied below)
This file is derived from the above dictionary, with slight modifications.
---------------------------------------------------------------------Copyright (C) 2013 Brian Eugene Wilson, Robert Martin
Campbell.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------
4. Burmese Word Break Dictionary Data (burmesedict.txt)
Copyright (c) 2014 International Business Machines Corporation and others. All Rights Reserved.
This list is part of a project hosted at:
github.com/kanyawtech/myanmar-karen-word-lists
--------------------------------------------------------------------- Copyright (c) 2013, LeRoy Benjamin Sharon
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name Myanmar Karen Word Lists, nor the names of its contributors may be used to endorse or
promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------
5. Time Zone Database
ICU uses the public domain data and code derived from Time Zone Database for its Time Zone Database
support. The ownership of the TZ database is explained in BCP 175: Procedure for Maintaining the Time Zone
Database section 7.
7. Database Ownership
The TZ database itself is not an IETF Contribution or an IETF document. Rather it is a pre-existing and regularly
updated work that is in the public domain, and is intended to remain in the public domain. Therefore, BCPs 78
[RFC5378] and 79 [RFC3979] do not apply to the TZ Database or contributions that individuals make to it.
Should any claims be made and substantiated against the TZ Database, the organization that is providing the
IANA Considerations defined in this RFC, under the memorandum of understanding with the IETF, currently
ICANN, may act in accordance with all competent court orders. No ownership claims will be made by ICANN
or the IETF Trust on the database or the code. Any person making a contribution to the database or code
waives all rights to future claims in that contribution or in the TZ Database.
Progress Rollbase Public Cloud v4.5 incorporates Java Cryptography APIs v1.54. Such technology is subject
to the following terms and conditions: Copyright (c) 2000 - 2015 The Legion of the Bouncy Castle Inc.
(http://www.bouncycastle.org)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of
the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Progress Rollbase Public Cloud v4.5 incorporates JQuery Mobile Framework v1.0.1 (including i.JQuery
hashchange event v1.3). Such technology is subject to the following terms and conditions:
Progress Rollbase Public Cloud v4.5 incorporates qTip v2.2. Such technology is subject to the following terms
and conditions: Copyright (c) 2012 Craig Michael Thompson - Permission is hereby granted, free of charge,
to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of
the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Progress Rollbase Public Cloud v4.5 incorporates CodeMirror v5.16. Such technology is subject to the following
terms and conditions:
Copyright (C) 2016 by Marijn Haverbeke <marijnh@gmail.com> and others
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of
the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Progress Rollbase Public Cloud v4.5 incorporates Bootstrap Responsive v3.3.6. Such technology is subject
to the following terms and conditions: The MIT License (MIT)
Copyright (c) 2011-2016 Twitter, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of
the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Progress Rollbase Public Cloud v4.5 incorporates Font-Awesome Code v4.6.3. Such technology is subject to
the following terms and conditions: Font-Awesome Fonts v4.5. Such technology is subject to the following
terms and conditions Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome
"Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole --
any of the components of the Original Version, by changing formats or by porting the Font Software to a new
environment.
"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the
Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use,
study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software,
subject to the following conditions:
1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be
sold by itself.
2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any
software, provided that each copy contains the above copyright notice and this license. These can be included
either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata
fields within text or binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction
only applies to the primary font name as presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the
contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.
5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license,
and must not be distributed under any other license. The requirement for fonts to remain under this license
does not apply to any document created using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR
A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR
OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES
OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR
CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS
IN THE FONT SOFTWARE.
Progress Rollbase Public Cloud v4.5 incorporates Bootstrap-rtl v3.3.6. Such technology is subject to the
following terms and conditions:
The MIT License (MIT)
Copyright (c) 2011-2016 Twitter, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of
the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Progress Rollbase Public Cloud v4.5 incorporates Mockito Mock Library for Java v1.10.9. This technology is
subject to the following terms and conditions:
The MIT License
Copyright (c) 2007 Mockito contributors
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of
the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
PSC will, at Licensee’s request, provide a copy of the source code for the following third-party technologies,
including modifications, if any, made by PSC. PSC may charge reasonable shipping and handling charges for
such distribution. Licensee may also obtain the source code/license for this third-party technology through
http://iue.progress.com/3dpartysoftwares/Pages/default.aspx by following the instructions set forth therein.
- Progress Rollbase Public Cloud v4.5 incorporates Mozilla JS v1.7R4. The Original Code is Rhino code,
released May 6, 1999. The Initial Developer of the Original Code is Netscape Communications Corporation.
Portions created by the Initial Developer are Copyright (C) 1997-1999 the Initial Developer. All Rights Reserved.
Such technology is subject to the terms and conditions of the Mozilla Public License, Version 2.0.
- Progress Rollbase Public Cloud v4.5 incorporates JavaMail v1.5.2, jax-rpc v1.1, and JavaBeans Activation
Framework (JAF) v1.0.2. Such technologies are subject to the terms and conditions of the Common Development
and Distribution License, Version 1.0.
- Progress Rollbase Public Cloud v4.5 incorporates servlet-api.jar v3.0, Java API for Processing JSON (Default
provider) v1.0.4, and Java API for Processing JSON (API module) v1.0. Such technology is subject to the terms
and conditions of the Common Development and Distribution License, Version 1.1.
Updated 2/1//2018
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other materials provided with the distribution.
3. The end-user documentation included with the redistribution, if any, must include the following
acknowlegement:
"This product includes software developed by the Apache Software Foundation (http://www.apache.org/)."
Alternately, this acknowlegement may appear in the software itself, if and wherever such third-party
acknowlegements normally appear.
4. The names "The Jakarta Project", "Commons", and "Apache Software Foundation" must not be used to
endorse or promote products derived from this software without prior written permission. For written permission,
please contact apache@apache.org.
5. Products derived from this software may not be called "Apache" nor may "Apache" appear in their names
without prior written permission of the Apache Group.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING,
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION
OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
====================================================================
This software consists of voluntary contributions made by many individuals on behalf of the Apache Software
Foundation. For more information on the Apache Software Foundation, please see <http://www.apache.org/>.
Progress Rollbase Private Cloud v4.5 incorporates ESAPI v2.1.0. Such technology is subject to the following
terms and conditions: The BSD License
Copyright (c) 2007, The OWASP Foundation All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of the OWASP Foundation nor the names of its contributors may be used to endorse or
promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Progress Rollbase Private Cloud v4.5 incorporates Jaxen-1.1.jar v1.1. Such technology is subject to the following
terms and conditions:
Copyright 2003-2006 The Werken Company. All Rights Reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of the Jaxen Project nor the names of its contributors may be used to endorse or promote
products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Progress Rollbase Private Cloud v4.5 incorporates Jdom.jar v1.0. Such technology is subject to the following
terms and conditions: Copyright (C) 2000-2004 Jason Hunter & Brett McLaughlin. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions, and the following
disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions, and the
disclaimer that follows these conditions in the documentation and/or other materials provided with the distribution.
3. The name "JDOM" must not be used to endorse or promote products derived from this software without prior
written permission. For written permission, please contact <request_AT_jdom_DOT_org>.
4. Products derived from this software may not be called "JDOM", nor may "JDOM" appear in their name,
without prior written permission from the JDOM Project Management <request_AT_jdom_DOT_org>.
In addition, we request (but do not require) that you include in the end-user documentation provided with the
redistribution and/or in the software itself an acknowledgement equivalent to the following:
"This product includes software developed by the JDOM Project (http://www.jdom.org/)."
Alternatively, the acknowledgment may be graphical using the logos available at
http://www.jdom.org/images/logos.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING,
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE JDOM AUTHORS OR THE PROJECT
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
This software consists of voluntary contributions made by many individuals on behalf of the JDOM Project and
was originally created by Jason Hunter <jhunter_AT_jdom_DOT_org> and Brett McLaughlin
<brett_AT_jdom_DOT_org>. For more information on the JDOM Project, please see <http://www.jdom.org/>.
Progress Rollbase Private Cloud v4.5 incorporates lsimplecaptcha.jar v1.2.1. Such technology is subject to
the following terms and conditions: Copyright (c) 2008, James Childers All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
o Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
o Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other materials provided with the distribution.
o Neither the name of SimpleCaptcha nor the names of its contributors may be used to endorse or promote
products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Progress Rollbase Private Cloud v4.5 incorporates Apache dom4j v1.6.1. Such technology is subject to the
following terms and conditions: Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved. Redistribution
and use of this software and associated documentation ("Software"), with or without modification, are permitted
provided that the following conditions are met:
1. Redistributions of source code must retain copyright statements and notices. Redistributions must also
contain a copy of this document.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other materials provided with the distribution.
3. The name "DOM4J" must not be used to endorse or promote products derived from this Software without
prior written permission of MetaStuff, Ltd. For written permission, please contact dom4j-info@metastuff.com.
4. Products derived from this Software may not be called "DOM4J" nor may "DOM4J" appear in their names
without prior written permission of MetaStuff, Ltd. DOM4J is a registered trademark of MetaStuff, Ltd.
5. Due credit should be given to the DOM4J Project - http://www.dom4j.org
THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND ANY
EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Progress Rollbase Private Cloud v4.5 incorporates icu4j v54.1.1. Such technology is subject to the following
terms and conditions:
ICU License - ICU 1.8.1 and later - COPYRIGHT AND PERMISSION NOTICE
Copyright (c) 1995-2014 International Business Machines Corporation and others. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Software, and to permit persons
to whom the Software is furnished to do so, provided that the above copyright notice(s) and this permission
notice appear in all copies of the Software and that both the above copyright notice(s) and this permission
notice appear in supporting documentation.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL
THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR
ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
OF THIS SOFTWARE.
Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise
to promote the sale, use or other dealings in this Software without prior written authorization of the copyright
holder.
All trademarks and registered trademarks mentioned herein are the property of their respective owners.
Third-Party Software Licenses
This section contains third-party software notices and/or additional terms for licensed third-party software
components included within ICU libraries.
1. Unicode Data Files and Software
COPYRIGHT AND PERMISSION NOTICE
Copyright © 1991-2014 Unicode, Inc. All rights reserved.
Distributed under the Terms of Use in
http://www.unicode.org/copyright.html.
Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and any
associated documentation (the "Data Files") or Unicode software and any associated documentation (the
"Software") to deal in the Data Files or Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, and/or sell copies of the Data Files or Software, and to permit
persons to whom the Data Files or Software are furnished to do so, provided that (a) this copyright and permission
notice appear with all copies of the Data Files or Software, (b) this copyright and permission notice appear in
associated documentation, and (c) there is clear notice in each modified Data File or in the Software as well
as in the documentation associated with the Data File(s) or Software that the data or software has been modified.
THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO
EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR
ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE.
Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise
to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of
the copyright holder.
2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt)
The Google Chrome software developed by Google is licensed under the BSD license. Other software included
in this distribution is provided under other licenses, as set forth below.
The BSD License
http://opensource.org/licenses/bsd-license.php
Copyright (C) 2006-2008, Google Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The word list in cjdict.txt are generated by combining three word lists listed below with further processing for
compound word breaking. The frequency is generated with an iterative training against Google web corpora.
Libtabe (Chinese)
- https://sourceforge.net/project/?group_id=1519
- Its license terms and conditions are shown below.
IPADIC (Japanese)
- http://chasen.aist-nara.ac.jp/chasen/distribution.html
- Its license terms and conditions are shown below.
---------COPYING.libtabe ---- BEGIN--------------------/*
Copyrighy (c) 1999 TaBE Project.
Nara Institute of Science and Technology (NAIST), the copyright holders, disclaims all warranties with regard
to this software, including all implied warranties of merchantability and fitness, in no event shall NAIST be liable
for any special, indirect or consequential damages or any damages whatsoever resulting from loss of use, data
or profits, whether in an action of contract, negligence or other tortuous action, arising out of or in connection
with the use or performance of this software.
A large portion of the dictionary entries originate from ICOT Free Software. The following conditions for ICOT
Free Software applies to the current dictionary as well.
Each User may also freely distribute the Program, whether in its original form or modified, to any third party or
parties, PROVIDED that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear on, or be attached
to, the Program, which is distributed substantially in the same form as set out herein and that such intended
distribution, if actually made, will neither violate or otherwise contravene any of the laws and regulations of the
countries having jurisdiction over the User or the intended distribution itself.
NO WARRANTY
The program was produced on an experimental basis in the course of the research and development conducted
during the project and is provided to users as so produced on an experimental basis. Accordingly, the program
is provided without any warranty whatsoever, whether express, implied, statutory or otherwise. The term
"warranty" used herein includes, but is not limited to, any warranty of the quality, performance, merchantability
and fitness for a particular purpose of the program and the nonexistence of any infringement or violation of any
right of any third party.
Each user of the program will agree and understand, and be deemed to have agreed and understood, that
there is no warranty whatsoever for the program and, accordingly, the entire risk arising from or otherwise
connected with the program is assumed by the user.
Therefore, neither ICOT, the copyright holder, or any other organization that participated in or was otherwise
related to the development of the program and their respective officials, directors, officers and other employees
shall be held liable for any and all damages, including, without limitation, general, special, incidental and
consequential damages, arising out of or otherwise in connection with the use or inability to use the program
or any product, material or result produced or otherwise obtained by using the program, regardless of whether
they have been advised of, or otherwise had knowledge of, the possibility of such damages at any time during
the project or thereafter. Each user will be deemed to have agreed to the foregoing by his or her commencement
of use of the program. The term "use" as used herein includes, but is not limited to, the use, modification,
copying and distribution of the program and the production of secondary products from the program.
In the case where the program, whether in its original form or modified, was distributed or delivered to or
received by a user from any person, organization or entity other than ICOT, unless it makes or grants
independently of ICOT any specific warranty to the user in writing, such person, organization or entity, will also
be exempted from and not be held liable to the user for any such damages as noted above as far as the program
is concerned.
---------------COPYING.ipadic-----END--------------------------------
3. Lao Word Break Dictionary Data (laodict.txt)
Copyright (c) 2013 International Business Machines Corporation and others. All Rights Reserved.
Project: http://code.google.com/p/lao-dictionary/
Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt
License: http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt copied below)
This file is derived from the above dictionary, with slight modifications.
---------------------------------------------------------------------Copyright (C) 2013 Brian Eugene Wilson, Robert Martin
Campbell.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------
4. Burmese Word Break Dictionary Data (burmesedict.txt)
Copyright (c) 2014 International Business Machines Corporation and others. All Rights Reserved.
This list is part of a project hosted at:
github.com/kanyawtech/myanmar-karen-word-lists
--------------------------------------------------------------------- Copyright (c) 2013, LeRoy Benjamin Sharon
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name Myanmar Karen Word Lists, nor the names of its contributors may be used to endorse or
promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------
5. Time Zone Database
ICU uses the public domain data and code derived from Time Zone Database for its time zone support. The
ownership of the TZ database is explained in BCP 175: Procedure for Maintaining the Time Zone Database
section 7.
7. Database Ownership
The TZ database itself is not an IETF Contribution or an IETF document. Rather it is a pre-existing and regularly
updated work that is in the public domain, and is intended to remain in the public domain. Therefore, BCPs 78
[RFC5378] and 79 [RFC3979] do not apply to the TZ Database or contributions that individuals make to it.
Should any claims be made and substantiated against the TZ Database, the organization that is providing the
IANA Considerations defined in this RFC, under the memorandum of understanding with the IETF, currently
ICANN, may act in accordance with all competent court orders. No ownership claims will be made by ICANN
or the IETF Trust on the database or the code. Any person making a contribution to the database or code
waives all rights to future claims in that contribution or in the TZ Database.
Progress Rollbase Private Cloud v4.5 incorporates HSQL Development Group HyperSQL DB v2.3.3. Such
technology is subject to the following terms and conditions:
COPYRIGHTS AND LICENSES (based on BSD License)
For work developed by the HSQL Development Group:
Copyright (c) 2001-2016, The HSQL Development Group All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
Neither the name of the HSQL Development Group nor the names of its
contributors may be used to endorse or promote products derived from this
software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG, OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.
For work originally developed by the Hypersonic SQL Group:
Copyright (c) 1995-2000 by the Hypersonic SQL Group. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of the Hypersonic SQL Group nor the names of its contributors may be used to endorse or
promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE HYPERSONIC SQL GROUP, OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
This software consists of voluntary contributions made by many individuals on behalf of the Hypersonic SQL
Group.
Progress Rollbase Private Cloud v4.5 incorporates ESAPI v2.1.0 (as part of Progress AppServer (PAS) Core
v2.0).
This technology is subject to the following terms and conditions:
The BSD License
Copyright (c) 2007, The OWASP Foundation All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of the OWASP Foundation nor the names of its contributors may be used to endorse or
promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Progress Rollbase Private Cloud v4.5 incorporates ThreeTen backport v1.3.2. This technology is subject to
the following terms and conditions:
Copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of JSR-310 nor the names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Progress Rollbase Private Cloud v4.5 incorporates Adobe XMP Core v5.1.2. This technology is subject to the
following terms and conditions: The BSD License
Copyright (c) 2009, Adobe Systems Incorporated All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other materials provided with the distribution.
* Neither the name of Adobe Systems Incorporated, nor the names of its contributors may be used to endorse
or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANT ABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Progress Rollbase Private Cloud v4.5 incorporates Mozilla JS v1.7R4. The Original Code is Rhino code,
released May 6, 1999. The Initial Developer of the Original Code is Netscape Communications Corporation.
Portions created by the Initial Developer are Copyright (C) 1997-1999 the Initial Developer. All Rights Reserved.
License for portions of the Rhino debugger
The majority of the technology is subject to the terms and conditions of the Mozilla Public License Version 2.0
Additionally, some files (currently the contents of toolsrc/org/mozilla/javascript/tools/debugger/treetable/) are
available under the following license:
Copyright 1997, 1998 Sun Microsystems, Inc. All Rights Reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the distribution.
- Neither the name of Sun Microsystems nor the names of its contributors may be used to endorse or promote
products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Progress Rollbase Private Cloud v4.5 incorporates OWASP Foundation Java Encoder v1.2. This technology
is subject to the following terms and conditions:
Copyright (c) 2015 OWASP. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other materials provided with the distribution.
* Neither the name of the OWASP nor the names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)ARISING IN ANY
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Updated:1/29/2018