ConfigAdmin AG YAB1 18
ConfigAdmin AG YAB1 18
YAB 1.18
70-3346-YAB1.18-Rev1
August 2024
This document contains proprietary information that is protected by copyright and other intellectual property laws. No part
of this document may be reproduced, translated, or modified without the prior written consent of QAD Inc. The information
contained in this document is subject to change without notice.
QAD Inc. provides this material as is and makes no warranty of any kind, expressed or implied, including, but not limited
to, the implied warranties of merchantability and fitness for a particular purpose. QAD Inc. shall not be liable for errors
contained herein or for incidental or consequential damages (including lost profits) in connection with the furnishing,
performance, or use of this material whether based on warranty, contract, or other legal theory.
This document contains trademarks owned by QAD Inc. and other companies.
QAD Inc.
100 Innovation Place
Santa Barbara, California 93108
Phone (805) 566-6000
http://www.qad.com
Table of Contents
Administration Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
YAB Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
File System Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Enterprise Edition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
YAB Principles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
System Administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Starting and Stopping Environments . . . . . . . . . . . . . . 23
Controlling Financials Daemons . . . . . . . . . . . . . . . . 25
Schema Management . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Data Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Environment Backup . . . . . . . . . . . . . . . . . . . . . . . . 32
Environment Restore . . . . . . . . . . . . . . . . . . . . . . . . 33
Configuration Backups . . . . . . . . . . . . . . . . . . . . . . . 35
Data (Native Format) . . . . . . . . . . . . . . . . . . . . . . . . 36
Data (XML Format) . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Update Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Compiling Source Code . . . . . . . . . . . . . . . . . . . . . . . . 40
Configuring Compiles . . . . . . . . . . . . . . . . . . . . . . . . 42
Compile for Developers . . . . . . . . . . . . . . . . . . . . . . 43
Locating Compile Resources . . . . . . . . . . . . . . . . . . 46
Generating XREF output . . . . . . . . . . . . . . . . . . . . . 50
Generating DEBUG-LIST output . . . . . . . . . . . . . . . 51
Compile Databases . . . . . . . . . . . . . . . . . . . . . . . . . 52
Generating LISTING output . . . . . . . . . . . . . . . . . . . 53
Auditing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Enable Auditing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Disable Auditing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Configuring Audit Permissions . . . . . . . . . . . . . . . . . 58
Importing Policy Files . . . . . . . . . . . . . . . . . . . . . . . . 59
Archiving Records . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Configure Archive Database Connection . . . . . . . . . 63
Manage Archive Database Server . . . . . . . . . . . . . . 64
QXtend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Reapply QXtend Defaults . . . . . . . . . . . . . . . . . . . . . 66
Key Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
clean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
code-mfg-customizations-update . . . . . . . . . . . . . . . 69
code-mfg-update . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
config . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
database-storage-area-resolve . . . . . . . . . . . . . . . . 74
env-info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
fin-sync-run . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
host-update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
netui-pro-update . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
reconfigure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
restart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
stop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
system-diagnostics . . . . . . . . . . . . . . . . . . . . . . . . . 104
system-find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
system-package-create . . . . . . . . . . . . . . . . . . . . . 106
system-process-list . . . . . . . . . . . . . . . . . . . . . . . . . 108
system-updates-list . . . . . . . . . . . . . . . . . . . . . . . . 109
update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
validate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
System Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
General Information . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Configuration Type System . . . . . . . . . . . . . . . . . . 121
Configuration Files . . . . . . . . . . . . . . . . . . . . . . . . . 124
Distributing Settings . . . . . . . . . . . . . . . . . . . . . . . . 138
Configuration File Includes . . . . . . . . . . . . . . . . . . . 139
Undefined Progress Parameters . . . . . . . . . . . . . . 140
Environment Identification . . . . . . . . . . . . . . . . . . . . . . 141
Reconfiguring Databases . . . . . . . . . . . . . . . . . . . . . . 142
Configuring Database Location . . . . . . . . . . . . . . . 143
Configuring Database Structure . . . . . . . . . . . . . . . 144
Configuring Primary Login Broker (4GL) . . . . . . . . 145
Configuring Secondary Login Broker (SQL) . . . . . . 146
Configuring Before Imaging . . . . . . . . . . . . . . . . . . 147
Configuring After Imaging . . . . . . . . . . . . . . . . . . . . 148
Configuring Codepage and Collation . . . . . . . . . . . 150
Configuring Database Security . . . . . . . . . . . . . . . . 151
Defining Users and Administrator Privileges . . . 152
Blank User Access . . . . . . . . . . . . . . . . . . . . . . . 153
Table Permissions . . . . . . . . . . . . . . . . . . . . . . . 154
Schema Changes . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Using Demo Data . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Using Parameter Files . . . . . . . . . . . . . . . . . . . . . . 161
Reconfiguring Tomcat . . . . . . . . . . . . . . . . . . . . . . . . . 164
Enabling the Manager Web Application . . . . . . . . . 165
Reconfiguring Tomcat Startup Parameters . . . . . . 166
Configuring SSL Connections . . . . . . . . . . . . . . . . 167
Reconfiguring PROPATHs . . . . . . . . . . . . . . . . . . . . . 169
Reconfiguring AdminServer . . . . . . . . . . . . . . . . . . . . 173
Reconfiguring Application Servers . . . . . . . . . . . . . . . 174
Enabling and Disabling 4GLTrace . . . . . . . . . . . . . 175
Migrating to a New Host . . . . . . . . . . . . . . . . . . . . . . . 177
TCP/IP Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Adding Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Using AIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
SSH and Telnet Protocols . . . . . . . . . . . . . . . . . . . . . . 183
Bootstrap Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
QAD Reporting Framework Printers . . . . . . . . . . . . . . 187
Batch Jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Batch Jobs (Basic) . . . . . . . . . . . . . . . . . . . . . . . . . 189
Batch Jobs (Enhanced) . . . . . . . . . . . . . . . . . . . . . 190
Configuring Commands . . . . . . . . . . . . . . . . . . . . . . . 193
Exec Commands . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Progress Commands . . . . . . . . . . . . . . . . . . . . . . . 195
ANT commands . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Error Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Timeouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Key Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
catalogs setting . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
check-for-updates setting . . . . . . . . . . . . . . . . . . . . 202
clean setting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
config.order setting . . . . . . . . . . . . . . . . . . . . . . . . . 204
dependency settings . . . . . . . . . . . . . . . . . . . . . . . 205
packages setting . . . . . . . . . . . . . . . . . . . . . . . . . . 206
ports setting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
verify setting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Upgrades, Customizations, and Patches . . . . . . . . . . . . 212
Product Upgrades . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Customizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Operational Customizations . . . . . . . . . . . . . . . . . . 215
Integrate QAD source file archive into environment.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Financials Customization . . . . . . . . . . . . . . . . . . . . 219
Integrated Customization Toolkit . . . . . . . . . . . . . . 221
Install and Configure the Integrated Customization
Toolkit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Desktop Customizations . . . . . . . . . . . . . . . . . . . . . 224
Adding Custom Data . . . . . . . . . . . . . . . . . . . . . . . 225
Metadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Process Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Adding Custom Database . . . . . . . . . . . . . . . . . . . 228
Adding Custom Application Server . . . . . . . . . . . . . 231
Compiling EDI Functions . . . . . . . . . . . . . . . . . . . . 233
Adding Custom Directory Backup Processes . . . . . 234
Patches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Operational Hotfixes (Patches/ECO) . . . . . . . . . . . 238
Financials Hotfix . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Package Patch . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
File Patch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
qra.pl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Prepared Contexts . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Using a context . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Adding files to a context . . . . . . . . . . . . . . . . . . . . . 246
Validating a context . . . . . . . . . . . . . . . . . . . . . . . . 247
Logging in a context . . . . . . . . . . . . . . . . . . . . . . . . 248
Context Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . 249
Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Troubleshooting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Financials Logging . . . . . . . . . . . . . . . . . . . . . . . . . 255
Temporary Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Collecting Diagnostic Information . . . . . . . . . . . . . . . . 257
Disabling Commands . . . . . . . . . . . . . . . . . . . . . . . . . 258
Refresh & Clean Options . . . . . . . . . . . . . . . . . . . . . . 259
Validation Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Defining Java Startup Parameters . . . . . . . . . . . . . . . 261
Adding Packages to Local Catalog . . . . . . . . . . . . . . . 262
Control Process Execution . . . . . . . . . . . . . . . . . . . . . 263
Interactive Execution . . . . . . . . . . . . . . . . . . . . . . . 264
Non-interactive Execution . . . . . . . . . . . . . . . . . . . 267
Appendix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Parallel Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Command Expressions . . . . . . . . . . . . . . . . . . . . . . . . 272
Selecting Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Rebuild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Managing Progress Data . . . . . . . . . . . . . . . . . . . . . . 278
Creating Tomcat Security Patches . . . . . . . . . . . . . . . 293
QAD Adaptive ERP Configuration and Administration Guide
Administration Guide
This is the Administration Guide for QAD Enterprise Edition using Your Application Builder (YAB).
YAB is used to administer QAD Enterprise Edition releases starting with QAD Enterprise Edition 2015 (QAD Cloud) and is
a functional replacement for the QAD Deployment Toolkit (QDT). This guide documents relevant information regarding the
configuration and administration of the QAD Enterprise Edition. It is oriented towards system administrators with a basic
understanding of the QAD Enterprise Edition.
The QAD Enterprise Edition Installation Guide provides instructions for installing the Enterprise Edition and is available in
the QAD Document Library:
http://documentlibrary.qad.com
Documentation Conventions
To provide the clearest exposition of the subject matter, the examples in the guide are written from the following
perspective:
7
QAD Adaptive ERP Configuration and Administration Guide
Introduction
The Introduction section introduces the key concepts behind YAB.
YAB Client
Packages
Commands
Configuration
File System Layout
Enterprise Edition
YAB Principles
8
QAD Adaptive ERP Configuration and Administration Guide
YAB Client
A QAD Enterprise Edition environment is administered with the program yab.
Executing the program without any arguments (or with the "-?" option) will display the version of the YAB client and its
help.
> yab
YAB Console, 1.10.0.45
Options:
Default: DEBUG
Arguments:
The version that is displayed (e.g. "YAB Console, 1.10.0.45") is the version of the YAB client, which may be different from
the version of YAB in an environment. The info command displays the version of components in an environment, where the
entry yab-ee-app records the version of YAB.
When QAD Enterprise Edition is installed or YAB is updated, the installer installs the YAB client into the build/client
directory. If the YAB client is not on the PATH it will, as a convenience, create a script named yab.[bat] in the
installation directory to launch the YAB client. It is recommended that you add the YAB client to the PATH so YAB
commands can be submitted from any directory.
9
QAD Adaptive ERP Configuration and Administration Guide
A single installation of the YAB client may be used to administer multiple QAD Enterprise Edition environments, where the
environment to administer is selected using the (-a) option. Alternatively the "active" environment can be implicitly
determined by navigating to the installation directory of the environment (or a subdirectory of the installation directory).
If the client cannot locate the environment to administer, the following error is raised.
The YAB client is a Java application that requires Java 8 or Java 17. The java program is located using the PATH
environment variable, unless the JAVA_HOME environment variable locates an alternative Java installation to use. If Java
is not installed or configured correctly you will get an error similar to this:
> yab
/users/wtb/programs/yab/yab: line 38: java: command not found
If an older version of Java is configured you will get an error similar to this:
> yab
Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad
version number in .class file
The following command displays the version of Java resolved from the PATH:
java -version
10
QAD Adaptive ERP Configuration and Administration Guide
Packages
An environment is composed of packages. Packages are read-only versioned releases of application and management
software.
Software Catalogs
A software catalog is a structured collection of packages. A catalog may contain compressed or uncompressed
packages. Every QAD Adaptive ERP environment is associated with a local catalog that contains uncompressed
packages.
> ll build/catalog
total 8
-rw-rw-r-- 1 mfg qad 0 Mar 23 17:23 expanded
drwxrwxr-x 79 mfg qad 8192 Mar 23 17:30 packages/
> ll build/catalog/packages/fin-src-proxy/2016/0/80/5/
total 124
drwxrwxr-x 3 mfg qad 4096 Mar 23 17:28 com/
-rw-rw-r-- 1 mfg qad 12 Mar 23 17:28 fin-src-proxy.version
-rw-rw-r-- 1 mfg qad 313 Mar 23 17:27 metadata.xml
drwxrwxr-x 469 mfg qad 110592 Mar 23 17:28 proxy/
drwxrwxr-x 3 mfg qad 4096 Mar 23 17:28 us/
The catalogs setting can used to configure additional catalogs (listed in order of precedence).
catalogs=/dr01/qadapps/catalog,/dr01/3rdparty/catalog
Downloading Packages
The environment must have read access to all configured packages in uncompressed format. If a package is only
available in a catalog accessed through the HTTP protocol or in a catalog that stores packages in compressed format, the
package will be downloaded and installed into the local catalog.
Usage
The files in a catalog are referenced by YAB and also by the Enterprise Edition. For example, the default configuration
references Tomcat binaries from the tomcat package.
Listing Packages
The info command lists the packages configured in an environment.
11
QAD Adaptive ERP Configuration and Administration Guide
INSTANCE
/dr01/qadapps/ci
MODULES
Creating Packages
The system-package-create command is used to create a custom package.
See:
Info
Clean
Product Upgrades
system-package-create
12
QAD Adaptive ERP Configuration and Administration Guide
Commands
Commands are executed through the YAB client:
build/logs/yab.log
Use the verbose (-v) option to also print log messages to the console:
Use the (-log-copy) option to write log messages to a file as well as to the YAB log file, replacing existing content:
Many commands are aggregated. For example there are commands to start a single database server, all database
servers, and the environment.
The product configuration will have an influence on the commands that are available in an environment. For example,
when Customer Relationship Management is added to an environment, additional commands are defined.
The help command is used to show the help for specific commands and to query the available commands.
PROCESS
config - Prints configuration settings.
DESCRIPTION
yab config [KEY] [KEY] [KEY]...
KEY
The key of the setting(s) to print. The meta character '*' is used
to match 0 or more characters.
If no keys are defined, all configuration settings with a value are
printed, and when (-all) is
defined, settings without a value are included as well. When using
meta characters, quote the
argument to prevent the shell from evaluating the meta character.
...
13
QAD Adaptive ERP Configuration and Administration Guide
PROCESSES
The help command also shows the help for configuration settings. Sometimes this is distracting when commands and
settings are named similarly. The command-help command only shows help for commands.
Piping output from config or help to the UNIX "grep" command is a powerful technique for quickly finding what you
are looking for.
For example, the following command lists the commands with"restore" in their name:
The system-process-list command lists the commands that are aggregated (implied) by a command and the order in
which they would be executed if the parent command was executed.
14
QAD Adaptive ERP Configuration and Administration Guide
1. database-qaddb-structure-file-update
2. database-qaddb-structure-validate
3. database-qaddb-create
4. database-qaddb-structure-update
5. qxtend-stage
6. database-qaddb-schema-update
7. database-qaddb-schema-index-rebuild
8. oid-code-update
9. data-customizations-default-dotd-qaddb-update
10. data-customizations-default-xml-qaddb-update
11. data-ee-data-qaddb-update
12. data-ee-data-qadfin-update
13. data-ee-system-data-qaddb-update
14. data-ee-system-data-patch-delete-qaddb-update
15. data-ee-system-data-patch-qaddb-update
16. data-options-qaddb-update
17. data-patches-default-dotd-qaddb-update
18. data-patches-default-xml-qaddb-update
19. data-qrabridge-qaddb-update
20. data-qxtend-qaddb-update
21. module-archiving-stage
22. data-xml-archiving-qaddb-overwrite-update
23. languages-mark-installed
24. database-qaddb-data-update
25. tlc-create
26. database-qaddb-jta-enable
27. database-qaddb-update
Occasionally the term process is used instead of command to capture the idea that a command describes a process flow.
The two terms are interchangeable.
See:
help
system-process-list
15
QAD Adaptive ERP Configuration and Administration Guide
Configuration
The configuration of the environment is distributed across multiple configuration files residing in the build/config directory.
To change a configuration setting the setting should be added to or updated in the build/config/configuration.properties
file, where it will override the default setting.
For example, to increase the maximum number of databases servers for the QADDB database to 15, the following setting
would be added:
build/config/configuration.properties
appserver.mfg.maxsrvrinstance=15
Certain basic configuration changes can be applied by executing the reconfigure command.
Other configuration changes require the environment to be restarted and are applied with the update command.
A setting that is defined at the command line will be used only for the duration of the request.
Layout
Syste build/config Documents that define a standard configuration of the QAD Enterprise Edition.
m /system
Docum When the environment is created using the QAD Enterprise Edition installer the following
ents configuration documents are created.
WARNING: The system will process any file in this directory that ends with ".properties" as a
configuration file. If you create a backup of a configuration file, copy the backup into a different
directory (or better still use the system-config-backup command to make the backup).
Query
The config command is used to query configuration settings:
16
QAD Adaptive ERP Configuration and Administration Guide
The system maintains a single file enumerating the current, fully resolved configuration settings:
build/work/system/config/current/application.properties
The help command also shows the help for commands. Sometimes this is distracting when commands and settings are
named similarly. The config-help command only shows help for configuration settings.
See:
config
help
update
validate
Configuration Files
17
QAD Adaptive ERP Configuration and Administration Guide
> ll
total 44
drwxrwxr-x 6 mfg qad 4096 Mar 17 17:23 build/
drwxrwxr-x 11 mfg qad 4096 Mar 17 19:03 config/
drwxrwxr-x 9 mfg qad 4096 Mar 17 17:32 customizations/
drwxrwxrwx 4 mfg qad 12288 Mar 17 05:56 databases/
drwxrwxr-x 13 mfg qad 4096 Mar 17 08:10 dist/
drwxrwxr-x 2 mfg mfg 4096 Mar 17 05:33 extensions/
drwxrwxr-x 7 mfg qad 4096 Mar 17 17:32 patches/
drwxrwxr-x 2 mfg qad 8192 Mar 17 13:31 scripts/
drwxrwxr-x 3 mfg qad 4096 Mar 17 17:32 servers/
drwxrwxr-x. 4 mfg mfg 4096 Mar 17 09:22 storage/
The location of some resources can be configured but the location should be configured when the environment is created.
appdir Yes The installation directory that was chosen when the
application was installed.
18
QAD Adaptive ERP Configuration and Administration Guide
Enterprise Edition
The environment should be started before running an Enterprise Edition client.
Character
The character client is started by executing a (language specific) script in the installation directory:
> scripts/client-[LANG]
Ex.
> scripts/client-us
.NET
The .NET client must be installed on a Windows host. The .NET client installation is started by navigating to the Home
Server in a web browser. Use the config (or env-info) command to print the Home Server URL:
Products with changes for the .NET client are installed on the server with the update command. When a client starts up, it
checks the server for updates and downloads and applies any updates, before starting.
19
QAD Adaptive ERP Configuration and Administration Guide
YAB Principles
YAB has two main objectives:
These objectives are promoted by certain design decisions (e.g. catalogs and packages) embedded in the fabric of how
YAB works, but they are also forwarded by other principles that require the participation of administrators. In many cases,
these principles have deep roots and correspond to how Enterprise Edition has been administered in the past. In a few
cases, a conscious decision was made to improve upon historical practices.
Principles
Automation
Change should be automated. Automated changes are more efficient than manual changes and produce consistent
results that can be reproduced. Automated changes record evidence in log files that can be analyzed for root cause
analysis.
Declarative
Configuration should describe the desired state of the environment. It should be possible to reproduce this state at any
point in time, which means that all files referenced from the configuration (e.g. schema files, source code, etc) must
always be available. The update command is responsible for ensuring that the environment corresponds to the
configuration.
Fault Tolerant
An administrator should be able to start and stop the environment even if YAB is broken. YAB generates scripts to control
the environment and uses these scripts internally when starting and stopping the environment.
Minimize Differences
Any change to the standard product configuration should be carefully considered. The standard product configuration is
the subject of thousands of hours of testing and use and has been designed to support product upgrades without manual
intervention. Overrides increase the cost of upgrades by requiring additional up front analysis and sometimes post
upgrade corrections.
Segregate Differences
20
QAD Adaptive ERP Configuration and Administration Guide
Having a clear separation between the standard product configuration and overrides, is valuable from the standpoint of
clearly describing the environment, and in some cases, this separation can be leveraged for troubleshooting as well. The
environment is organized to support this separation. The build/config/configuration.properties file
is used to record differences from the standard product configuration and the customizations and patches
directories to store customization and patch artifacts. If custom schema is required you can add the schema in a custom
database.
When an update is eventually run in an environment managed this way it can result in a "big bang" effect where multiple
pending changes unrelated to the current change are applied at the same time.
The fundamental risk in not bringing down the environment before it is updated is that the running application may see
and react to the partially updated system with unforeseen consequences. This follows simply from the fact that the
pending change is applied to the system over time and that some of these changes will be "immediately" visible to the
running application, whereas others will not, until the system is restarted. It is very hard to estimate the risk of an online
update without taking that specific risk many times in actively used environments and tracking the outcomes. With luck
you will get away with it most of the time, but other times you will be chasing strange errors for which there is no simple
explanation, and in a worst case scenario, corrupting or losing data that cannot be recovered.
Use Comments
On occasion it may be necessary to define configuration or temporarily skip commands as part of a workaround or
possibly configuration is added to reflect certain preferences. All configuration files support comments by prefixing the line
with the hash (#) symbol. A simple description of the reason for the change, the user introducing the change, and the date
the change was introduced, can be invaluable when evaluating upgrades and patches and understanding the background
of an environment.
21
QAD Adaptive ERP Configuration and Administration Guide
System Administration
System Administration covers day-to-day administrative tasks such as starting and stopping environments, backing up and
restoring databases, and recompiling code.
22
QAD Adaptive ERP Configuration and Administration Guide
Scripts
The commands to start and stop servers typically execute a script of the same name in the scripts directory. For example,
the command to start the Financials application server is appserver-fin-start which executes the script scripts/appserver-
fin-start.
scripts/appserver-fin-start
#!/usr/bin/python
# Starts the 'fin' application server.
# Generated: 2017-03-09T10:51-0800
import os
os.environ['DLC'] = r"/qad/progress/dlc11664"
os.environ['PROMSGS'] = r"/qad/progress/dlc11664/promsgs"
os.environ['PATH'] = r"/qad/progress/dlc11664/bin:/qad/progress/java64
/jdk1.7.0_45/bin:/qad/progress/dlc11664/bin:/bin/posix:/bin:/usr/bin:/usr
/local/bin:/usr/sbin"
os.environ['PROTERMCAP'] = r"/qad/progress/dlc11664/protermcap"
import subprocess
import sys
params = [r"/qad/progress/dlc11664/bin/asbman", r"-i", r"as-fin", r"-
start", r"-port", r"22001"]
p = subprocess.Popen(params , stdout=subprocess.PIPE, stderr=subprocess.
PIPE)
out, err = p.communicate()
print(out)
if err is not None:
print(err)
if p.returncode != 0:
sys.exit(p.returncode)
These scripts should not be directly edited. They are re-generated by executing the script-update (or reconfigure or update
) command from the YAB console. The scripts are generated by the system so the environment can be started even if
YAB has failed (and for better transparency). The YAB commands should be used in preference to direct execution of the
scripts because the request will then be recorded in the YAB log file (build/logs/yab.log). Also some commands will first
check the status of the managed resource before calling the script. For example not executing a script to start a server
that is already running. Some servers will raise an error if they receive a request to start a server that is already running or
to stop a server that is already stopped.
The scripts maintained by the system are implemented in Python to provide consistent behavior across different platforms
and to leverage the extensive Python standard libraries. Custom scripts can be implemented in any language.
Manual Setting
The manual setting of each server configures whether the server will (false) or will not (true) be controlled by the
environment start, stop, and status commands:
23
QAD Adaptive ERP Configuration and Administration Guide
A "manual" server can still be controlled using server specific commands. For example, a custom database with the
following configuration:
db.custom.physicalname=custom
db.custom.manual=true
...
24
QAD Adaptive ERP Configuration and Administration Guide
The following commands start, stop, and get the status of the daemons:
daemon-start
daemon-stop
daemon-status
By default the daemon processes are started and stopped when the environment is started and stopped. To disable the
automatic start of the daemon processes define the following setting:
fin.daemons.manual=true
Each daemon listed by the fin.daemons.names setting will also have commands to individually control the daemon:
daemon-[DAEMON]-start
daemon-[DAEMON]-stop
daemon-[DAEMON]-status
Unsetting fin.daemon.names will prevent any daemon commands from being defined.
PROCESSES
The prefix "fin.daemons" groups additional settings to fine tune how Financials daemons are managed.
SETTINGS
start
stop
status
25
QAD Adaptive ERP Configuration and Administration Guide
daemon-start or fin-application-
start
daemon-stop or fin-application-stop
daemon-status
See: fin.daemons.status
Default: false
status
See: fin.daemons.manual
Default: false
fin.daemons.logdir DEPRECATED
Please see 'fin.daemon.INSTANCE.
logdir'
fin.daemons.workdir DEPRECATED
Please see 'fin.daemon.INSTANCE.
workdir'
The prefix "fin.daemon" is used to configure individual daemons where the INSTANCE is the name of the daemon (e.g.
eventdaemon, historydaemon,scandaemon, etc):
26
QAD Adaptive ERP Configuration and Administration Guide
SETTINGS
For example, to get more verbose logging from the Event Daemon define the following configuration:
fin.daemon.eventdaemon.debuglevel=31
> daemon-configure
> daemon-eventdaemon-stop
> daemon-eventdaemon-start
Report Daemon
27
QAD Adaptive ERP Configuration and Administration Guide
The report daemon runs on a Windows host and is not directly controlled by YAB. To make it easier to start and stop the
report daemon when the environment starts and stops, YAB defines a set of "placeholder" commands (daemon-
reportdaemon-start, daemon-reportdaemon-stop) that can be extended to call a script that starts and stops the daemon on
the Windows host when the environment is started and stopped.
Ex. Execute an rd-start script when the environment starts and an rd-stop script when the environment is stopped.
process.reportwin-start.id=daemon-reportdaemon-start
process.reportwin-start.impl=exec
process.reportwin-start.args=/dr01/qadapps/qea/rd-start
process.reportwin-stop.id=daemon-reportdaemon-stop
process.reportwin-stop.impl=exec
process.reportwin-stop.args=/dr01/qadapps/qea/rd-stop
When the report daemon on the Windows host communicates back to the server another daemon is automatically
spawned on the UNIX host. The command daemon-reportdaemon-status shows the status of this UNIX daemon.
28
QAD Adaptive ERP Configuration and Administration Guide
Schema Management
There are several commands that may be used to create and compare schema files. The Schema Changes page
discusses separately the commands that are used to load schema files into a database.
Ad-hoc Commands
The following commands provide support for dumping and comparing schema files. Review the help to see how they work
(yab help <command>).
Command Description
Command Description
dev-schema- Creates a "snapshot" by dumping the schema of all databases or the selected databases to a new
snapshot timestamped directory.
Snapshots will always be created after a schema change. Use the dev-schema-list command to list the snapshots
in the environment.
Locating
The database-INSTANCE-schema-locate command may be used to locate the schema files that distribute
schema for a table for sequence.
Ex.
29
QAD Adaptive ERP Configuration and Administration Guide
30
QAD Adaptive ERP Configuration and Administration Guide
Data Management
Environment Backup
Environment Restore
Configuration Backups
Data (Native Format)
Data (XML Format)
Update Statistics
31
QAD Adaptive ERP Configuration and Administration Guide
Environment Backup
The environment-offline-backup and the environment-online-backup commands are used to
perform an environment-wide backup of all system components. The offline command stops the environment before
taking the backup whereas the online command does not, though it may temporarily take components offline that do not
support an online backup. The offline backup is the recommended approach to ensure data consistency across
components. Note, the behavior of an offline backup may differ depending on the status of an environment; a data
cleanup step event-service-backup-clean has a dependency on the QRA Application Server, as a result, if
the server is stopped prior to executing the offline backup, processed EventRaw records will not be deleted.
Backups are located in subdirectories of the directory configured by the dbbackup.dir setting. When dbbackup.
timestamp is true, the subdirectory names encode the time of the backup using the format ([YEAR][MONTH][DAY]
[HOUR][MINUTE][SECOND]). The dbbackup.timestampmax setting can be configured to specify a maximum
number of backups to retain, where the oldest backup will be discarded to make way for a new backup. This ensures
backups do not accumulate. When dbbackup.timestamp is false, the name of the directory is controlled using the
(-tag:NAME) option, where NAME is the name of the subdirectory where the backups should be written. If the (-tag) option
is not defined, backups are written to a subdirectory named "default." If the subdirectory contains a backup for the
component, it will be overwritten.
Progress Databases
The Progress databases are included in the environment backup. Additional "dbbackup" settings can be used to fine tune
the configuration of the Progress database backups, as well as process-level options for enabling after imaging and
replication:
Compression
Database compression is enabled by default:
dbbackup.compress=true
On non-Windows platforms, the backup is compressed as it is written. This compression conserves disk space but
increases the time it takes to back up the database, including the time required to back up the before image and the time
that database operations are suspended when the system is online. The compression can be delayed until after the
backup has completed to reduce this delay but requires additional disk space usage.
dbbackup.delaycompression=true
dbbackup.compress=false
32
QAD Adaptive ERP Configuration and Administration Guide
Environment Restore
An environment restore will include all or some of the following activities:
When After Imaging is enabled on a Progress database, the database can be Use roll forward
restored to a point in time after the restored backup using roll forward recovery. recovery to restore
Roll forward recovery must be done immediately after restoring the data from a a database to a
backup to prevent changes to the database that would invalidate the recovery. point in time after
the backup.
If the After Imaging archiver is used to archive AI extents, YAB will move
archived AI files from the directory configured by dbbackup.
INSTANCE.archivaldir to the backup to which they belong
when backups are taken (use 'dbbackup.movearchivedaifiles=false' to disable
moving archived AI files).
YAB does not provide commands to perform roll forward recovery. Consult the
Progress documentation for instructions on restoring AI extents.
4 environment- Synchronizes data to ensure components are in a consistent state. Started Always
data-sync
** Starts the
environment if it
is stopped.
Running an update
is required if the
backup being
restore is from
another
environment/host
or if the
environment
configuration may
have changed
since the backup
was made.
This is an example of restoring an environment from a timestamped backup (20161121141126) that includes activity 1, 4,
and 5:
33
QAD Adaptive ERP Configuration and Administration Guide
If the backup is from another environment and was copied to the destination environment you can use "dbbackup.dir" as a
request parameter to help locate the backup. For example, if the backup was stored in the directory "/dr01/backups
/production/20161121141126" use (-dbbackup.dir) to locate the base directory that contains the backup (/dr01/backups
/production) and then (-tag) to specify the backup within that directory (20161121141126):
34
QAD Adaptive ERP Configuration and Administration Guide
Configuration Backups
The system automatically creates backups of the configuration when it changes and passes validation. The backups are
stored in the work directory:
The "current" backup represents the last known good configuration. When a new backup is created, the files in the
"current" backup are moved into a timestamp directory to make way for the new backup. The "applied" backup stores the
configuration of the system during the last successful update. The system-config-list command provides a
convenient way to list all of the backups (excluding "current" and "applied").
The system-config-restore command can be used to restore a configuration backup, but it is not useful if the
configuration is so broken that a YAB session cannot be started. For this reason, it is recommended that backups should
be restored using the new YAB client startup option (-config-restore) which can repair the configuration before starting a
YAB session.
When used without a value, it will restore the last known good configuration backup (current).
If any configuration files are updated or removed by restoring the backup, copies of the files are stored in an archive in the
current working directory.
35
QAD Adaptive ERP Configuration and Administration Guide
Loading Data
Loading a set of .d format data files is as easy as selecting the data files to load and the destination database.
Ex. Configure the environment to load the .d data files in the test directory.
build/config/configuration.properties
data.test.dir=/qad/sandbox/user/wtb/02/sc2-whole/test
data.test.includes=*.d
data.test.database=db.qadadm
data.test.format=dotd
With the preceding configuration, the .d data files would be processed during the database-qadadm-data-
dotd-update step in an update.
To load binary format data set the binary setting on the data instance to true.
build/config/configuration.properties
data.test.binary=true
36
QAD Adaptive ERP Configuration and Administration Guide
Update/Delete Support
A DOTD file can only be used to add records to the database. If a record exists, the Progress Data Dictionary will raise an
error and subsequent records in the file will not be processed (unless the error threshold is configured to ignore these
errors). Likewise there is no way to remove a set of records using the Progress Data Dictionary. In YAB an XML data file
can be processed in a mode where it will add records that do not exist and update records that do exist, a mode where
they will be added but not updated, and a mode where the corresponding records will be removed from the database if
they exist.
Portability
XML data files are always dumped/loaded using a standard encoding (UTF-8). Date values and decimal values are
represented using standard XML Schema Definition types, so there is no concern over differences in the Progress startup
parameters (mdy, yy, numsep, numdec) used to dump and to load the data.
Flexibility
The Progress Data Dictionary dumps all records and all fields from a single table into a DOTD file. In YAB it is possible to
join tables (e.g Order to Order Lines), filter records, and select fields to dump into an XML data file.
Human Readable
XML data files are easier to read and edit because the document format includes schema information whereas the dotd
format is positional.
Diff/Patch Support
YAB provides support for comparing XML data files to show differences in terms of record adds and deletes and field
updates (diff). These differences can be merged into another XML data file (patch).
Loading Data
The data configuration type is used to configure data to be loaded into an environment. This type can be used to load
XML as well as binary and text dotd files. Loading a set of XML data files produced in a YAB environment is as easy as
selecting the data files to load and the destination database.
Ex. Configure the environment to load the XML data files in the test directory.
build/config/configuration.properties
data.test.dir=/qad/sandbox/user/wtb/02/sc2-whole/test
data.test.includes=*.xml
data.test.database=db.qadadm
data.test.format=xml
With the preceding configuration, the XML data files would be processed during the database-qadadm-data-
xml-update step in an update.
Managing Data
YAB provides the following commands for working directly with XML data. Review the help to see how they work (yab help
<command>).
Command Description
37
QAD Adaptive ERP Configuration and Administration Guide
Command Description
dev-data- Creates a "snapshot" by dumping all system entities to a new timestamped directory.
snapshot
dev-data-diff Compares the most recent snapshot to the database or any two snapshots.
dev-data- Compares the most recent snapshot to the database or any two snapshots and applies the differences
patch to a directory of data files.
To add support for an additional table/entity create a new dump request (see the help for data-xml-dump) and then
append the dump request to the configured system data entities.
dump-chui_det.xml
<Entity>
<Dataset>
<DatasetName>chui_det</DatasetName>
<Table>
<TableName>chui_det</TableName>
</Table>
</Dataset>
</Entity>
build/config/configuration.properties
# @append
dev-data.databases.qadadm=/qad/sandbox/user/wtb/ee/dump-chui_det.xml
38
QAD Adaptive ERP Configuration and Administration Guide
Update Statistics
All Progress databases that support SQL clients have a command to call the Progress UPDATE STATISTICS program to
generate statistical data that can help the SQL query optimizer make more intelligent choices.
yab database-INSTANCE-update-statistics
The command should be called periodically as the underlying data changes.
The behavior of the command can be fine tuned with database settings.
39
QAD Adaptive ERP Configuration and Administration Guide
code-INSTANCE-update
The compile is an incremental compile which means files will only be recompiled if they have changed, or a resource on
which they depend, has changed. When a file is recompiled a message is written to the log explaining why the file was
recompiled.
The incremental compile uses Progress compile XREF files to understand program dependencies, however Progress does
not support generating XREF files for encrypted programs. The default configuration will recompile a file if it is encrypted or
if it depends on a file that is encrypted. This strict approach to correctness ensures that all source code changes are
processed. (Consider an example where the unencrypted program A includes the encrypted file B. We know if A or B has
changed, but we do not know that B depends on the changed file C, because we cannot get dependency information for B.)
See Compile for Developers for techniques to streamline compiles in development environments.
The (-nocompile) option can be used to see what programs would be compiled without actually compiling the programs:
The r-code will be written into the directory configured by the "dir" setting, with the same propath relative directory
structure as the source file.
code.mfg.dir=/dr01/qadapps/qea/dist/mfg
code.mfg.propath=/dr01/qadapps/qea/build/catalog/packages/mfg/2019/0/19
/819/src,...
The "removeorphanedrcode" option on the compile will automatically delete r-code that cannot be associated with any
source code when the code is compiled. For example is "someprogram.p" was compiled into "someprogram.r" at some
point in time and then later "someprogram.p" was removed, "someprogram.r" would be deleted the next time the code was
compiled.
code.mfg.removeorphanedrcode=true
If you are on a system with multiple cores, the performance of the compile may be improved by allocating more threads to
the compile.
code.mfg.threads=4
40
QAD Adaptive ERP Configuration and Administration Guide
41
QAD Adaptive ERP Configuration and Administration Guide
Configuring Compiles
Progress source code compilation is configured through instances of the code configuration type:
code.INSTANCE
42
QAD Adaptive ERP Configuration and Administration Guide
Ex. Configure the compile of customized operational source code for development.
code.mfg-customizations.dev=true
The dev setting is a "convenience" setting that implies the following settings (see yab help "code." for details on each of
these settings) :
forceencrypted=false
scan=false
removeorphanedrcode=false
skipbeforeimagetruncation=true
nometa=true
Developers on multi-core servers might also experiment with the threads setting to see if it improves performance.
The dev option disables the incremental compile (nometa=true). The compile will recompile ALL source code unless the
scope of the compile is defined (see below).
Ex. List the compile commands associated with the customized operational source code compile:
43
QAD Adaptive ERP Configuration and Administration Guide
PROCESSES
code-mfg-customizations-customizations-default-update
Recompiles 'mfg-customizations:customizations-default' source code.
code-mfg-customizations-locate Locates
files associated with a compile.
code-mfg-customizations-rebuild Removes
and recompiles all 'mfg-customizations' code.
code-mfg-customizations-remove Removes
all 'mfg-customizations' compiled code.
code-mfg-customizations-update
Recompiles all 'mfg-customizations' source code.
Following the previous example, if the "default" source and the "another" source do not contain overlapping files then the
following commands can be used to limit the scope of the compile to either source:
Source Command
default code-mfg-customizations-customizations-default-update
another code-mfg-customizations-customizations-another-update
These compile commands can be quite long. You can define an "alias" for any command to shorten the name.
build/config/configuration.properties
process.alias1.id=cpld
process.alias1.depends=code-mfg-customizations-customizations-
default-update
process.alias2.id=cpla
process.alias2.depends=code-mfg-customizations-customizations-
another-update
cpld (1 task)
------------------------------------------------------------------
-----------
1/1 code-mfg-customizations-customizations-default-update OK
(0.406 s)
------------------------------------------------------------------
-----------
44
QAD Adaptive ERP Configuration and Administration Guide
The Progress compile must be invoked using PROPATH relative paths to locate the files to compile (compiling with
absolute paths produces different results). A single source compile may reference a file outside of the source if another
source has a different version of the file and is higher on the compile PROPATH.
Compile List
A compile list may be provided to define the scope of the compile using the devlist setting.
code.mfg-customizations.devlist=${customizations.mfg.dir}/dev-compile.lst
The compile list should enumerate the source code files to compile (one per line) using relative paths resolved against the
compile PROPATH.
When the devlist setting is defined, the compilelist and sources settings associated with the compile are
ignored.
Validating Changes
Changes that are validated with developer optimizations enabled should be re-verified with developer optimizations
disabled and without any limitations on the scope of the compile. This validation ensures that the state of the system can
be reliably reproduced in non-development environments and is not dependent on partial or incomplete compilation of the
source code. If the devlist setting was configured it should be disabled for this verification.
Ex. Compile the customized operational source code with development optimizations disabled.
45
QAD Adaptive ERP Configuration and Administration Guide
46
QAD Adaptive ERP Configuration and Administration Guide
Ex. Compare files where there is a mixture of encrypted and unencrypted versions.
47
QAD Adaptive ERP Configuration and Administration Guide
Ex. List overridden standard/patched operational source code files, where the overriding file (the file that has won) is not
distributed in a package.
48
QAD Adaptive ERP Configuration and Administration Guide
It is also possible to search for a file in all compiles by not specifying an instance.
49
QAD Adaptive ERP Configuration and Administration Guide
build/config/configuration.properties
code.mfg.keepxref=true
Ex. Recompile all operational code to force the generation of XREF files for all programs.
The XREF files are generated into the directory where the rcode is written.
[RCODE DIRECTORY]/.meta/xref
dist/mfg/.meta/xref/us/bm/bmasiq.p
XREF output will only be generated for programs that are not encrypted.
50
QAD Adaptive ERP Configuration and Administration Guide
code.mfg.debuglist.includes=us/bm/bmasiq.p
Ex. Configure DEBUG-LIST output for all the operational programs in the 'us/bm' directory.
code.mfg.debuglist.includes=us/bm/*
code.mfg.debuglist.includes=**/*
The DEBUG-LIST files will be generated into the directory where the rcode is written.
[RCODE DIRECTORY]/.meta/debug
dist/mfg/.meta/debug/us/bm/bmasiq.p
DEBUG-LIST output will only be generated for programs that are not encrypted. All selected programs will be recompiled
(even if they have not changed.)
Optional configuration:
It is also possible to modify the output file extension. The default extension is .p and it can be modified with the following
setting:
code.mfg.listing.output.extension=.i
51
QAD Adaptive ERP Configuration and Administration Guide
Compile Databases
The db.qadcpl and db.qadrcode databases have a special role in some compiles.
The system will automatically mirror schema configured for the db.qaddb database to the db.qadcpl database. To prevent
this mirroring set "schema.INSTANCE.qra=true".
52
QAD Adaptive ERP Configuration and Administration Guide
code.mfg.listing.includes=us/bm/bmasiq.p
Ex. Configure DEBUG-LIST output for all the operational programs in the 'us/bm' directory.
code.mfg.listing.includes=us/bm/*
code.mfg.listing.includes=**/*
The LISTING files will be generated into the directory where the rcode is written.
[RCODE DIRECTORY]/.meta/listing
dist/mfg/.meta/listing/us/bm/bmasiq.p
LISTING output will only be generated for programs that are not encrypted. All selected programs will be recompiled (even
if they have not changed.)
Optional configuration:
When generating the LISTING output file, Progress allows 3 parameters to be passed into the compiler:
APPEND:
Appends the current listing to the contents of the listing file. If you do not use the APPEND option, a new listing file will be
created, replacing any file of the same name.
code.mfg.listing.append=true
PAGE-SIZE:
Identifies the number of lines to a page in the listing file. The value should be an Integer and the default page size is 55.
The value must be between 10 and 127, inclusive.
code.mfg.listing.page.size=70
PAGE-WIDTH
Identifies the number of page columns in the listing file. The value should be an Integer the default page width is 80. The
value must be between 80 and 255, inclusive. The YAB default is set to 92. If any other value for page width is needed,
this can be overwritten with the following property:
code.mfg.listing.page.width=90
53
QAD Adaptive ERP Configuration and Administration Guide
It is also possible to modify the output file extension. The default extension is .p and it can be modified with the following
setting:
code.mfg.listing.output.extension=.i
54
QAD Adaptive ERP Configuration and Administration Guide
Auditing
The topics in this section cover the setup and management of database auditing. Consult the Auditing chapter in the QAD
Security Administration Guide for more information on the configuration of auditing in QAD Enterprise Edition.
Enable Auditing
Disable Auditing
Configuring Audit Permissions
Importing Policy Files
Archiving Records
Configure Archive Database Connection
Manage Archive Database Server
Some of the steps described in the Auditing chapter have been pre-configured as noted below:
Enabling Auditing for the The databases are all pre-configured with database areas to store auditing data and
Database indexes. See Enable Auditing to enable auditing on databases.
Configuring Database The default setup grants audit permissions to the operating system account that created the
Options and Audit instance. In a production environment, the guidance in this section would be followed.
Permissions
Importing Audit Policy Audit policy files are loaded as described in the QAD Security and Controls documentation,
but the location of the audit policy files has changed. See Importing Policy Files for more
details.
Setting Archive See Configure Archive Database Connection and Manage Archive Database Server for
Database Connection more information on connecting to the archive database.
Customizing Archive The scripts have been replaced by the commands described in Archiving Records.
/Load Scripts
Loading Electronic The data files to load with program E-Sig Initial Data Load (36.12.14.13) are available in the
Signature Initial Data config/electronic-signature directory.
55
QAD Adaptive ERP Configuration and Administration Guide
Enable Auditing
The preferred way to enable auditing is using the database setting db.INSTANCE.audit.
db.qaddb.audit=true
If auditing is not enabled it will be enabled during an update (or directly by running database-[INSTANCE]-
auditing-update when the environment is offline). When auditing is enabled on a database, non-primary indexes
on auditing tables will be deactivated, except for archive databases (databases whose configuration name contains
"qadarc" as in "db.qadarc"), to improve performance and limit the growth of storage areas used by audit data, while
supporting reporting on the audit data in the archive database.
Historically YAB supported enabling auditing with an ad-hoc request and continues to do so for backwards compatibility:
yab database-[INSTANCE]-auditing-enable
YAB will use storage areas named AUDIT_DATA and AUDIT_IDX to store the auditing data and indexes when auditing is
enabled. When a database is created by YAB these storage area names are automatically added to the structure of the
database. Alternative storage areas may be used by configuring the areas for each database (and ensuring the database
has the storage areas defined using Progress prostrct add).
db.qaddb.audit.area=AUDIT_DATA
db.qaddb.audit.indexarea=AUDIT_IDX
56
QAD Adaptive ERP Configuration and Administration Guide
Disable Auditing
The preferred way to disable auditing is using the database setting db.INSTANCE.audit.
db.qaddb.audit=false
If auditing is enabled it will be disabled during an update (or directly by running database-[INSTANCE]-
auditing-update when the environment is offline).
Historically YAB supported disabling auditing with an ad-hoc request and continues to do so for backwards compatibility:
yab database-[INSTANCE]-auditing-disable
57
QAD Adaptive ERP Configuration and Administration Guide
SETTINGS
Accepts: audit-
administrator, application-audit-event-inserter, audit-data-archiver,
audit-data-reporter
Ex. Grant "Audit Administrator" permission to two users and "Audit Archiver" permission to another user.
db.qaddb.audit.auth.admin.users=audit-admin1,audit-admin2
db.qaddb.audit.auth.admin.permissions=audit-administrator
db.qaddb.audit.auth.archiver.users=audit-archiver
db.qaddb.audit.auth.archiver.permissions=audit-data-archiver
Audit permissions are applied during an update (or directly by running database-[INSTANCE]-auditing-
update). When permissions are applied, YAB will ensure that the permissions in the database exactly match what is
configured, revoking permissions that do not match the configuration. If no permissions are configured, permissions must
be manually set up using the Progress data dictionary. Some permissions like "Audit Data Reporter" are used within the
application and may be granted to application users.
58
QAD Adaptive ERP Configuration and Administration Guide
config/auditing/policies.xml
config/auditing/qadmainpolicy.xml
59
QAD Adaptive ERP Configuration and Administration Guide
Archiving Records
Before auditing records can be moved from a source database into the archive database, both the source database and
the archive database must have auditing enabled and the user must have the "Audit Data Archiver" permission. The
archive will export all audit data in the source database, load the exported data into the archive database, and then delete
the exported data from the source database.
To move auditing records from all databases enabled for auditing, execute the command:
Alternatively to move auditing records out of a specific database, execute the following command, where INSTANCE is
the name of the source database:
Configuration settings that begin with "audit" are used to configure how audit records are handled.
SETTINGS
-- Archiving --
The audit user must be defined in the
source database and in the archive database and granted the 'Audit Data
Archiver'
permission in each database. For
example, the command 'database-qaddb-auditing-archive' moves audit
records from the
QADDB database into the archive
database (configured by the 'audit.archive.database' setting), requiring
(in the
factory default configuration) that
the audit user is setup in the 'db.qaddb' and 'db.qadarc' databases.
-- Reporting --
The system maintains a connection
record for the archive database in Audit DB Maintenance (36.12.13.11).
This connection
may be used in application programs
such as Audit Trail Report (36.12.2) to report on audit data. The
connection uses
the 'audit.user' and 'audit.password'
for the (-U) and (-P) parameters. The application user that runs the
report must
have 'Audit Data Reporter'
permissions in the archive database. The application user does not need
to be a Progress
database user.
-- Not Configured --
The 'audit.user' must be configured
in an environment where 'db.INSTANCE.security.authentication' is enabled
to archive
and report on audit data using the
system managed connection. Otherwise, when the 'audit.user' is not
60
QAD Adaptive ERP Configuration and Administration Guide
configured, the
'Audit Administrator', 'Audit Data
Archiver', and 'Audit Data Reporter' permissions will automatically be
granted to
the OS user when a database is
created.
The help associated with the archive command includes these options as well as a few additional options which typically
would be be defined as part of a specific request (e.g. -audit.daterange:"09-07-2005 17:00:00.000-04:00").
61
QAD Adaptive ERP Configuration and Administration Guide
PROCESS
database-qaddb-auditing-archive - Moves audit records in the
'qaddb' database to the archive database.
OPTIONS
Name Description
----- -----------
audit.daterange Used to limit the records that will be
archived.
62
QAD Adaptive ERP Configuration and Administration Guide
63
QAD Adaptive ERP Configuration and Administration Guide
build/config/configuration.properties
dbserver.qadarc.manual=false
64
QAD Adaptive ERP Configuration and Administration Guide
QXtend
Reapply QXtend Defaults
65
QAD Adaptive ERP Configuration and Administration Guide
66
QAD Adaptive ERP Configuration and Administration Guide
Key Commands
clean
code-mfg-customizations-update
code-mfg-update
config
database-storage-area-resolve
env-info
fin-sync-run
help
history
host-update
info
netui-pro-update
reconfigure
restart
shell
start
status
stop
system-diagnostics
system-find
system-package-create
system-process-list
system-updates-list
update
validate
67
QAD Adaptive ERP Configuration and Administration Guide
clean
The clean command performs cleanup activities.
68
QAD Adaptive ERP Configuration and Administration Guide
code-mfg-customizations-update
Compiles the operational source code customizations.
69
QAD Adaptive ERP Configuration and Administration Guide
code-mfg-update
Compiles the standard operational source code including patches.
70
QAD Adaptive ERP Configuration and Administration Guide
config
The config command is used to query configuration settings. The command shows the current configuration and will
reflect recent changes even if they have not been applied yet.
The (-trace) option is used to understand how a setting was resolved to its current value.
[1: build/config/configuration.properties]
languages=us,ge
[2: build/config/packages/yab-ee-foundation/1/5/0/16/important/yab-
ee-foundation.properties]
languages=us
The (-x) option enables a "single line" format where each setting is limited to a single line of the output.
71
QAD Adaptive ERP Configuration and Administration Guide
The search phrase may contain a "*" wildcard to match zero or more characters (and it is generally a good idea to put the
phrase in quotes to prevent the shell from interpreting the wildcard character). Here are some additional commands for
frequently queried resources:
Command Description
72
QAD Adaptive ERP Configuration and Administration Guide
The (-show-validation) option is used to list the validation rule that applies to the configuration.
aia.default.logfile=/qad/sbox/004/user/sji/01/whole2017/build/logs/aia-
default.log
(aia.default.logfile: req) (?aia.default.logfile: parentdir)
73
QAD Adaptive ERP Configuration and Administration Guide
database-storage-area-resolve
Introduction
The command database-<instance>-storage-area-resolve can provide user an approach to check whether the storage
areas assigned to progress database objects matches the configuration and optionally resolve the inconsistencies.
This command can resolve table, index and CLOB/BLOB field storage area inconsistencies between configured schema
definition and actual installed database. It will apply the specified configured storage area definition to the installed
database after executing with -resolve option.
The table and index storage area are defined in schema definition file(.df) as "AREA <STORAGE_AREA>" under the table
or index definition.
The CLOB/BLOB fields storage area are defined in schema definition file(.df) as "LOB-AREA <STORAGE_AREA>" under
the field definition.
Furthermore for the storage area, you can find the definitions in the structure file(.st).
table no The table storage area inconsistency can be resolved both online and
offline.
index no The index storage area inconsistency can be resolved both online and
offline
CLOB/BLOB field yes The CLOB/BLOB field storage area inconsistency must be resolved with
offline
For the processing flow, the process will use the existing schema what is in use to create a temporary database(just
structure without data loading). Then to use the progress query to compare temporary database and the installed
database to list all the inconsistencies as a result.
If the -resolve option is explicitly defined in the command, the process will continue to resolve the inconsistencies as the
following processing steps.
For the case resolving CLOB/BLOB fields storage area, it needs dump the current data in the database first. Then drop
the table which contains the CLOB/BLOB fields. The schema update process will recreate all the table includes storage
area changes after dropping the target table. After the recreation, load back the backup data. Since this scenario needs to
dump/drop/load, offline is pre-requisite.
For the case resolving only table storage area, the process will use progress command tablemove to applied the storage
area changes.
For the case resolving only index storage area, the process will use progress command idxmove to applied the storage
area changes.
For the hybrid case(contains both table and index area change), it depends on the target index area is single or multiple. If
the target index area is single, we can apply both table and index storage area changes in single one tablemove comman
d instead of processing them separately. If the target index area is multiple, we need to apply all the indexes changes one
by one first, then apply table storage area changes after the index area changes applied.
Options
Name Description
----- -----------
resolve Correct the inconsistencies listed in report.
Default: false
74
QAD Adaptive ERP Configuration and Administration Guide
Default
resolve false Only report the inconsistencies. For resolving the inconsistencies, explicitly specified is
necessary.
Examples
The following examples are using qadhlp as a sample for instance.
In the output report, "Installed" means the object storage area in use and "Configured" means the storage area configured
in the schema definition file which maybe still not be applied.
yab database-qadhlp-storage-area-resolve
output
$ yab database-qadhlp-storage-area-resolve
output
75
QAD Adaptive ERP Configuration and Administration Guide
76
QAD Adaptive ERP Configuration and Administration Guide
env-info
The env-info command reports information about the environment.
USER INTERFACES
Web https://vmlwtb0002.qad.com
/clouderp
Windows http://vmlwtb0002.qad.com:
22000/qadhome
Character scripts/client-[us,ch,cs,
cz,du,fr,ge,it,jp,ko,ls,pl,po,tw]
LAYOUT
Logs /dr01/qadapps/systest/build
/logs
Databases /dr01/qadapps/systest
/databases
Scripts /dr01/qadapps/systest
/scripts
Backups /dr01/dbs/backup
Customizations /dr01/qadapps/systest
/customizations
Patches /dr01/qadapps/systest
/patches
ENVIRONMENT
Name test
Type development
Created 2020-02-07
Last Update 2020-02-07
Last Configuration Change 2020-03-27
Online yes
PREREQUISITES
Console /dr01/qadapps
/yab 1.11.0.21
OpenEdge /tech/progress
/dlc1175_009 11.7.5.9
Java /tech/java/jdk1.8.0
_221 1.8.0.221
Python /tech/python/centos-69/2.
7.14/bin/python 2.7.14.0
SERVICES
CSS http://vmlwtb0002.qad.com:
22000/qadcss/cgi-bin/cgiip/WService=ws-css/lg/lg_login.html
Desktop http://vmlwtb0002.qad.com:
22000/qadui
Platform API Help http://vmlwtb0002.qad.com:
22000/platform-api
QXtend Inbound http://vmlwtb0002.qad.com:
22171/qxi
QXtend Outbound http://vmlwtb0002.qad.com:
22171/qxo
WebSpeed Workshop http://vmlwtb0002.qad.com:
22000/qadui/cgi-bin/cgiip/WService=ws-default/workshop
77
QAD Adaptive ERP Configuration and Administration Guide
SYSTEM
Host vmlwtb0002.qad.com
IP 167.3.190.30
CPU 4
OS Linux-3.10.0-693.2.2.el7.
x86_64-x86_64-with-centos-7.4.1708-Core
/dev/sdd1 56.62 GB / 68.78 GB (82.3%)
/dev/sda1 1.86 GB / 9.71 GB (19.1%)
/dev/sdb1 46.76 GB / 98.30 GB (47.6%)
78
QAD Adaptive ERP Configuration and Administration Guide
fin-sync-run
The fin-sync-run command runs Financials synchronization.
79
QAD Adaptive ERP Configuration and Administration Guide
help
The help command displays documentation for commands and configuration settings.
The (-command) option restricts the output to commands and the (-setting) option restricts the output to settings. As a
convenience, the command-help and config-help commands are available to search either domain
exclusively.
Attention
The (-command) and (-setting) option are not implemented before YAB 1.9, so if the YAB client version is lower than 1.9.
Those options should still be (-c) for command and (-s) for setting.
When executed without any arguments the most important commands are displayed:
PROCESSES
If an argument is supplied and it exactly matches the name of a process or a configuration setting, the documentation for
that resource will be displayed.
DESCRIPTION
yab config [KEY] [KEY] [KEY]...
KEY
The key of the setting(s) to print. The meta character '*' is used
to match 0 or more characters.
If no keys are defined, all configuration settings with a value are
printed, and when (-all) is
defined, settings without a value are included as well. When using
meta characters, quote the
argument to prevent the shell from evaluating the meta character.
80
QAD Adaptive ERP Configuration and Administration Guide
OPTIONS
Name Description
----- -----------
all When true includes settings without a value.
Default: false
81
QAD Adaptive ERP Configuration and Administration Guide
SETTINGS
Summary help is displayed for all commands and configuration settings that start with the argument.
PROCESSES
82
QAD Adaptive ERP Configuration and Administration Guide
83
QAD Adaptive ERP Configuration and Administration Guide
SETTINGS
84
QAD Adaptive ERP Configuration and Administration Guide
PROCESSES
adminserver-log-print
Prints the AdminServer log.
adminserver-plugins-configure
Configures the AdminServerPlugins.property file.
adminserver-rebuild
Rebuilds the AdminServer.
adminserver-remove
Removes the AdminServer.
adminserver-script
Generates scripts to control the AdminServer.
adminserver-start
Starts the AdminServer.
adminserver-status
Checks the status of the AdminServer.
adminserver-stop
Stops the AdminServer.
adminserver-update
Updates the AdminServer.
aia-default-log-print
Prints a file.
aia-default-rebuild
Rebuilds the 'default' internet adapter.
aia-default-remove
Removes the 'default' internet adapter.
aia-default-status
Checks the status of the 'default' internet adapter.
aia-default-update
Updates the 'default' internet adapter.
aia-log-print
Prints the log of all internet adapters.
aia-rebuild
Rebuilds all internet adapters.
aia-remove
Removes all internet adapters.
aia-status
Checks the status of all internet adapters.
aia-update
Updates all internet adapters.
aim-client-us-update
(Re)generates a file.
...
85
QAD Adaptive ERP Configuration and Administration Guide
history
The history command reports on the YAB command history.
The history command parses the build/logs/yab.log file and is limited to reporting on the commands recorded in the log
file.
Help for the command shows additional ways to filter the data by timespan and date.
PROCESS
history - Shows commands from the YAB log file.
DESCRIPTION
yab history
yab history [TIMESPAN]
TIMESPAN
A timespan of interest (e.g. "2 days" to print commands from the
last two days).
MS,MILLISECOND,MILLISECONDS
S,SECOND,SECONDS
M,MINUTE,MINUTES
H,HOUR,HOURS
D,DAY,DAYS
W,WEEK,WEEKS
The date filters expect an ISO date matching the format in the log
file.
86
QAD Adaptive ERP Configuration and Administration Guide
OPTIONS
Name Description
----- -----------
date A specific date (or time) to show
commands from (e.g. '2020-01-28' or '2020-01-28 13:09').
Default: build/logs/yab.log
87
QAD Adaptive ERP Configuration and Administration Guide
host-update
If an environment is moved from one host to another host, without changing the filesystem layout, host-update updates the
application configuration files and database / application settings.
host=devel.qad.com
2. Execute
88
QAD Adaptive ERP Configuration and Administration Guide
info
The info command displays the packages configured in an environment. The command shows the current configuration
and will reflect recent changes even if they have not been applied yet.
Column Description
4 Will have the value of (new) for all configured packages that have not been applied with a successful update
.
INSTANCE
/dr01/qadapps/qea
MODULES
|- archiving 1.0.0.78
local
|- assistance-help-ee 2017.0.0.3
local
|- base-api 1.1.0.79
local
|- fin 2017.0.17.536
local
|- fin-apidoc 2017.1.80.5
local
|- fin-bin64-proxy 2017.1.80.5
local
...
89
QAD Adaptive ERP Configuration and Administration Guide
INSTANCE
/dr01/qadapps/qea
MODULES
...
|- yab-ee-app 1.6.0.18
local
|- yab-conv 1.6.0.8
local
|- yab-core 1.6.0.17
local
|- dde-ant 2.5.0.1
local
|- dde-build 2.5.0.122
local
|- dde-core 2.5.0.4
local
|- dde-registry 2.5.0.3
local
|- qpm 3.0.0.10
local
|- yab 1.6.0.56
local
|- yab-client 1.6.0.56
local
|- yab-install 1.6.0.35
local
|- yab-test 1.6.0.1
local
|- yab-ee-foundation 1.6.0.116
local
|- yab-qra 1.6.0.52
local
|- yab-qxtend 1.6.0.48
local
The output when a sub-component is overridden with a different version (dde-build-2.5.0.122 => dde-build-2.5.0.122).
90
QAD Adaptive ERP Configuration and Administration Guide
INSTANCE
/dr01/qadapps/qea
MODULES
...
|- yab-ee-app* 1.6.0.18 local
|- yab-conv 1.6.0.8 local
|- yab-core* 1.6.0.17 local
|- dde-ant 2.5.0.1 local
|- dde-build* (2.5.0.122) 2.5.0.123
local (new)
|- dde-core 2.5.0.4 local
|- dde-registry 2.5.0.3 local
|- qpm 3.0.0.10 local
|- yab 1.6.0.56 local
|- yab-client 1.6.0.56 local
|- yab-install 1.6.0.35 local
|- yab-test 1.6.0.1 local
|- yab-ee-foundation 1.6.0.116 local
|- yab-qra 1.6.0.52 local
|- yab-qxtend 1.6.0.48 local
Ex.
91
QAD Adaptive ERP Configuration and Administration Guide
netui-pro-update
Compiles the Desktop source code including customizations and patches.
92
QAD Adaptive ERP Configuration and Administration Guide
reconfigure
The reconfigure command may be used to apply some configuration changes as an alternative to an update. The reconfigu
re command is significantly faster than an update and will not restart the environment, but some configuration changes
may not have an effect until the environment is restarted.
yab reconfigure
Unfortunately there is not a simple rule describing when reconfigure may be used instead of an update and like an update,
the activities associated with a reconfigure are continually evolving. In general, a reconfigure is reserved for pushing out
small configuration changes (i.e regenerating scripts after increasing the value of a setting) and not major structural
changes like adding a new database, applying schema, or upgrading a product.
One technique for understanding where reconfigure can be used is to compare the processes associated with each
command.
Test the use of reconfigure to apply a specific change in a non-production environment first.
Changes that can only be applied when a service is running may not be applied when the environment is offline.
93
QAD Adaptive ERP Configuration and Administration Guide
restart
The restart command executes an environment stop followed by an environment start.
94
QAD Adaptive ERP Configuration and Administration Guide
shell
The shell command starts an interactive shell in which commands can be entered and executed with TAB auto-
completion. The shell is useful for learning commands.
Starting Shell
The shell prompt (test in the example) is set to the value of the environment.id setting:
Executing Commands
In the shell the TAB key will show possible completions for the text entered and when only one possible completion exists
will automatically fill in the remaining characters.
enterprise-edition> m
metadata-fincore-update metadata-mfgcoreplus-update
metadata-qracore-update
metadata-update metadata-validate module-
adg-stage
module-adg-update module-archiving-stage module-
archiving-update
module-cmr-stage module-cmr-update module-
ctd-stage
module-ctd-update module-fin-stage module-
fin-update
module-fincore-update module-fss-stage module-
fss-update
module-grs-stage module-grs-update module-
kanban-stage
module-kanban-update module-ltwb-stage module-
ltwb-update
module-mfg-stage module-mfg-update module-
mfgcoreplus-update
module-mrc-stage module-mrc-update module-
mswpsw-stage
module-mswpsw-update module-periodic-costing-stage module-
periodic-costing-update
module-productstructure-stage module-productstructure-update module-
qracore-update
module-uca-stage module-uca-update module-
uig-stage
module-uig-update module-wms-stage module-
wms-update
mongodb-backup mongodb-backup-list
mongodb-backup-remove
mongodb-rebuild mongodb-remove
mongodb-restore
mongodb-script mongodb-start
mongodb-status
95
QAD Adaptive ERP Configuration and Administration Guide
mongodb-stop mongodb-update
mongodbreplica-initiate
test> mo
module-adg-stage module-adg-update module-
archiving-stage
module-archiving-update module-cmr-stage module-
cmr-update
module-ctd-stage module-ctd-update module-
fin-stage
module-fin-update module-fincore-update module-
fss-stage
module-fss-update module-grs-stage module-
grs-update
module-kanban-stage module-kanban-update module-
ltwb-stage
module-ltwb-update module-mfg-stage module-
mfg-update
module-mfgcoreplus-update module-mrc-stage module-
mrc-update
module-mswpsw-stage module-mswpsw-update module-
periodic-costing-stage
module-periodic-costing-update module-productstructure-stage module-
productstructure-update
module-qracore-update module-uca-stage module-
uca-update
module-uig-stage module-uig-update module-
wms-stage
module-wms-update mongodb-backup
mongodb-backup-list
mongodb-backup-remove mongodb-rebuild
mongodb-remove
mongodb-restore mongodb-script
mongodb-start
mongodb-status mongodb-stop
mongodb-update
mongodbreplica-initiate mongodbreplica-update-scripts
enterprise-edition>
Command arguments are defined in the same manner as from the OS shell.
[build/config/packages/yab-ee-foundation/1/5/0/16/default/yab-ee-
foundation.properties]
# @port +0
tomcat.default.httpport=
1.050 s
enterprise-edition>
The UP/DOWN arrow keys will cycle through the command history.
Exiting Shell
96
QAD Adaptive ERP Configuration and Administration Guide
97
QAD Adaptive ERP Configuration and Administration Guide
start
The start command starts the environment.
The start command will start any servers that are not running and can be run repeatedly without any harm. If a server was
not running when the command was processed it will display a STARTED status, otherwise an OK status if it was already
running.
Some of the servers are started in the background. For these servers, STARTED indicates that a request was submitted to
start the server. To check on the status of the background process use the status command.
98
QAD Adaptive ERP Configuration and Administration Guide
appserver-fin-start (1 task)
-------------------------------------------------------------------------
----
1/1 appserver-fin-start STARTED
(11.859 s)
-------------------------------------------------------------------------
----
99
QAD Adaptive ERP Configuration and Administration Guide
status
The status command shows the status of environment servers.
The status command will return STARTED if the server is started and STOPPED if the server is stopped. The status of
individual servers can be displayed by executing the appropriate command.
appserver-fin-status (1 task)
-------------------------------------------------------------------------
----
1/1 appserver-fin-status STARTED
(0.536 s)
-------------------------------------------------------------------------
----
100
QAD Adaptive ERP Configuration and Administration Guide
101
QAD Adaptive ERP Configuration and Administration Guide
stop
The stop command stops an environment.
The stop command will stop any servers that are running and can be run repeatedly without any harm. If a server was
running when the command was processed it will display a STOPPED status, otherwise an OK status if it was not running.
Servers are generally stopped in the reverse order of how they are started. Individual servers can be stopped by
executing the appropriate command.
102
QAD Adaptive ERP Configuration and Administration Guide
103
QAD Adaptive ERP Configuration and Administration Guide
system-diagnostics
The command system-diagnostics creates an archive that contains diagnostic files from the environment.
The archive is created in the current working directory using the naming pattern:
Options
Name Description
------------- ------------------------
threshold The maximum number of megabytes to capture from each file. If the threshold is
exceeded,
the threshold number of megabytes will be captured from the end of the file.
Default: 10
Examples
Ex. Create a diagnostics archive in the current working directory:
EX. Create a diagnostics archive including files within the customizations directory:
EX. Create a diagnostics archive named 'myenv.zip' where no log file included in the archive will exceed 5 MB
104
QAD Adaptive ERP Configuration and Administration Guide
system-find
The system-find command searches for files referenced from configuration settings.
Ex. Find the data file that distributes the 'ab001' browse
Ex. Find the tax programs reached from the operational compile.
105
QAD Adaptive ERP Configuration and Administration Guide
system-package-create
The system-package-create command creates a package.
Ex. Create a package named 'test' that distributes all of the files in the current working directory.
Ex. Create another version of the package named 'test' that distributes all of the files in the current working directory.
Ex. Create a new package by repackaging an existing package with updates from a directory named 'updates'.
106
QAD Adaptive ERP Configuration and Administration Guide
system-package-create (1 task)
-------------------------------------------------------------------------
----
1/1 system-package-create OK (2.260 s)
-------------------------------------------------------------------------
----
> ls -l test*
-rw-rw-r-- 1 wtb devel 300 Dec 16 2016 test-1.0.0.0.zip
-rw-rw-r-- 1 wtb devel 79 Dec 16 2016 test.version
system-package-create (1 task)
-------------------------------------------------------------------------
----
1/1 system-package-create OK (0.882 s)
-------------------------------------------------------------------------
----
> ls -l test*
-rw-rw-r-- 1 wtb devel 300 Dec 16 06:00 test-1.0.0.0.zip
-rw-rw-r-- 1 wtb devel 299 Dec 16 2016 test-1.0.0.1.zip
-rw-rw-r-- 1 wtb devel 79 Dec 16 2016 test.version
The primary value of a package is that it associates a version with a set of files. When it is necessary to distribute updates
to these files, a new package should be created with a higher version. Reusing versions eliminates one of the primary
benefits of packages.
107
QAD Adaptive ERP Configuration and Administration Guide
system-process-list
The system-process-list command displays the commands that would be executed if a command were executed.
Ex. Display the commands that would be executed if the environment was updated.
1. qxtend-stage
2. stage
3. adminserver-script
4. nameserver-script
5. database-script
6. appserver-script
7. webspeed-script
8. tomcat-script
9. daemon-script
10. mongodb-script
11. mongodbreplica-update-scripts
12. qxo-services-script
13. script-update
14. script-master-update
15. path-fin-dirs-update
16. path-foundation-appserver-update
17. path-foundation-client-update
18. path-foundation-code-update
...
Ex. Display the commands that would be executed if the environment was started.
1. adminserver-start
2. nameserver-start
3. database-qadadm-start
4. database-qaddb-start
5. database-qadhlp-start
6. database-qxevents-start
7. database-qxodb-start
8. database-start
9. appserver-fin-start
10. appserver-mfg-start
...
108
QAD Adaptive ERP Configuration and Administration Guide
system-updates-list
Introduction
Options
Usage & Examples
Default
-package
Usage
Example
-version-level
Usage
Example
-skip-compliance
Usage
Usage
-all
Usage
-depth
Usage
Example
Introduction
The command system-updates-list can provide user a convenient approach to check for updates to modules installed in
the YAB instance.
Options
> yab help system-updates-list
PROCESS
system-updates-list - Lists the updates that are available.
OPTIONS
Name Description
----- -----------
package Lists updates for a package by name (e.
g. 'abc').
Wildcard matching is supported.
*: 0 or any multiple character(s)
.: any single character
e.g.
foo* => foo, foo-bar, ...
fo. => foo, fox, fog, ...
*-bar => any string ends with "-bar"
*foo* => any string contains "foo"
e.g. 1.2.3.4
Major = 1
Minor = 2
Patch = 3
109
QAD Adaptive ERP Configuration and Administration Guide
Build = 4
package -
version-level patch
skip-compliance false
exclude-current-version false
all false
depth 1
By default, the command will only list packages which follow the versioning standard and have available patch updates.
-package
The -package option limits the check for updates to the specified package (s). Wildcard matching is supported to include
multiple packages.
Usage
110
QAD Adaptive ERP Configuration and Administration Guide
Wildcard matching
Example
1.Specify a single package
-version-level
The option -version-level is to restrict the output list in a specified version level.
Usage
Versioning convention
A version consists of a set of four digits arranged from the most significant to the least significant value (when read from left
to right).
The integer values are associated with the following names: major, minor, patch, build.
e.g. foo-bar-1.2.3.4 (Package name is foo-bar, major = 1, minor = 2, patch = 3, build = 4.)
Example
Check for any updates up to and including minor version changes.
-skip-compliance
The option -skip-compliance is used to check updates for all packages regardless of whether they conform to version
standards.
Usage
INSTANCE
/qad/sbox/007/user/ucm/02/trunkcore
111
QAD Adaptive ERP Configuration and Administration Guide
CATALOGS
/qad/local/sandbox/cache
http://packages.qad.com
http://plli05:32000/
...
-exclude-current-version
112
QAD Adaptive ERP Configuration and Administration Guide
The option -exclude-current-version is to hide the current version column in the output list. The current version column will
be displayed by default.
Usage
-all
This option -all is a row control option. The command will only output the package(s) which have updates available by
default. By using this option the output will list all the packages whether or not they have updates available.
Usage
-depth
This option is used to limit the modules which are displayed. The command will output all package(s) include all the inner
package(s) no matter how deep it is by using value 0 in this option.
By default, the command will only list the top level packages.
Usage
Example
1.List all the package(s) no matter how deep it is.
In default case, the process will just show the package(s) which have updates available. That means only the package that
column UP-TO-DATE is "No" will be displayed.
If you see an asterisk on the right of "Yes", that means this app contains some packages which have updates available in
current condition but hidden by the depth control. You can use option -depth to spread it.
113
QAD Adaptive ERP Configuration and Administration Guide
INSTANCE
/qad/sbox/007/user/ucm/02/trunkcore
CATALOGS
/qad/local/sandbox/cache
http://packages.qad.com
http://plli05:32000/
...
114
QAD Adaptive ERP Configuration and Administration Guide
INSTANCE
/qad/sbox/007/user/ucm/02/trunkcore
CATALOGS
/qad/local/sandbox/cache
http://packages.qad.com
http://plli05:32000/
...
115
QAD Adaptive ERP Configuration and Administration Guide
update
The update command applies configuration changes to the system.
The update command will restart the environment. Some configuration changes can be applied with the reconfigure
command which does not take down the environment.
116
QAD Adaptive ERP Configuration and Administration Guide
validate
The validate command is used primarily to validate YAB configuration settings. The command, for example, will check that
all required settings have a value, that values that expect an integer are assigned a valid value, and so on. A subset of
these validations are automatically performed every time the environment is refreshed.
117
QAD Adaptive ERP Configuration and Administration Guide
System Configuration
System Configuration includes topics related to (re)configuring an environment.
The standard configuration procedure (discussed briefly in the introduction) is to define the configuration changes in build
/config/configuration.properties and then apply the change to the environment with the appropriate YAB command. The up
date command may be used to apply all changes (unless specifically stated otherwise) but it is comprehensive and will
take the environment offline for a period of time. In certain cases, you may receive guidance to apply the change with a
different command (usually reconfigure) as a more efficient alternative.
Example Reconfiguration
We can demonstrate this process flow in action by enabling and disabling 4GL Tracing (extra logging) on the MFG
application server.
List the application servers in the configuration to find/remember the name of the MFG application server in the
configuration.
The settings associated with an application server correspond very closely to the application server settings in the
Progress configuration file ubroker.properties. Print the help for the application server.
Using that information, enable 4GL tracing, by editing configuration.properties and adding the following settings to override
the default values (in all likelihood configuration.properties will not already contain these settings, but if it did we would edit
the existing settings in the file).
build/config/configuration.properties
appserver.mfg.srvrlogginglevel=4
appserver.mfg.srvrlogentrytypes=ASPlumbing,DB.Connects,4GLTrace
Execute the appserver-mfg-update command to apply the configuration change to the environment (which calls
the Progress mergeprop utility to merge the MFG application server configuration into build/work/generated/ubroker.
properties). This command is included in a reconfigure and everything in a reconfigure is included in an update, so we
also could use either of these commands to apply the change. A good rule of thumb is that you can use reconfigure for
updating scripts and changing most Progress settings, but many other changes will require an update.
The changes to ubroker.properties will be picked up by the application server without restarting because we have enabled
runtime updates (other Progress settings may not support dynamic updates).
With 4GL Tracing enabled, the application server will write a lot more information to its log files and this can slow down the
application and consume excessive amounts of disk space, so in this special case it is a good idea to undo the
configuration change after we have captured the data to evaluate. To undo the change, remove the settings from configura
tion.properties and then apply the changes using the same command as before.
118
QAD Adaptive ERP Configuration and Administration Guide
119
QAD Adaptive ERP Configuration and Administration Guide
General Information
Configuration Type System
Configuration Files
Distributing Settings
Configuration File Includes
Undefined Progress Parameters
120
QAD Adaptive ERP Configuration and Administration Guide
[TYPE].[NAME]
To describe resources that may have multiple instances in the environment we use the following pattern:
[TYPE].[INSTANCE].[NAME]
Some of these multiple instance resources are set up to inherit settings from a prototype instance named _base.
A setting is inherited from the prototype unless specifically overridden. The (-trace) option of the config command shows
this relationship.
121
QAD Adaptive ERP Configuration and Administration Guide
[build/config/packages/yab-ee-foundation/1/5/0/16/default/yab-ee-
foundation.properties]
db._base.codepage=utf-8
# @extends db._base
db.test=
db.test.physicalname=test
# @extends dbserver._base
dbserver.test=
dbserver.test.name=db-${db.test.physicalname}
dbserver.test.databasename=${db.test.dir}/${db.test.physicalname}
Here is a table listing some of the important configuration types in the system along with their compatibility with different
OE versions.
122
QAD Adaptive ERP Configuration and Administration Guide
123
QAD Adaptive ERP Configuration and Administration Guide
Configuration Files
Comments
References
Algorithm
Nesting
Wildcard Expansion
Dereferencing Aliases
Annotations
@if
@unless
@end
Built-in If/Unless Tests
Tests
Functions
@extends
@aliasof
@ref
@append
@noappend
@group
@grouporder
@port
@exclude
@patch
@unique
@multiply
Indexers
Examples
Units of Measure
Duration
Size
Configuration settings are defined in configuration files where each setting is defined on a separate line using the syntax:
KEY=VALUE
By convention keys are lowercase and the period is used as a delimiter for compound names (e.g. dbserver.qaddb.
afterimagebuffers). The type system describes additional conventions for configuring "resources" in the environment.
Comments
A line that starts with the hash (#) character is processed as a comment.
References
The value of a setting may reference other settings using the syntax:
${[REFERENCE]}
Ex. Configure the server log file for the MFG application server.
appserver.mfg.srvrlogfile=${appdir.logs}/${name}.server.log
Algorithm
A reference is resolved using the following algorithm:
Resolve the reference relative to the "ancestors" of the referencing key (closest match wins).
Resolve the reference as an absolute reference.
Resolve the reference as a Java system property.
foo.bar.baz=Hello ${user}
124
QAD Adaptive ERP Configuration and Administration Guide
Use an "!" before the reference to resolve the reference only as an absolute reference.
${![REFERENCE]}
If the reference cannot be resolved, the literal reference (e.g. "${user}") is retained. It may be preferable in some situations
to remove the reference when it cannot be resolved. In these cases, the dash modifier may be used to express this intent.
${-[REFERENCE]}
The '#' modified may be used to reference parts of the key by index starting at 0. For example, given the key "foo.bar.baz",
then 0 is the index for "foo", 1 for "bar", and 2 for "baz".
${#[INDEX]}
Nesting
References can be nested.
In the following example the setting russian.dolls has the value "d".
a=d
b=a
c=b
russian.dolls=${${${c}}}
To prevent YAB from interpreting a literal "${" as a property reference, the "$" can be escaped by doubling the "$"
character.
foo.bar=Hello $${user}
Wildcard Expansion
Wildcards may be used to reference multiple values evaluated to a comma-separated list. In the following example, the
value of "another" is "a,b".
foo.bar.setting=a
foo.baz.setting=b
another=${foo.*.setting}
Dereferencing Aliases
The following syntax can be used to dereference settings that might be aliased (see @aliasof annotation below)
${<[REFERENCE]}
In the following example the setting "d" has the value "c" because "a" is aliased to "c" and "d" dereferences "a". The
setting "e" has the value "b" because the setting "b" is not aliased to another setting.
a=>c
b.color=orange
c.color=blue
d=${<a}
e=${<b}
Annotations
An annotation is a special form of comment that provides additional information about the setting that follows the
annotation. Annotations are defined using the syntax:
# @[ANNOTATION NAME]
# @[ANNOTATION NAME] [ANNOTATION VALUES...]
125
QAD Adaptive ERP Configuration and Administration Guide
Care must be taken when editing a file that uses annotations. Annotations are formatted as comments but they do have an
effect on the system. In particular you should be careful commenting out settings with annotations.
The following file defines the setting "b" with the value "bar" and the setting "a" with the value "foo" if the setting "someprop"
is defined.
# @if someprop
a=foo
b=bar
To temporarily remove the setting "a" from the system the file should be backed up. Commenting out "a" would have the
unintended consequence of associating the "@if" annotation with the next setting which in this case is "b".
Ex. Wrong
# @if someprop
# a=foo
b=bar
@if
Asserts a test to be evaluated.
If the test evaluates to FALSE and the test IS final, the configuration document will not be processed any further. If the test
evaluates to FALSE and the test IS NOT final, the properties that follow the test will be skipped until an
@end annotation is defined or the end of the file is reached. The operators '&&' and '||' can be used to evaluate multiple
tests with a single IF statement using a Boolean AND/OR respectively to combine the outcomes, where tests are
processed from left to right. The outcome from tests defined in separate IF/UNLESS statements are combined using an
implicit AND operator.
Variants
# @if [TEST]
# @if [TEST] [&& | ||] [TEST]...
# @if FINAL [TEST]
@unless
Asserts a test to be evaluated.
If the test evaluates to TRUE and the test IS final, the configuration document will not be processed any further. If the test
evaluates to TRUE and the test IS NOT final, the properties that follow the test will be skipped until an @end annotation is
defined or the end of the file is reached. The operators '&&' and '||' can be used to evaluate multiple tests with a single
UNLESS statement using a Boolean AND/OR respectively to combine the outcomes, where tests are processed from left
to right. The outcome from tests defined in separate IF/UNLESS statements are combined using an implicit AND operator.
Variants
# @unless [TEST]
# @unless [TEST] [&& | ||] [TEST]...
# @unless FINAL [TEST]
@end
Ends the scope of one or more tests.
Where "A" is either a key, a function, or a literal. When "A" is a key, the value of the key is evaluated, when "A" is a
function, the return value of the function is evaluated, and when "A" is a literal it is evaluated as is. The determination of
whether "A" should be interpreted as a key, function, or literal, depends on the syntax of "A" and/or the operator chosen as
described in the table below.
126
QAD Adaptive ERP Configuration and Administration Guide
When a test accepts/expects a KEY, the key is configured directly (e.g. "foo"). The value of keys may be referenced in the
test using the standard syntax (e.g. "${foo}"). This is most useful in tests that accept a literal value. In both cases, tests
should only refer to settings that will have been evaluated before the test is evaluated, taking into consideration that
configuration files are processed in order of precedence.
Tests
[KEY/FUNCTION] < [VALUE] foo < bar True if KEY/FUNCTION is less than the VALUE (using a numeric
comparison if appropriate).
[KEY/FUNCTION] <= foo <= bar True if KEY/FUNCTION is less than or equal to the VALUE (using a
[VALUE] numeric comparison if appropriate).
[KEY/FUNCTION] > [VALUE] foo > bar True if KEY/FUNCTION is greater than the VALUE (using a numeric
comparison if appropriate).
[KEY/FUNCTION] >= foo >= bar True if KEY/FUNCTION is greater than or equal to the VALUE (using a
[VALUE] numeric comparison if appropriate).
Functions
first first Finds the first value of the FIND key searching the history from the newest to the oldest
([FIND (package. records, stopping when the key is not configured. If the function is called with a single FIND
/RETURN yab-ee- /RETURN key, that value is returned, otherwise the value of the RETURN key at that point in
KEY]) app. time.
version)
first For example, the function returns "b" for a FIND/RETURN key with the history ["a" -> null ->
([FIND "b" -> "c"] and null for a FIND/RETURN KEY with the history ["a" -> null -> "b" -> "c" -> null]
KEY], or [null].
[RETURN
KEY])
127
QAD Adaptive ERP Configuration and Administration Guide
Care should be taken when nesting if/unless tests. By default the scope of all tests is ended by the "@end" annotation. The
following configuration probably does not do what the author intended. The setting "c" will always be defined (regardless of
whether or not "someprop" is defined, because both tests are ended by the first "@end" annotation.
# @if someprop
a=foo
# @if otherprop
b=bar
# @end
c=baz
# @end
If condition nesting is enabled (see annotation below), "@end" statements end the scope of the nearest test in scope.
# @enable-condition-nesting
@extends
Used to "inherit" the child keys of another key.
Variants
In the following example, "foo.instance1" is configured to extend from "foo._base". The setting "foo.instance1.greeting"
would inherit the value "Hello" from "foo._base", while preserving the overridden value "Hasta Luego" for the setting "foo.
instance1.farewell".
foo._base.greeting=Hello
foo._base.farewell=Goodbye
# @extends foo._base
foo.instance1=
foo.instance1.farewell=Hasta Luego
If the KEY DEST PATTERN is not defined, the implied destination is the key that defines the annotation ("foo.instance1" in
the previous example). The KEY DEST PATTERN may be used to specify an alternative set of destination keys with
support for wildcards. In the following example, any "instance" of "foo" whose name does not begin with an underscore "_"
would automatically inherit from "foo._base".
foo._base.greeting=Hello
foo._base.farewell=Goodbye
foo.instance1=
foo.instance1.farewell=Hasta Luego
foo.instance2=
foo.instance2.farewell=Vaarwel
@aliasof
Used to make a key an alias of another key.
128
QAD Adaptive ERP Configuration and Administration Guide
Defining a key as an alias of another key places the two keys in an equivalence relationship where they have identical
child properties. If we use A to represent the key defining the alias and B to represent the key being aliased, then the child
properties in B are merged to A and the child properties in A are merged to B, where a child property that was defined
both in A and B obtains the value from B. Subsequent updates to the configuration may violate this relationship.
Some operations to enumerate configuration instances will not include aliases in the enumeration.
Variants
# @aliasof [KEY]
Alternatively aliases can be expressed without annotations using the following notation:
or
In the following example, bar would inherit the property (bar.greeting=Hello and bar.farewell=Goodbye) from foo while foo
would inherit the property (foo.baz=true) from bar.
foo.greeting=Hello
foo.farewell=Goodbye
# @aliasof foo
bar=
bar.farewell=Hasta
bar.baz=true
To escape a configuration value that begins with the '>' character use the '\':
foo2=\>foo
An alias setting can be overridden like any other configuration setting. The value that you use to "break" the alias
("_unlink_" in the example below) is not important.
Ex. The QAD Reference Architecture (QRA) database requirements are aliased to the main QADDB database.
db.qadmodule=_unlink_
@ref
Used to add the configuration of another key to this key.
A key may reference multiple keys. A reference may be used to inherit appended values (see @append) while preserving
any ordering information (see @group). In the following example, a would be set to (a=foo,bar,baz,end).
129
QAD Adaptive ERP Configuration and Administration Guide
# @append
# @group 3
d=end
# @append
# @group 1
c=bar
# @append
# @group 2
# @ref c
b=baz
# @append
# @group 0
# @ref b
# @ref d
a=foo
Variants
# @ref [KEY]
@append
Used to indicate that the value should be appended to the existing value if the property is already defined (otherwise the
value is discarded). The append annotation may be defined any any layer in the precedence and will apply to all values.
If multiple sources define an append delimiter for the property, the delimiter defined by the source with the highest
precedence will be used, otherwise if no sources define the delimiter, a comma will be used.
Escape Character
\n Newline
\t Tab
\u0032 Space
Variants
The value should be appended to an existing value using a comma as the delimiter.
# @append
The value should be appended to an existing value using the specified delimiter.
# @append [DELIMITER]
130
QAD Adaptive ERP Configuration and Administration Guide
There are a couple of situations where the "@append" annotation may not work as anticipated:
Appending to a key that was inherited using "@extends" overwrites the extended value even when "@append" is used. In
the following example the value of "example.greeting" is not "Hello, World" but "World".
base.greeting=Hello
# @extends base
example=
# @append
example.greeting=World
The config command may be used to verify any configuration change and the (-trace) option shows the underlying details of
how the value was computed.
@noappend
Used to prevent values from being appended to the property.
The annotation only has an effect when it is defined by the highest precedence source for the property.
Variants
# @noappend
code.mfg.databases=db.qadcpl,db.qadadm,db.qadhlp,db.qadrcode
@group
Used in conjunction with @append to obtain a desired value ordering.
The appended value is guaranteed to be preceded by all values associated with lower group indexes and followed by all
values associated with a higher group indexes. Values associated with the same group are ordered by source
precedence unless ordering hints or the @grouporder annotation is defined. When the @grouporder annotation is defined
for a group it overrides all ordering hints for that group.
An ordering hint is defined using the syntax [+|-][ID PATTERN] where the ID PATTERN is used to select other group
members by their @id and (-) is interpreted as an instruction to order value before the selected values, whereas (+) is
interpreted as an instruction to order the value after the selected values.
The meaning of a group index depends on the nature of what is being configured. We have given the following
interpretation to group indexes in the context of configuring a PROPATH.
0=Configuration
1=Bootstrap
2=Customizations
3=Patches
4=Extensions
Undefined=Default1
1 The default group is the group assigned when a group index is not defined. To allow for the possibility of introducing
additional non-default groups in the future, members of the default group should not explicitly define a group index.
ID Patterns
An ID pattern may use the '*' character to represent one or more characters and the '?' character to represent a single
character. If an ID is matched by multiple patterns, the longest pattern is assigned the match. The '*' character alone may
be used to match all ID's that are not otherwise matched by a pattern (and this latter use typically only makes sense in the
context of a @grouporder annotation).
Variants
# @group
131
QAD Adaptive ERP Configuration and Administration Guide
# @group [INDEX]
Assign the value to the group and define some ordering hints.
@grouporder
Used to assign a secondary ordering to the members of a @group.
The group members will be ordered in the listed order. Members not specified in the list will be ordered after the listed
members by source precedence. IDs that do not correspond to a member of the group will be ignored. When the @groupor
der annotation is defined for a group it overrides all ordering hints for that group.
Variants
@port
Identifies the property as a TCP-IP port.
Variants
# @port
# @port +[OFFSET]
Identifies the property as a port and configures a preferred range offset and default port.
Assigns a specific port number to a property, using the annotation so YAB will not assign the port to another property.
# @port
some.port=30000
Assigns a well known offset to ports that users might interact with. If for some reason, the port is already allocated the
property will be allocated an available port from the configured port range.
# @port +0
tomcat.default.httpport=
# @port +1
adminserver.port=
Ports which are not typically relevant for users (the majority of ports) should be configured without an offset. To minimize
unnecessary conflict with ports assigned by offset, ports that will accept any valid port are allocated from the upper bound
of a port range counting backwards.
# @port
tomcat.default.serverport=
# @port
adminserver.adminport=
132
QAD Adaptive ERP Configuration and Administration Guide
A default port may be defined to handle cases where a port range is not configured.
# @port +0 22000
tomcat.default.httpport=
@exclude
Used to exclude/ignore the setting and all child settings.
Ex. Excludes the setting 'foo.bar' and 'foo.bar.baz' but not 'foo.barbaz'.
# @exclude
foo.bar=
@patch
Used to "patch" a property value using a regular expression to identify the character sequences to replace.
When the property value is evaluated all character sequences matched by the regular expression are replaced with the
patch value. If the patch value is defined and the regular expression did not match the property value, the patch value will
be appended to the property value using the default delimiter ',' or the delimiter specified. If the patch value is not defined,
all character sequences matched by the regular expression will be removed from the property value.
Patching occurs before property references are evaluated. Use the (-skip-resolution) option on the config command to
see the value of the property to be patched before references are evaluated.
Variants
# @patch /[REGEX]/
# @patch /[REGEX]/[REGEX FLAGS]
# @patch /[REGEX]/ [DELIMITER]
# @patch /[REGEX]/[REGEX FLAGS] [DELIMITER]
Escape Character
\n Newline
\t Tab
\u0032 Space
Ex. Merge "-Bt 3000" into the progress.startup.params setting replacing an existing value (matched by the regex),
otherwise appending the value using a space as a delimiter.
133
QAD Adaptive ERP Configuration and Administration Guide
# @patch /,\$\{code.ict.dir}/
appserver.mfg.propath=
@unique
Used to eliminate duplicate values associated with a setting. When this annotation is defined, only the highest precedence
duplicated value is retained. This is typically used in conjunction with appended values.
@multiply
Multiplies the value of the property.
Variants
# @multiply [MULTIPLIER]
Multiplies the property by the multiplier value.
[build/config/configuration.properties]
# @multiply 1000
foobar=5
Multiplies the property by the multiplier value. If the property value is undefined, uses the property default as the property
value instead.
[build/config/configuration.properties]
# @multiply 1000 10
foobar=${baz}
Indexers
A configuration indexer is a setting that is used to change the value of another setting and has the following syntax:
KEY[INDEX]=VALUE
Where:
Term Description
The key may use the '*" character to represent any name in a compound KEY. For example, the KEY
"appserver.*.srvrstartupparam" would update the "srvrstartupparam" of all application servers.
134
QAD Adaptive ERP Configuration and Administration Guide
The index may have a trailing '*' character to represent 0..n characters. When a trailing '*' is used, the VALUE
is required and the value that is applied is the concatenation of the matched prefix and the VALUE. For
example, if the INDEX is "foo=*" and the VALUE is "baz" and the value of the KEY is "foo=bar", the value of
the KEY will be changed to "foo=baz".
A character is escaped using a character reference "&#nnnn;" where "nnnn" is the Unicode code point of the
character to escape. In practice, the following characters are the only characters that may need to be
escaped:
* *
= =
[ [
Value Interpretation
A primary use case of indexers is to update settings that are argument lists. In some cases, the system can infer whether
an argument is a unary argument or is paired with another argument. For example, the Progress startup parameter (-Bt)
expects the next argument will configure the number of buffers, whereas (-b) is a unary argument that stands on its own.
When removing arguments the NULL and NULL_PAIR values provide the system with the information it needs to do the
right thing in all circumstances. When adding/updating unary arguments that contain both a key and a value without using a
standard delimiter like "=" or ":", it is best to use wildcards in the INDEX to select the argument, which allows the system to
do the right thing in all circumstances.
tomcat.default.startupopts[-Xmx*]=2048m
Indexers are used to update a part of a value without replacing the entire value, which is also how the "@patch"
annotation is used. The main difference between indexers and patches is that patches are applied before property
references have been evaluated whereas indexers are applied after property references have been evaluated. Patches
are able to leverage the expressive power of regular expressions, but in many cases an indexer will provide a more
concise, lucid syntax to configure a change.
Using indexers on settings that are referenced by other settings, can lead to non intuitive results, because indexers are
applied after property references are evaluated. For example, the setting "progress.startup.params" is a list of Progress
startup params used in various Progress sessions. The setting "progress.startup.params.streams" references the "progress.
startup.params" setting adding in stream configuration parameters.
progress.startup.params.streams=${progress.startup.params} -
cpinternal ${db._base.codepage} ...
The solution is to use the "@patch" annotation or apply the indexer to the settings that reference the setting (i.e. "progress.
startup.params.streams" in this example).
The technique used to apply an indexer to a setting depends on the strategy associated with the setting:
Strategy Description
135
QAD Adaptive ERP Configuration and Administration Guide
The default strategy is to process a setting as a comma delimited list. The standard settings are associated with an
appropriate indexer strategy. The "@indexer" annotation my be used to configure the strategy for custom settings.
Examples
Ex. Set the value of the parameter (-Bt) to 20000 adding the value if it does not exist, otherwise replacing the existing
value.
progress.startup.params[-Bt]=20000
Ex. Remove the parameter (-Bt) and its value if they exist.
progress.startup.params[-Bt]=NULL
progress.startup.params[-v6colon]=
progress.startup.params[-v6colon]=NULL
tomcat.*.startupopts[-Xms*]=512m
code.mfg.databases[db.custom]=
code.mfg.databases[db.custom]=NULL
Units of Measure
Properties which are defined in milliseconds or bytes can also be expressed in a wide range of durations and sizes to
improve readability. Properties are interpreted to ensure that human readable values are converted to milliseconds/bytes.
Duration
The following unit of measures are supported in upper or lower case
ms,millisecond,milliseconds
s,second,seconds
136
QAD Adaptive ERP Configuration and Administration Guide
m,minute,minutes
h,hour,hours
d,day,days
w,week,weeks
Example
timeout.adminserver.start=1 minute
Size
The following unit of measures are supported in upper or lower case (the international standard which defines a kilobyte
as 1000 bytes is used):
b,byte,bytes
k,kb,kilobyte,kilobytes
m,mb,megabyte,megabytes
g,gb,gigabyte,gigabytes
Example
filereduce.appserver-logs-archive.minsize=100 mb
137
QAD Adaptive ERP Configuration and Administration Guide
Distributing Settings
A convenient way to distribute a group of configuration settings is to define the settings in a file that can be copied into
(and out of) an environment.
The (-p) option of the YAB Client can be used to bring configuration settings into an environment.
yab -p:[FILE|URL]
The client will process any include statements in the referenced document and then copy the document into the build
/config/system directory. If a file of the same name exists in the build/config/system directory it will be replaced. YAB will
automatically adjust the configuration but the changed configuration would still need to be applied to the environment as
described in the introduction.
Alternatively, when dealing with configuration documents that do not use include statements, the files can be directly
copied into the build/config/system directory using the OS file copy command.
Use the OS file remove command to remove the settings from the environment (and apply the change to the system as
described in the introduction).
> rm build/config/system/development.properties
Reference the config.order setting to adjust the precedence order of system documents.
Merge Settings
The -merge-settings option of the YAB Client is used to merge the configuration documents referenced by the (-
p) option into a consolidated configuration document, rather than bring the documents into the active environment.
-merge-settings:FILE
The -excludes option may be used to exclude a list of include files from the result.
-excludes:NAME1,NAME2...
Ex.
138
QAD Adaptive ERP Configuration and Administration Guide
Ex.
{core.properties}
{../../envs/rd.properties}
{PROD|production.properties}
{DEVEL,PROD|production.properties}
{http://server/yab/ee/2016/core.properties}
Where:
DIRECTIVE Directives are used to define the conditions under which the referenced file should be included. The
client defines certain directives (e.g. WIN, UNIX) as determined by the host platform, other directives
can be supplied with the request. The client will assume that all request options in upper case are
directives. Directives can be negated in an include statement by prefixing the directive with "!".
Directives are optional. If no directives are defined, the pipe delimiter can be omitted.
Ex.
Query string parameters associated with the requested document will be used when requesting
included documents.
core-systest.properties
{a.properties}
{b.properties}
The client would retrieve the includes using the following URLs:
http://yab.qad.com/a.properties?rev=920
http://yab.qad.com/b.properties?rev=920
RELATIVE A relative path (e.g. "configurations/core.properties"). The path is resolved relative to the document
PATH defining the include statement. The notation "../" is used to signify a parent path.
139
QAD Adaptive ERP Configuration and Administration Guide
When a valid Progress parameter does not have a corresponding YAB setting, the Progress parameter may still be
configured using the following syntax:
Ex. Define a new Progress parameter named "ParameterWithoutValue" that does not have a value on the QADDB (e.g. -
ParameterWithoutValue):
dbserver.qaddb.property.pwov.key=ParameterWithoutValue
NOTE: The PROPERTY INSTANCE ("pwov" in the preceding example) is a name that uniquely identifies the setting and
can be chosen at your discretion.
[aia|appserver|dbserver|ns|ws|wsa].[INSTANCE].property.[PROPERTY INSTANCE].value
Ex. Define a new Progress parameter named "ParameterWithValue" with the value "512" on the QADDB (e.g. -
ParameterWithValue 512):
dbserver.qaddb.property.pwv.key=ParameterWithValue
dbserver.qaddb.property.pwv.value=512
Refer to the table below to determine which configurations are compatible with your OE environment.
140
QAD Adaptive ERP Configuration and Administration Guide
Environment Identification
Settings that start with "environment" identify the environment, the organization that owns it, and its role.
SETTINGS
Accepted:
- development (Development)
- test (Test)
- production (Production)
Accepted:
- auto (Automotive)
- food (Food & Beverage)
- conp (Consumer Products)
- elec (Electric/High Tech)
- ind (Industrial)
- lsm (Life Science Medical)
- lsp (Life Science Pharma)
The environment.uuid setting is automatically configured by the system to uniquely identify each environment.
The system-id-print command prints this ID and the system-id-regenerate command may be
used to assign a new unique ID to the environment, for example if the environment is copied.
141
QAD Adaptive ERP Configuration and Administration Guide
Reconfiguring Databases
Databases are associated with the db and dbserver configuration types.
db.INSTANCE.*
Ex.
db.qaddb.*
And the dbserver type configures the database server (for databases with a database server)
dbserver.INSTANCE.*
Ex.
dbserver.qaddb.*
The database and server are associated by sharing the same instance name (e.g. "qaddb").
142
QAD Adaptive ERP Configuration and Administration Guide
databases
db._base.dir=[DIRECTORY]
db.[INSTANCE].dir=[DIRECTORY]
Ex.
db.qaddb.dir=/dr01/database
The location of the database should be configured before the environment is created (see QAD Enterprise Edition
Installation Guide for details on providing install properties to the installer.) To change the location of an existing database,
the database must either be rebuilt using the command db-[INSTANCE]-rebuild (which will only retain system data) or
repaired using the Progress prstrct tool.
143
QAD Adaptive ERP Configuration and Administration Guide
The following command will display a representation of the current structure of a database
database-[INSTANCE]-structure-list
It will also write the current structure of the database to a file in the database directory:
[PHYSICAL NAME].st
The structure file in the database directory should always reflect the current structure of the database to support disaster
recovery.
To customize the database structure configure the structurefile setting on the database.
db.[INSTANCE].structurefile=[FILE]
The database structure should be configured before the environment is created (see QAD Enterprise Edition Installation
Guide for details on providing install properties to the installer.) To change the structure of an existing database, the
database must either be rebuilt using the command db-[INSTANCE]-rebuild (which will only retain system data) or adjusted
using the Progress prstrct tool.
144
QAD Adaptive ERP Configuration and Administration Guide
Ex. Configure the QADDB database to accept connections from ABL clients over the network with an auto-assigned port.
dbserver.qaddb.fourgl.network=true
Ex. Configure the QADDB database to accept connections from ABL clients over the network with an explicit port.
dbserver.qaddb.fourgl.port=23500
The core application components will use shared memory connections (for performance reasons) even when the 4GL
broker is configured to allow network connections. The setting "progress.database.network" can override this behavior but it
should not be changed.
145
QAD Adaptive ERP Configuration and Administration Guide
Ex. Configure the QADDB database to accept connections from SQL clients over the network with an auto-assigned port.
dbserver.qaddb.sql.network=true
Ex. Configure the QADDB database to accept connections from SQL clients over the network with an explicit port.
dbserver.qaddb.sql.port=23500
Additional secondary login brokers may be setup with the "dbserver.INSTANCE.broker" collection. The port number must
be explicitly configured or allocated from the ports range using the "@port" annotation.
Ex. Configure the QADDB database with an additional secondary login broker to accept connections from ABL and SQL
clients over the network with a port from the configured ports range.
# @port
dbserver.qaddb.broker.another.port=
dbserver.qaddb.broker.another.type=both
dbserver.qaddb.broker.another.numberofservers=1
dbserver.qaddb.broker.another.minclientsperserver=5
dbserver.qaddb.broker.another.maxclientsperserver=10
146
QAD Adaptive ERP Configuration and Administration Guide
dbserver.INSTANCE.beforeimageprocess=true
dbserver.INSTANCE.beforeimagebuffers=INT
The database-script command regenerates the database start scripts to start the BIW:
147
QAD Adaptive ERP Configuration and Administration Guide
The after image archiver is used to manage after-image extents following Progress best practices. The utility has three
major goals:
database-[INSTANCE]-structure-list
And then review the refreshed database structure file to determine if the database has AI extents defined (search for lines
that begin with an "a").
databases/[PHYSICAL NAME].st
If the database does not have any AI extents they will need to be added. Review the Progress documentation for details
on properly sizing AI extents ("BASIC GUIDE TO AFTER-IMAGING"). The following example is only for demonstration.
Ex. admdb-ai.st
a /dr01/qadapps/qea/databases/admdb.a1
a /dr01/qadapps/qea/databases/admdb.a2
Add the AI extents to the database using the Progress prostrct command and then refresh the exported database
structure file.
> . scripts/pset
> prostrct add databases/admdb admdb-ai.st
> prostrct list databases/admdb
148
QAD Adaptive ERP Configuration and Administration Guide
Configuring an after-image writer (AIW) will reduce the I/O required to support after-imaging. The AIW will be started and
stopped automatically when the database is started and stopped.
dbserver.[INSTANCE].afterimageprocess=true
dbserver.qadadm.afterimageprocess=true
Configuring AI Archiver
The archivaldir setting configures the location where AI files are written.
dbserver.[INSTANCE].archivaldir=[DIRECTORY]
build/work/ai
Enabling AI archiver
The AI archiver must be enabled when the target databases are offline. Once enabled the archiver process will
automatically start and stop when the database is started and stopped.
Recovery
Consult the Progress documentation for instructions on roll-forward recovery.
149
QAD Adaptive ERP Configuration and Administration Guide
To configure the codepage and/or collation for all databases adjust settings on the db._base configuration instance
which will be inherited by all databases.
db._base.codepage=ISO8859-1
db._base.template=spa
db._base.collation=SPANISH9
db._base.collationfile=spa1252.df
Property Description
db. The name of a sub-directory under '${openedge.dir}/prolang' that contains resources that are used
template when creating the database and loading the collation tables.
Default: utf
db. The collation file to load into the database when it is created.
collation
file If a relative path is assigned it will be resolved relative to the 'template' directory.
When the file is not defined, the system will attempt to find an appropriate collation file by looking for
files in the following order:
[TEMPLATE]/[COLLATION].df
[TEMPLATE]/_tran.df
If a matching collation file is not found a hard error is raised when the database is created.
The codepage and collation of the database should be configured before the environment is created (see QAD Enterprise
Edition Installation Guide for details on providing install properties to the installer.)
150
QAD Adaptive ERP Configuration and Administration Guide
151
QAD Adaptive ERP Configuration and Administration Guide
When user management is enabled, YAB will manage users exclusively, creating, updating, and deleting database users
to match the configuration. This is the recommended approach to managing user accounts and administrator privileges.
db._base.security.user.managed=true
When the "user.managed" setting is disabled, YAB will only manage users with the (db.INSTANCE.users.NAME.managed)
setting enabled. In this configuration, YAB will never update or delete a database user that is not (or no longer)
configured. This approach is retained for backwards compatibility.
When users are not managed, the expectation is that all configured user information accurately describes how users have
been set up independently.
A "connection" user should be configured to allow YAB to administer any database with users.
Ex. Configure the account YAB will use to administer the database.
db._base.connection.user=admin
db._base.connection.password=mysecret
If the account is not managed it must be granted the Security Administrator privilege (and may require the Database
Administrator privilege for SQL administration), otherwise if it is managed it will automatically be granted Security
Administrator and Database Administrator privileges. If a connection user is not configured YAB will attempt to use the Bla
nk User to administer the database but will fail if the blank user does not have sufficient authority.
To apply changes:
152
QAD Adaptive ERP Configuration and Administration Guide
To disable blank user access you must configure the "connection" user account for YAB to administer the database.
Ex. Enable user management and define a connection user for all databases
db._base.security.user.managed=true
db._base.connection.user=admin
db._base.connection.password=mysecret
db._base.security.authentication=true
153
QAD Adaptive ERP Configuration and Administration Guide
Table Permissions
Table permissions are used to restrict access to user tables. When multiple rules configure the same table permission, the
applied permission is the union of the rules with revocations (patterns using "!") preceding grants.
Ex. Configure a user that has full table permissions to all tables except "baz"
db._base.users.foo.user=foo
db._base.users.foo.password=bar
db._base.table-auth.foo.includes=*
db._base.table-auth.foo.excludes=baz
db._base.table-auth.foo.permissions=*
db._base.table-auth.foo.users=foo
When Blank User Access is disabled all table permissions not configured by a rule will be set to disallow blank user
access but permit any user (ID pattern "!,*") and when Blank User Access is enabled to permit the blank user as well (ID
pattern "*").
154
QAD Adaptive ERP Configuration and Administration Guide
Schema Changes
The following commands update the schema of databases:
Command Description
The database schema is configured by instances of the schema configuration type. Each database may be associated
with zero or more schema files. As an optimization, the schema for a database will not be reevaluated if the configured
schema files have not changed, unless the -clean option is used to force reevaluation. Reevaluation consists of creating a
temporary database named configured with the configured schema and comparing that to the installed schema, producing
an incremental schema file describing how to update the installed schema to match the configured schema.
If there are no differences this file will be empty and the database will not be updated.
If tables or sequences are manually defined in the database, the incremental schema file will contain statements to remove
these tables and sequences. The recommended approach is to configure these schema changes so they will be retained:
An alternative approach is to enable the following setting to retain manually added tables and sequences. It does not work
for retaining changes to fields, triggers, and indexes on tables configured in the system.
db.INSTANCE.allowunrecognizedschema=true
The compile database (db.qadcpl) is used when compiling operational source code. Schema files configured for the main
database (e.g. schema.INSTANCE.database=db.qaddb) will automatically be mirrored in the compile database. The
compile database has the same schema as the main database, excluding the schema associated with QAD Reference
Architecture (QRA) modules.
SETTINGS
155
QAD Adaptive ERP Configuration and Administration Guide
156
QAD Adaptive ERP Configuration and Administration Guide
Syntax:
T,[OLD TABLE NAME],[NEW TABLE NAME]
F,[TABLE NAME],[OLD FIELD NAME],
[NEW FIELD NAME]
157
QAD Adaptive ERP Configuration and Administration Guide
QAD provides demo data for demonstrating and testing application features. In a non-production environment, the demo
data can be loaded into an environment following these steps.
Backup Databases
Create a backup of all databases. The tag "initial-backup" can be replaced with a more meaningful name.
Proceed through the installer prompts up to the 'Feature Selection' page, and enter '3' to select the Demo Data.
[Feature Selection]
Choose the features to install:
[X] 1 - Enterprise Edition
[X] 2 - QXtend
[X] 3 - Demo Data
Hit ENTER to move to the next question.
158
QAD Adaptive ERP Configuration and Administration Guide
[Start Installation]
Start installing QAD Enterprise Edition 2016?
n - No
y - Yes
> y
Validating
OK
Initializing
instance OK
Reconfiguring
instance OK
Resolving and copying
packages OK
Cleaning
up OK
INSTALL SUCCESSFUL
If you plan on switching between standard and demo data frequently you can create a backup of the databases with the
demo data loaded and replace the database-rebuild command in the previous step with the database-restore command
(referencing the appropriate tag).
Stop Environment
Proceed through the installer prompts up to the 'Feature Selection' page, and ensure '3 - Demo Data' is not selected.
[Feature Selection]
Choose the features to install:
[X] 1 - Enterprise Edition
[X] 2 - QXtend
[ ] 3 - Demo Data
Hit ENTER to move to the next question.
159
QAD Adaptive ERP Configuration and Administration Guide
[Start Installation]
Start installing QAD Enterprise Edition 2016?
n - No
y - Yes
> y
Validating
OK
Initializing
instance OK
Reconfiguring
instance OK
Resolving and copying
packages OK
Cleaning
up OK
INSTALL SUCCESSFUL
160
QAD Adaptive ERP Configuration and Administration Guide
This page describes how to configure Enterprise Edition to define database connections through parameter files.
Preparation
When parameter file connections are enabled, the system will create parameter files to connect the databases and
remove database connection information from all QRA bootstrap files. By default, the parameter files have the same name
as the bootstrap files but with a "pf" file extension.
Also when parameter file connections are enabled, the factory default configuration of standard Progress sessions will
reference the parameter files connecting the databases. Converting a system to use parameter files to connect to the
database can be transparent as long as these configuration settings are not overridden and/or the system does not have
any third party or custom Progress sessions that need to be adjusted.
Settings that end with srvrstartupparam configure server sessions to use parameter files and settings that end with properti
es.pf configure client sessions to use parameter files. The following commands will locate server and client settings that
have been overridden.
Make a note of any overridden settings and the files in which they are defined.
If Enterprise Financials 2016, 2016.1, 2017, or 2017.1 is installed, a Financials patch may be required to support parameter
file connections. Please review your Financials patch version before proceeding with the change.
Enabling
The bootstrap._useparameterfile setting is used to enable (or disable) the use of parameter files to connect databases.
build/config/configuration.properties
bootstrap._useparameterfile=true
If you identified any overridden settings in the previous step, they should be adjusted to reference the correct parameter
file. The (-trace) option on the config command may be used show the value of the factory default setting that is being
overridden. In the following example, the second definition of the setting appserver.mfg.srvrstartupparam is being
overridden by the first.
161
QAD Adaptive ERP Configuration and Administration Guide
[1: build/config/system/fin2018-core-systest-pc.properties]
appserver.mfg.srvrstartupparam=-mmax 20408 -Bt 20000 -tmpbsize 4 -
nodupttidxerror
[2: build/config/packages/yab-ee-foundation/1/10/0/10/default/yab-ee-
foundation.properties]
# @if bootstrap._useparameterfile=true
# @if openedge.version =* [11.7.4, 12)
appserver.mfg.srvrstartupparam=-pf ${bootstrap.default.
parameterfile} -mmax 16384 -Bt 10000 -tmpbsize 4 -nodupttidxerror
The arguments "-pf ${bootstrap.default.parameterfile}" defined by the overridden setting need to be integrated into the first
setting as in the following example:
appserver.mfg.srvrstartupparam=-pf ${bootstrap.default.parameterfile} -
mmax 20408 -Bt 20000 -tmpbsize 4 -nodupttidxerror
When the configuration of all Progress sessions have been adjusted to reference the correct parameter file, the changes
are applied with the following commands which will stop the environment, reconfigure the environment, and then start the
environment:
The reconfigure command will generate the parameter files, update the bootstrap configuration files, rewrite scripts, and
adjust the Progress ubroker.properties configuration file.
Enabling
The bootstrap._useparameterfile setting that is used to enable (or disable) the use of parameter files to connect databases
is same as the property described above.
162
QAD Adaptive ERP Configuration and Administration Guide
[1: build/config/packages/yab-ee-foundation/1/18/0/29/default/yab-ee-
foundation.properties]
# @if bootstrap._useparameterfile=true
pas.mfg.openedge.session-mgr.agentStartupParam=-T "${base}/temp" -pf
${bootstrap.default.parameterfile} -mmax 16384 -Bt 10000 -tmpbsize 4 -
lkwtmo 1800
[2: build/config/packages/dde-build/2/17/0/106/default/pas.
properties]
# @indexer args
pas._base.openedge.session-mgr.agentStartupParam=
[I: build/config/packages/dde-build/2/17/0/106/default/pas.
properties]
pas.*.openedge.session-mgr.agentStartupParam[-errorstack]=
The arguments "-pf ${bootstrap.default.parameterfile}" defined by the overridden setting need to be integrated into the first
setting as in the following example:
pas.mfg.openedge.session-mgr.agentStartupParam=-pf ${bootstrap.default.
parameterfile} -T "/dr01/qadapps/systest/servers/pas-mfg/temp" -mmax
16384 -Bt 10000 -tmpbsize 4 -lkwtmo 1800 -errorstack
Once the configuration of all Progress sessions has been updated in the build/config/configuration.properties file to
reference the correct parameter file, apply the changes by running the following commands to stop, reconfigure, and start
the environment:
Ex. pas-mfg:
163
QAD Adaptive ERP Configuration and Administration Guide
Reconfiguring Tomcat
Enabling the Manager Web Application
Reconfiguring Tomcat Startup Parameters
Configuring SSL Connections
164
QAD Adaptive ERP Configuration and Administration Guide
When Tomcat is installed in secure mode the manager web application is not deployed into the Tomcat instance.
When Tomcat is not installed in secure mode the manager web application is deployed, but no accounts are preconfigured
to allow access to the manager web application for security reasons. The "manager-gui" role is a Tomcat role with
permission to access the manager web application.
Ex. Provide access to the manager web application with the username (admin) and the password (mfgpro).
build/config/configuration.properties
tomcat.[INSTANCE].roles.manager-gui.rolename=manager-gui
tomcat.[INSTANCE].roles.manager-gui.members=admin
tomcat.[INSTANCE].users.admin.username=admin
tomcat.[INSTANCE].users.admin.password=mfgpro
Ex. Enable the manager web application on the default Tomcat instance.
build/config/configuration.properties
tomcat.default.roles.manager-gui.rolename=manager-gui
tomcat.default.roles.manager-gui.members=admin
tomcat.default.users.admin.username=admin
tomcat.default.users.admin.password=mfgpro
tomcat.[INSTANCE].roles.manager-gui.members=admin,[USER]
tomcat.[INSTANCE].users.[USER].username=[USER]
tomcat.[INSTANCE].users.[USER].password=
tomcat.[INSTANCE].roles.[ROLE].rolename=[ROLE]
tomcat.[INSTANCE].roles.[ROLE].members=[COMMA-SEPARATED USERS]
Verify
Navigate to the following URL in a web browser and login as the user "admin" with the password "mfgpro".
http://[HOST]:[PORT]/manager
165
QAD Adaptive ERP Configuration and Administration Guide
tomcat._base.startupopts="-XX:MaxPermSize=256m"
tomcat.[INSTANCE].startupopts="-XX:MaxPermSize=512m"
The change will be applied to the setenv.[sh|bat] script in the Tomcat instance bin directory.
166
QAD Adaptive ERP Configuration and Administration Guide
The default configuration associates all Tomcat instances with the keystore:
build/work/keystore/default.bin
Ex. Show the keystore that the default Tomcat instance is associated with.
keystore.default.password=abetterpassword
Remove the existing keystore. If it does not exist, nothing will be done.
The keystore password is stored in the clear in the configuration.properties file and in the conf/server.xml file associated
with all configured Tomcat instances. These files should have appropriate OS permissions set.
or
167
QAD Adaptive ERP Configuration and Administration Guide
yab keystore-[INSTANCE]-print
tomcat.[INSTANCE].usessl=true
If you imported multiple certificates into the keystore you can use the following setting to identify the alias of the certificate
to use:
tomcat.[INSTANCE].keyalias=[ALIAS]
yab tomcat-[INSTANCE]-update
168
QAD Adaptive ERP Configuration and Administration Guide
Reconfiguring PROPATHs
Progress sessions use the PROPATH to locate resources. The PROPATH is a list of paths where requests for resources
are satisfied by the first path in which the resource is defined. To simplify the management of PROPATH information, QAD
Enterprise Edition defines a set of base PROPATH definitions which are then used and extended in different application
sessions (telnet, client, appservers, etc).
Base Definitions
Setting Description
Analysis
The following command lists all of the PROPATH settings and may be used to locate the setting that controls the Progress
session you are interested in adjusting.
The (-trace) option can be used to drill into a specific PROPATH to see how it was constructed. In the following example
we see that the PROPATH that controls the Financials application server inherits the paths from propath.fin, which in turn
inherits the paths from propath.base, and that there are independent contributions to the path.
[1: build/config/packages/yab-ee-foundation/1/18/0/29/default/yab-ee-
foundation.properties]
169
QAD Adaptive ERP Configuration and Administration Guide
# @id customizations
# @append
# @ref propath.fin
# @unique
# @group 2
code.fin.propath=${customizations.fin.dir},${packages.fin-
customization.dir}
[2: build/config/packages/yab-ee-foundation/1/18/0/29/default/yab-ee-
foundation.properties]
# @ref propath.base
propath.fin=
[3: build/config/packages/yab-ee-foundation/1/18/0/29/default/yab-ee-
foundation.properties]
# @path
# @append
# @group 3
propath.fin=${dist.dir}/fin/patch,${appdir}/dist/fin
[4: build/config/packages/yab-ee-foundation/1/18/0/29/default/yab-ee-
foundation.properties]
# @append
propath.fin=${packages.fin-bldata.dir},${fin.qadfin.pl}
[5: build/config/packages/yab-ee-foundation/1/18/0/29/default/yab-ee-
foundation.properties]
# @append
# @id netui-pro
propath.fin=${netui.pro.dir}
[6: build/config/packages/yab-css/1/18/0/5/default/yab-css.
properties]
# @append
# @group 0
# @id qadcss
propath.base=${appdir}/config/qadcss
[7: build/config/packages/yab-ee-foundation/1/18/0/29/default/yab-ee-
foundation.properties]
# @unique
propath.base=
[8: build/config/packages/yab-ee-foundation/1/18/0/29/default/yab-ee-
foundation.properties]
# @path
# @append
# @group 0
# @id base
propath.base=${appdir}/config
Add a path
To add a path to a PROPATH choose one of the following options:
Standard Priority
170
QAD Adaptive ERP Configuration and Administration Guide
Elevated Priority
The PATH ID is used to associate the path (or paths) with a name that can be used when ordering the PROPATH (see
below), but it is optional. The GROUP ID is used to set the priority of the added path(s) using the following table:
Group ID Description
0 Bootstrap
1 Configuration
2 Customizations
3 Patches
4 Extensions
(undefined) Standard
# @id test
# @append
code.mfg.propath=/test/programs
See Configuration Files for more information about the "@id", "@append", and "@group" annotations.
Order Paths
The group assignment is used to define a first level ordering of the paths, where all group 0 paths will preceded all group 1
paths which will precede all group 2 paths and so on. A secondary ordering of the paths within a group is afforded by
ordering hints associated with the group annotation (see the documentation for the group annotation in Configuration Files).
Ex. Add some test programs to the operational compile with higher precedence than the "main" operational code:
# @id test
# @append
# @group -main
code.mfg.propath=/test/programs
The group order is used to take explicit control over the ordering of paths within a group. It will replace the ordering hints
when defined. The paths must define an ID to be ordered by this mechanism.
Ex. Order the test paths ahead of the "main" operational paths:
Ex. Order the test paths before all standard operational paths:
171
QAD Adaptive ERP Configuration and Administration Guide
# @grouporder test *
code.mfg.propath=
Ex. Order the test paths after all standard operational paths:
# @grouporder * test
code.mfg.propath=
See Configuration Files for more information about the "@grouporder" annotation.
172
QAD Adaptive ERP Configuration and Administration Guide
Reconfiguring AdminServer
The AdminServer configuration is specific to OE11 and does not apply to OE12. Therefore, the details below are
relevant only for OE11.
OpenEdge11(OE11):
Properties in the plugin configuration file can be defined using the following pattern:
adminserver.plugins.[INSTANCE].section=[section to modify]
adminserver.plugins.[INSTANCE].property=[property]
adminserver.plugins.[INSTANCE].value=[value]
adminserver.plugins.jvmargs.section=PluginPolicy.Progress.AdminServer
adminserver.plugins.jvmargs.property=jvmargs
adminserver.plugins.jvmargs.value=-Xmx256m -Djava.awt.headless=true -
Dsun.lang.ClassLoader.allowArraySyntax=true -Dserver.start.
retryInterval=2
Result:
[PluginPolicy.Progress.AdminServer]
jvmargs=-Xmx256m -Djava.awt.headless=true -Dsun.lang.ClassLoader.
allowArraySyntax=true -Dserver.start.retryInterval=2
173
QAD Adaptive ERP Configuration and Administration Guide
174
QAD Adaptive ERP Configuration and Administration Guide
Enable
To increase the logging output from an application server configure the appropriate logging settings:
appserver.mfg.srvrlogginglevel=4
appserver.mfg.srvrlogentrytypes=ASPlumbing,DB.Connects,4GLTrace
yab appserver-mfg-update
If the environment is online the change will only have an effect if allowruntimeupdates is enabled for the application server.
If the brokers are very busy, it may take a while for a change to 4GLTrace (enabling and disabling) to have an effect.
Disable
With 4GL Tracing enabled, the application server writes a lot more information to its log files than is otherwise the case.
This approach can slow down the application and consume excessive amounts of disk space, so it is generally a good
idea to disable 4GLTrace after capturing the data to evaluate. To undo the change, remove the settings from configuration.
properties (or comment them out) and then apply the changes.
Ex. Revert back to the original logging configuration on the 'mfg' application server:
# appserver.mfg.srvrlogginglevel=4
# appserver.mfg.srvrlogentrytypes=ASPlumbing,DB.Connects,4GLTrace
yab appserver-mfg-update
Enable
In OE12, you can achieve this objective by updating the agentLoggingLevel property for any pas instance in configuration.
properties. To increase the logging output, set it to 4.
pas.mfg.openedge.session-mgr.agentLoggingLevel=4
yab pas-mfg-update
175
QAD Adaptive ERP Configuration and Administration Guide
Disable
With 4GL Tracing enabled, the application server writes a lot more information to its log files than is otherwise the case.
This approach can slow down the application and consume excessive amounts of disk space, so it is generally a good
idea to disable 4GLTrace after capturing the data to evaluate. To undo the change, remove the settings from configuration.
properties (or comment them out) and then apply the changes.
Ex. Revert back to the original logging level value from 4 to 2 (if it was 2) on the 'pas-mfg' server:
pas.mfg.openedge.session-mgr.agentLoggingLevel=2
yab pas-mfg-update
The agentLoggingLevel property determines how much detail is captured in the logs. The available logging
levels are:
176
QAD Adaptive ERP Configuration and Administration Guide
The location of environment files should be the same on the source and destination host.
The operating system should be the same on the source and destination host (or OS specific packages
reviewed).
Procedure
Step 2: Copy environment from the source host to the destination host.
build/config/configuration.properties
host=[DESTINATION HOST]
Step 4: Apply the change on the destination host (will restart environment if online)
177
QAD Adaptive ERP Configuration and Administration Guide
TCP/IP Ports
Servers use TCP/IP ports for communication.
By default ports are allocated to servers from ranges configured by the ports and the dynamic-ports settings.
Servers that require a stable port are allocated ports from the ports range. Once a port is allocated to a server it will
continue to be assigned to that server. The file build/work/system/ports records port allocations. Servers that dynamically
allocate ports are configured with the dynamic-ports range.
See the documentation for the port annotation in Configuration Files for further details.
# @port
smtp.port=26
The statement "# @port" in the example above is a port annotation. The annotation simply serves to let the system know
that the port number (26) has been assigned and should not be allocated to any other resource without an explicit port
assignment.
To explicitly configure dynamic port ranges use the information in the following table:
178
QAD Adaptive ERP Configuration and Administration Guide
Adding Languages
Configure Language
To add an additional language adjust the languages setting:
1 us English
2 ch Simplified Chinese
3 cs Spanish
4 cz Czech
5 du Dutch
6 fr French
7 ge German
8 it Italian
9 jp Japanese
10 ko Korean
11 ls Spanish (Mexico)
12 pl Polish
13 po Portuguese (Brazil)
14 tw Traditional Chinese
If the language being added is not one of the core languages, you must also configure the Financials patch with support
for the language as well as the language specific qad-lang image that provides the translations.
It may also be necessary to configure a new instance of the language configuration type to update application files like l
ocale.dat, encoding.dat, and configscreens.xml.
179
QAD Adaptive ERP Configuration and Administration Guide
SETTINGS
If the new language should add additional codepages to the Financials server.xml file then append a value to the setting a
dditional.codepages.
Ex. Defining Thai Language
build/config/configuration.properties
language.th.id=th
language.th.locale=US,en,TH,,dmy,Thailand,tha
language.th.encoding=${language.th.id},windows-874,620-253,windows-874,
windows-874
language.th.program.kasoivmt.name=kasoivmt.p
language.th.program.kasoivmt.defaulttable=so_mstr
language.th.program.kasoivmt.tables=so_mstr,sod_det
# @append
additional.codepages=620-253
Apply Changes
Run an update to add the language.
180
QAD Adaptive ERP Configuration and Administration Guide
181
QAD Adaptive ERP Configuration and Administration Guide
Using AIA
The Application Internet Adapter( AIA ) is specific to OE11 and does not apply to OE12. Therefore, the details below are
relevant only for OE11.
To configure the .NET client to send requests through the default Progress Application Internet Adapter:
build/config/configuration.properties
netui.aia.enabled=true
The Financials client components are not currently compatible with AIA and will continue to connect outside of an AIA
adapter.
By default, connections from AppServer clients will be restricted to those that connect using HTTPS tunneling, when the
Tomcat that hosts AIA is configured to support SSL (i.e. tomcat.default.usessl=true). This restriction can be explicitly
enabled or disabled using the aia.default.httpsenabled setting.
aia.default.httpsenabled=true
182
QAD Adaptive ERP Configuration and Administration Guide
If you have installed a .NET release before 3.2, the "Granados SSH library for .NET" (Routrek.Granados.dll) must be copied
to the Home Server directory to run programs in terminal mode in the .NET. Clients will download the DLL as necessary. QA
D cannot redistribute the Granados SSH library due to export restrictions.
http://granados.sourceforge.net/
Use the following command to print the Home Server directory the DLL should be copied into:
Telnet
Use the following configuration to switch from the SSH protocol to the Telnet protocol:
build/config/configuration.properties
netui.connmgr.protocol=telnet
netui.connmgr.port=23
netui.telnet.protocol=telnet
netui.telnet.port=23
Shell Configuration
The following settings are used by the .NET connection manager and terminal mode programs when connecting to the
server as the OS account configured by the netui.connmgr.user and the netui.telnet.user respectively (typically the same
account). These settings should match the prompts that are produced when making an SSH or Telnet connection to the
server interactively as the OS account.
Setting Description
netui.connmgr. The shell prompt, which is dependent upon the default shell, and can vary based on user
serverprompt configuration, as well as across different operating systems.
Default: $
To apply:
183
QAD Adaptive ERP Configuration and Administration Guide
Bootstrap Files
Application sessions are configured with bootstrap files, which in turn are configured by the bootstrap configuration
type.
A new bootstrap file can be defined based on the configuration of one of the standard bootstrap files. For example, to
create an alternate version of the default bootstrap file that connects to the configured databases over the network,
possibly to support clients in self service mode, you could configure the following:
build/config/configuration.properties
# @extends bootstrap.default
bootstrap.default-network=
bootstrap.default-network.database.network=true
bootstrap.default-network.file=${qra.config.dir}/bootstrap-network.xml
And this configuration would define a new process to generate the bootstrap file during an update:
To use the alternate bootstrap in a client script, the script would pass the location of the bootstrap file (on the PROPATH)
to the ClientBootstrap.p program as demonstrated below:
Database Connections
184
QAD Adaptive ERP Configuration and Administration Guide
Historically database connection information was defined in bootstrap files, but beginning with Enterprise Edition 2019,
new installations define database connection information in parameter files by default. The setting bootstrap.
_useparameterfile controls whether connection information is stored in bootstrap files or in parameter files.
SETTINGS
See: bootstrap.INSTANCE.
parameterfile
Default: false
185
QAD Adaptive ERP Configuration and Administration Guide
Environments that are upgraded to a new version of YAB are not automatically updated to use parameter files because
switching to use parameter files could break the environment and requires a careful review of all settings that are not set
to their factory default value.
186
QAD Adaptive ERP Configuration and Administration Guide
SETTINGS
build/config/configuration.properties
qrfprinters.1.uncpath=\\corp23\rm01
qrfprinters.1.description=Mark's Favorite Printer
qrfprinters.2.uncpath=\\corp23\rm02
qrfprinters.2.description=Andy's Favorite Printer
To apply:
187
QAD Adaptive ERP Configuration and Administration Guide
Batch Jobs
A batch job executes a program in a non-interactive application character session where input is read from a file. Batch
jobs are used to automate character session tasks. Two different approaches to managing batch jobs are supported. The
Batch Jobs (Enhanced) approach has more features and was introduced as an enhancement to the original Batch Jobs
(Basic) approach. The Batch Jobs (Basic) approach has been retained for backwards compatibility and is more than
sufficient for certain use cases.
Input
In both cases, input is fed to the Progress session through an input file which uses the following characters to represent
control keys:
Ex. Login, run Item Master Maintenance, and exit (multiple domains choosing default domain for user)
mfg -
1.4.1
.
.
Y
Ex. Login, run Item Master Maintenance, and exit (single domain)
mfg -
1.4.1
.
.
Y
188
QAD Adaptive ERP Configuration and Administration Guide
Here is an example batch program that prints out the (-param) data and then runs the application.
customizations/mfg/default/src/program.p
run mf.p.
To run the batch program with input from a file named input.
189
QAD Adaptive ERP Configuration and Administration Guide
The system will run mf.p to start a character session with the input you have configured. The optional initprogram setting sh
ould not be configured with the value mf.p and if another program is configured it should not run mf.p.
Here is an example init program that prints out the (-param) data.
190
QAD Adaptive ERP Configuration and Administration Guide
customizations/mfg/default/src/program.p
batch.job1.initprogram=program.p
batch.job1.workdir=${appdir}/batch/job1
batch.job1.in=../login.in,job1.in,../logout.in
batch.job1.out=job1.out
batch.job1.out.timestamp=true
batch.job1.application.param=foo=bar,bar=baz
login.in
mfg -
logout.in
.
.
Y
.
Y
191
QAD Adaptive ERP Configuration and Administration Guide
> ll scripts/batch
total 8
-rwxrw-r-- 1 wtb devel 498 Mar 28 10:06 batch-job1
import subprocess
import sys
params = [r"/usr/bin/python", r"/qad/sbox/004/user/wtb/02/sr2-core-
systest/scripts/client-xx"]
p = subprocess.Popen(params , stdout=subprocess.PIPE, stderr=subprocess.
PIPE)
out, err = p.communicate()
print(out)
if err is not None:
print(err)
if p.returncode != 0:
sys.exit(p.returncode)
192
QAD Adaptive ERP Configuration and Administration Guide
Configuring Commands
The process configuration type is used to reconfigure existing commands and to hook new commands into the
environment. The setting is an instanced setting using the following pattern.
process.[INSTANCE].[NAME]
In the following example we define a new command database-backup-setup to execute a script and another
command database-backup-cleanup to execute another script. We then "anchor" the setup command to run
before the existing database-backup command and the cleanup command to run after it.
build/config/configuration.properties
process.database-backup-setup.id=database-backup-setup
process.database-backup-setup.args=/dr01/scripts/backup-setup
process.database-backup-setup.impl=exec
process.database-backup-setup.anchormebefore=database-backup
process.database-backup-cleanup.id=database-backup-cleanup
process.database-backup-cleanup.args=/dr01/scripts/backup-cleanup
process.database-backup-cleanup.impl=exec
process.database-backup-cleanup.anchormeafter=database-backup
And then we can check our work by listing the commands that would be executed when the database-backup com
mand is executed:
1. database-backup-setup
2. database-backup
3. database-backup-cleanup
See Exec Commands for more elaborate examples of configuring commands to call programs.
In the following example we define a new command compile as a convenience to recompile the standard and
customized operational code and then trim the MFG application server.
process.compile.id=compile
process.compile.depends=code-mfg-update,code-mfg-customizations-update,
appserver-mfg-trim
193
QAD Adaptive ERP Configuration and Administration Guide
Exec Commands
To define a command that executes a system command set the implementation to "exec".
process.greeting.id=greeting
process.greeting.args=/dr01/qad-scripts/greeting
process.greeting.impl=exec
process.greeting.args=/dr01/qad-scripts/greeting ${appdir}
or (preferably)
process.greeting.args.0=/dr01/qad-scripts/greeting
process.greeting.args.1=${appdir}
process.greeting.env.APPDIR=${appdir}
process.greeting.anchormeafter=start
When the command is "greedy", request arguments will be forwarded to the system command, instead of being
interpreted as YAB commands.
process.echo.id=echo
process.echo.args=echo
process.echo.impl=exec
process.echo.console=true
process.echo.status=false
process.echo.greedy=true
194
QAD Adaptive ERP Configuration and Administration Guide
Progress Commands
To define a command that executes a Progress program set the implementation to "progress".
process.progress-test.id=progress-test
process.progress-test.args=-T /tmp -b -param ${appdir} -p /dr01/qad-
scripts/test.p
process.progress-test.databases=db.qaddb,db.qadadm
process.progress-test.propath=${propath.mfg}
process.progress-test.impl=progress
195
QAD Adaptive ERP Configuration and Administration Guide
ANT commands
A command to run an Apache ANT script is defined by setting the impl setting of the process to "ant".
Ex. Define a command 'ant-test' that executes the 'test' target of the ANT script
process.ant-test.id=ant-test
process.ant-test.summary=A test to execute an ANT script.
process.ant-test.impl=ant
process.ant-test.args.0=-script:/dr01/qad-scripts/build.xml
process.ant-test.args.1=-targets:test
If we wanted the ant-test process to run whenever a user runs an update we could add the following settings.
process.ant-test.anchormebefore=update
Within the ANT script all application properties are mapped to ANT properties.
<project>
<target name="test">
<echo level="info">Current Environment: ${environment.id}
</echo>
</target>
</project>
196
QAD Adaptive ERP Configuration and Administration Guide
Error Handling
When a request is submitted (update for example), it is evaluated into an ordered sequence of commands. If one of the
commands reports an error the request will be aborted. There are two ways to alter the default request processing
behavior, you can tell the system to continue processing the request if a process reports an error with the failonerror
setting or you can tell the system to always execute certain commands even when the request is aborted using the always
setting.
Failonerror
The failonerror setting is used to configure whether or not errors should fail (abort) the request. The default setting is true
which means that any error will abort the request. The most typical use for this setting is as a request option to address a
transient problem. For example, in an environment where a server cannot be stopped, failonerror might be added to the stop
request to continue to shut down the remaining servers in the normal manner.
Ex. Continue to process all stop commands even if one or more report errors.
It is also possible to only allow failures from specific commands using the syntax:
-failonerror.[PROCESS]:false
The failonerror handling can be more permanently associated with a process through configuration. For example, a
process that was responsible for sending an inessential notification to an unreliable service might be configured so it will
never abort the request.
Ex. Try and send the notification but don't abort the request if it fails.
process.notify.id=fire-and-forget-notification
process.notify.failonerror=false
...
All errors reported by commands are recorded in the YAB log file regardless of how failonerror is configured.
Always
The always setting is used to configure commands that should be processed even when the request is aborted. When the
always setting is enabled for a command it applies to that command as well as the commands associated with it.
The always setting may be used as a request option where it is scoped to the request. Consider the following scenario
where a hypothetical custom-backup command will turn off environment monitoring, stop the environment, backup
all databases, start the environment, and turn monitoring back on. If any of the database backups fail we may not want to
attempt further backups, but we would like to bring the environment back online and re-enable monitoring. Furthermore we
only want to always execute the start command in the context of this backup process. In the context of an update
we do not want to start the environment if the update fails.
The always handling can be more permanently associated with a process through configuration. Extending the previous
example, we might say that it is appropriate for the monitoring-start process to always run when it is used in any
context.
197
QAD Adaptive ERP Configuration and Administration Guide
All errors reported by commands are recorded in the YAB log file regardless of how always is configured. The last error is
used to abort the request when all always commands have been processed.
198
QAD Adaptive ERP Configuration and Administration Guide
Timeouts
Timeouts are settings that configure how long the system should wait for an outcome. Timeouts are defined in
milliseconds but can be also be expressed in a wide range of durations (see Configuration Files).
All services are associated with a timeout value to start the service and a timeout value to stop the service. Services that
are not "instanced" (see Configuration Type System) are associated with a timeout setting using the following production
rule.
timeout.[TYPE].[START/STOP]
Ex. The setting to configure how long the system should wait for the AdminServer to start.
timeout.adminserver.start=
Ex. The setting to configure how long the system should wait for the AdminServer to stop.
timeout.adminserver.stop=
timeout.[TYPE].[START/STOP].[INSTANCE]
Ex. The setting to configure how long the system should wait for the MFG application server to start.
timeout.appserver.start.mfg=
The system uses a fallback algorithm to calculate the timeout for an action. So for example, if the system is starting the
"mfg" application server it will use the first timeout value configured from the following list:
1. timeout.appserver.start.mfg
2. timeout.appserver.start
3. timeout.appserver
4. timeout
199
QAD Adaptive ERP Configuration and Administration Guide
Key Settings
catalogs setting
check-for-updates setting
clean setting
config.order setting
dependency settings
packages setting
ports setting
verify setting
200
QAD Adaptive ERP Configuration and Administration Guide
catalogs setting
Configures a comma-delimited list of software catalogs from highest to lowest precedence, where each entry may be a file
system path or URL locating the catalog.
catalogs=[FILE|URL],[FILE|URL]...
Ex.
catalogs=/shared/cache,http://packages.qad.com
201
QAD Adaptive ERP Configuration and Administration Guide
check-for-updates setting
Controls whether the configuration of packages (i.e. the settings that begin with "packages") should be reevaluated.
With the default configuration, the system will automatically reevaluate the configuration of packages as needed. Setting
(check-for-updates=true) forces the configuration of packages to be reevaluated whenever the configuration (package or
otherwise) changes. Setting (check-for-updates=false) prevents the reevaluation of the configuration of packages.
A production environment may be configured with (check-for-updates=false) to ensure that software in the environment is
only updated with a specific acknowledgement. When the system is configured with (check-for-updates=false), the setting
can be temporarily overridden to process package updates as follows:
Ex.
The install command will automatically force the reevaluation of packages. When (-check-for-updates) is configured
as a request option, it implies a refresh (-r).
202
QAD Adaptive ERP Configuration and Administration Guide
clean setting
Forces the system to avoid using any cached information to process the request.
203
QAD Adaptive ERP Configuration and Administration Guide
config.order setting
Defines the precedence order of configuration documents in the system directory:
build/config/system
config.order=[FILE1],[FILE2]...
You can adjust the order by editing the setting in the file:
build/config/system/loader.properties
204
QAD Adaptive ERP Configuration and Administration Guide
dependency settings
A family of settings to fine tune the evaluation of package settings.
dependency.excludes
dependency.excludes=abc
dependency.excludesreferences
A comma-delimited list of package classes whose constraints should be excluded when evaluating package constraints.
dependency.excludesreferences=abc
dependency.redirects
A comma-delimited list of redirection statements to apply when evaluating package constraints.
dependency.redirects=abc=abc-2.1.4.0
dependency.types
Configures the package constraint types that will be evaluated.
Type Description
1 Grouping constraints
2 Installation constraints
4 Runtime constraints
Default: 7 (all)
205
QAD Adaptive ERP Configuration and Administration Guide
packages setting
Configures packages in the system using the syntax:
packages.NAME=VALUE
NAME
The NAME is an identifier that is used internally to refer to the package. Typically the NAME must be identical to the
package name.
Ex.
packages.fin-src-proxy=fin-src-proxy-2015.0.80.11
In special cases the NAME is different than the package name. This is best illustrated with an example. There are several
packages that distribute data to initialize a system. In YAB each of these variants is associated with the NAME ee-data (to
provide the management components with a consistent "handle" to reference the data packages).
Ex.
packages.ee-data=release-data-ee2016-2016.0.16.209
packages.ee-data=system-test-data-ee2016-2016.0.16.209
packages.ee-data=demo-data-ee2016-2016.0.16.209
VALUE
The VALUE is used to define a range of acceptable versions for the package. Typically the VALUE configures a specific
version. When the NAME and the package name are identical, the package name may be omitted from the VALUE.
Ex.
packages.fin-src-proxy=2016.0.80.5
Here are some examples where a range is configured using the netui-module-dashboard-cm package for illustration:
packages.netui-module-dashboard-cm=
packages.netui-module-dashboard-cm=[1]
packages.netui-module-dashboard-cm=[1,2)
Include/Exclude Conditions
Packages may be configured so they are included in the environment only if other packages are included in the
environment ("if" setting) or only if other packages are not included in the environment ("unless" setting).
If Condition
A comma-delimited list of package ranges, ONE of which MUST match an included package, or the package will be
excluded.
206
QAD Adaptive ERP Configuration and Administration Guide
Unless Condition
A comma-delimited list of package ranges, ALL of which MUST NOT match an included package, or the package will be
excluded.
Ex. Include the 'mongodb' package if either the 'event-service' or 'collaboration' package is included.
packages.mongodb=mongodb-rhel5-3.0.3.0
packages.mongodb.if=event-service,colloboration
Enable/Disable Conditions
Included packages may be configured so they are enabled in the environment only if other packages are enabled in the
environment ("enabled.if" setting) or only if other packages are not enabled in the environment ("enabled.unless" setting).
Alternatively packages can be directly enabled and disabled ("enabled" setting), which takes precedence over enabled
conditions.
Enabled
Set to enable or disable a package.
packages.NAME.enabled=[true|false]
If Condition
A comma-delimited list of package ranges, ONE of which MUST match an enabled package, or the package will be
disabled.
Unless Condition
A comma-delimited list of package ranges, ALL of which MUST NOT match an enabled package, or the package will be
disabled.
Ex. Enable the 'mongodb' package if either the 'event-service' or 'collaboration' package is enabled.
packages.mongodb=mongodb-rhel5-3.0.3.0
packages.mongodb.enabled.if=event-service,colloboration
enabled yab.enabled
enabled.if yab.enabled.if
enabled.unless yab.enabled.unless
207
QAD Adaptive ERP Configuration and Administration Guide
Override
The 'override' setting is used to force all constraints for a package to use the configured value. It is the equivalent of
defining a redirect statement for the package.
packages.NAME.override=[true|false]
Ex. Configure the 'base-1-4-0-139-customer-1.4.0.20004' hotfix package to override the standard 'base' package.
packages.base=base-1-4-0-139-customer-1.4.0.20004
packages.base.override=true
dependency.redirects=base=base-1-4-0-139-customer-1.4.0.20004
Patching
A comma-delimited list of package ranges, used to patch a package in the local catalog.
The patch packages are applied on top of the base package in the order in which they are defined.
208
QAD Adaptive ERP Configuration and Administration Guide
ports setting
Configures a range of TCP/IP ports to allocate to services that do not have a fixed port.
ports=16500-16550
The dynamic-ports setting is used to allocate a default port range for services that dynamically open ports.
209
QAD Adaptive ERP Configuration and Administration Guide
verify setting
Instructs YAB to verify commands.
This is best illustrated with an example. The tomcat-default-start command will start the default Tomcat
instance if it is not already running. The command will execute a Tomcat script to start the server (see: scripts/tomcat-
default-start) and this script is asynchronous, meaning it will begin to start the Tomcat instance but then immediately
return control to the calling program. When the command returns a STARTED status this can be interpreted as saying that
the Tomcat server was not running and a request was successfully submitted to start the server. The (-verify) option will
take this one step further and wait for a configurable amount of time until the Tomcat server is started (Tomcat is listening
on the HTTP or HTTPS port and all testable web applications are active), returning a PASSED status when the desired
state is verified.
The (-verify-no-exec) option does the verification but without executing any commands. For example, the environment
could be stopped without verification, and then subsequently tested using the (-verify-no-exec) option which might provide
better overall performance.
210
QAD Adaptive ERP Configuration and Administration Guide
The maximum amount of time to wait for the system to be in the desired state is configured using the Timeouts
mechanism and the handling of failures can be configured with the "verify.timeoutexception" setting (see below):
SETTINGS
All commands to start and stop servers have an associated verification. Other commands are not currently associated with
a verification.
211
QAD Adaptive ERP Configuration and Administration Guide
Product Upgrades
Customizations
Patches
Prepared Contexts
212
QAD Adaptive ERP Configuration and Administration Guide
Product Upgrades
Product updates are delivered as zip files. The zip file contains packages to install into the environment. Always review the
product installation guide before upgrading the product.
In most cases, the installer will automatically run an update to apply the product to the system after the product is
configured. If the install fails before running the update, the installer will automatically roll back the install. If the update
fails, there is no need to re-install the product. You can run the update again after resolving the problem to move forward
with the product or restore the configuration backup from before the install (automatically created by the install) and then
run an update to remove the product from the system.
A complete log of the installation is recorded in the temp directory and may contain debugging information not recorded in
"build/logs/yab.log":
/tmp/install.[USER].log
Delayed Install
The option (-install-update:false) is used to configure a "delayed install" of the product where the packages are integrated
into the environment but the environment update is delayed.
This delay can be used to "batch" install multiple products and then apply all of the products with a single update.
Background Install
You can run an install that does not prompt for input as you would any other process.
If the install prompts for input you will need to define a file with the required input and locate that file using the (-install-
conf) option, as well as disabling the user interface (-install-ui:false) when running the install.
If you are unsure whether the install will prompt for input you can run the install in a special mode where it will run the UI (if
there is one) and then exit before proceeding with the install.
If the install output is redirected into a file it may be useful to turn off animations using the option (-notify.animated:false).
213
QAD Adaptive ERP Configuration and Administration Guide
Customizations
Customizations are files that supplement or replace standard product files. The approach to integrating a customization
varies according to the application component being customized, but in general customizations are organized in the
customizations directory (configured by the setting customizations.dir) and then applied to the application with the update c
ommand.
customizations.dir=${appdir}/customizations
Operational Customizations
Financials Customization
Integrated Customization Toolkit
Desktop Customizations
Adding Custom Data
Metadata
Process Maps
Adding Custom Database
Adding Custom Application Server
Compiling EDI Functions
Adding Custom Directory Backup Processes
214
QAD Adaptive ERP Configuration and Administration Guide
Operational Customizations
An operational customization can include Progress programs and data. Customizations are organized in the directory
configured by the customizations.mfg.dir setting, which defaults to:
customizations/mfg
Setup
To define a new customization create a sub-directory for the customization:
mkdir -p customizations/mfg/cust1/src/us/so
mkdir -p customizations/mfg/cust1/src/us/wo
mkdir -p customizations/mfg/cust1/data/qadadm
mkdir -p customizations/mfg/cust1/data/qaddb
Copy the source code into the src directory and the data into the data directory.
Compiling
To compile customized programs execute the command:
The r-code will be written into the the directory configured by the code.mfg-customizations.dir setting, which defaults to:
dist/mfg-customizations
To recompile a standard program using the customization compile (for example if the standard program references an
include file that has been customized) add the program to the following file with a propath relative path (e.g. 'us/so/sosomt.
p'):
customizations/mfg/compile.lst
If the customization includes data, execute the update command instead, to load the data and compile the programs:
215
QAD Adaptive ERP Configuration and Administration Guide
YAB will automatically order the compile PROPATH so that customizations take precedence over standard programs. If the
relative order of customizations is important a grouporder annotation may be defined on the code.mfg-customizations.
propath setting to fine-tune the order. Customizations that are not enumerated in the grouporder annotation will be ordered
after the enumerated customizations.
Ex.
Removing
To remove customized programs from the system (source code and rcode), remove the source code and then recompile:
216
QAD Adaptive ERP Configuration and Administration Guide
The following steps describe how the archive downloaded from the QAD Download Center can be integrated into a YAB
environment, and how source files can be copied to a customization area.
In the context of these source files, 'integrated' means the sources are in the environment catalog. It does not mean that
the sources appear on any environment propath (compile or runtime).
A command is provided to move sources from the environment catalog into a customization area - which does appear in
application propaths.
As a starting point it is assumed that the media has already been downloaded. Ex. File 00098765.125.7z has been
downloaded to /dr01/mymedia.
Note - when specifying wildcards (ex. '*') as part of the copy the argument should be within quotes.
Use 'code-mfg-customizations-locate' to verify the code copied to the customizations area matches the code it is
replacing.
Ex. verify file us/pt/ptsurp.p copied into customization area matches the original version of the file.
217
QAD Adaptive ERP Configuration and Administration Guide
As the original file is encrypted the -xcode option is used to create an encrypted copy of the new file so they may be
compared.
If the hash of both files is not the same the version of the source archive must be reviewed to determine why they do not
match.
218
QAD Adaptive ERP Configuration and Administration Guide
Financials Customization
The Financials component is customized by defining Progress programs that adhere to the Financials Non-Intrusive
Customizations guidelines.
The location of this package on the system can be determined by executing this command.
Financials customizations should be defined in the location configured by the customizations.fin.dir setting.
Template files can be copied into the customizations.fin.dir from the package directory for development.
Alternatively as a convenience the following command can be executed to apply the customizations when the change is a
code change only.
219
QAD Adaptive ERP Configuration and Administration Guide
220
QAD Adaptive ERP Configuration and Administration Guide
customizations/ict
Within the customization directory a compile list utcompil.wrk enumerates the files that should be compiled with ICT. It
may be necessary to add a customized program to this list when using certain ICT features like "program hooks":
customizations/ict/utcompil.wrk
When a task is closed in a development environment, the task is promoted to the directory configured by the ict.central.dir
setting, with the default:
dist/ict-customizations
221
QAD Adaptive ERP Configuration and Administration Guide
The following are required before the Integrated Customization Toolkit can be installed.
ICT licenses
Installation
If the environment will be used to develop ICT customizations ict.toolkit should be set to true (default:false).
build/config/configuration.properties
ict.toolkit=true
Setting ict.toolkit=true configures application sessions with additional PROPATH entries to support the ICT
development. These additional PROPATH entries should not be required when customizations developed with ICT are
integrated into non-development environments.
build/config/configuration.properties
packages.integrated-customization-toolkit=[VERSION]
> scripts/client-us
You must start a new client session for the license changes to take effect.
222
QAD Adaptive ERP Configuration and Administration Guide
The install creates the ictdmp-ict-update process to load ICT data using CIM. The process will not succeed
(and will log a warning) when the core Enterprise Edition licenses have not been entered into the system. After the data is
successfully loaded into the system, it cannot be reloaded (i.e. during a subsequent upgrade) until the application user
configured by the user/password settings has been granted permissions to the ICT menus (see Grant ICT menu
permissions above).
223
QAD Adaptive ERP Configuration and Administration Guide
Desktop Customizations
Desktop customizations typically take the form of Progress programs to support a browse or a report. Customizations are
organized in the directory configured by the customizations.pro.dir setting, with the default:
customizations/pro
The files in the customization directory will deployed into the directory configured by the netui.pro.dir setting, with the
default:
dist/pro
You may need to create any nested directories if that is required by your customization.
Ex.
mkdir -p customizations/pro/com/qad/shell/report/reports
The netui-pro-update command (or update) copies all customizations into dist/pro and then (re)compiles the programs.
224
QAD Adaptive ERP Configuration and Administration Guide
customizations/mfg/[NAME]/data/[DATABASE]
The system comes with one pre-defined NAME "default" and others can be manually defined to keep work distinct if that is
desirable (the name should consist of lowercase letters, numbers, and dashes). The DATABASE is the name of the
database in the configuration without the "db." prefix (e.g. "qaddb") and may need to be manually defined.
Use the following command to enumerate the configuration names of the databases in the system:
Both XML format (preferred) and Progress native ".d" format are supported.
Lets walk through an example where the standard "ab001" browse has been customized using the Browse Maintenance
program. After developing the customization, export it into the directory.
And then use the following command to (re)load the data. The refresh (-r) is only necessary once for the first file added in
the data directory, to allow the system to recognize the change.
Like all managed artifacts, the XML data file describes the data you want in this system. Removing the XML data file will
restore the standard browse in this case or in the case where a new browse was defined, it will delete the browse.
225
QAD Adaptive ERP Configuration and Administration Guide
Metadata
Metadata is another form of system data distributed in QAD Reference Architecture (QRA) modules. The metadata-
export command is used to export metadata from a module to the file system.
226
QAD Adaptive ERP Configuration and Administration Guide
Process Maps
Customized process map content is staged in the customizations/processmap directory. Customized process map
definitions can be added into the directory and additional sub-directories can be created as needed to organize the
content. Property files added into the properties sub-directory will be merged into the deployed process map property files.
As an alternative, the webapp.pronav.content.excludes setting may be used to exclude files from being
updated by the system.
SETTINGS
227
QAD Adaptive ERP Configuration and Administration Guide
Database
Defines a new database named 'custom' that inherits the default database settings.
# @extends db._base
db.custom=
db.custom.physicalname=custom
Database Server
Defines a database server that inherits the default database server settings.
# @extends dbserver._base
dbserver.custom=
dbserver.custom.name=db-${db.custom.physicalname}
dbserver.custom.databasename=${db.custom.dir}/${db.custom.physicalname}
dbserver.custom.fourgl.network=true
dbserver.custom.fourgl.port=23600
The database server is associated with the database by sharing the same INSTANCE name. For example, the "dbserver.
custom" is the database server for "db.custom" because they share the instance name "custom".
228
QAD Adaptive ERP Configuration and Administration Guide
Use the following setting to define a database server that does not automatically start and stop when the environment is
started and stopped.
dbserver.custom.manual=true
Schema
To define schema for the custom database:
schema.custom.database=db.custom
schema.custom.file=/dr01/qadapps/qea/customizations/database/custom.df
Using
Use the following configuration to include the database in all compile sessions:
# @append
code._base.databases=db.custom
# @append
code.mfg.databases=db.custom
# @append
bootstrap.default.databases=db.custom
Update
To apply the configuration changes execute the update command.
229
QAD Adaptive ERP Configuration and Administration Guide
230
QAD Adaptive ERP Configuration and Administration Guide
build/config/configuration.properties
# @extends appserver.mfg
appserver.mrp=
appserver.mrp.name=as-mrp
appserver.mrp.operatingmode=State-reset
appserver.mrp.initialsrvrinstance=12
appserver.mrp.maxsrvrinstance=20
appserver.mrp.minsrvrinstance=12
# @port
appserver.mrp.portnumber=23601
appserver.mrp.manual=true
After applying the configuration to the system, the application server could be started and stopped as it is needed.
Start
Stop
Status
To have the application server start and stop with the rest of the components in the environment adjust the following
setting:
appserver.mrp.manual=false
231
QAD Adaptive ERP Configuration and Administration Guide
build/config/configuration.properties
@extends pas._base
pas.as-mrp=
pas.as-mrp.name=pas-as-mrp
# @port
pas.as-mrp.httpport=23601
# @port
pas.as-mrp.sslport=
# @port
pas.as-mrp.serverport=
pas.as-mrp.openedge.agent.numInitialSessions=12
pas.as-mrp.openedge.agent.minAvailableABLSessions=12
After you apply the configuration to the system, you can start and stop the application server as needed.
Start
Stop
Status
To have the application server start and stop with the rest of the components in the environment adjust the following
setting:
pas.as-mrp.manual=false
232
QAD Adaptive ERP Configuration and Administration Guide
EDI sources are expected in dist/edifunc/default, and the rcode is also written to this directory.
Compile database connections and propath are inherited from the code.mfg settings.
The EDI compile is included as part of an update.
Ex. To add domain specific EDI function locations for Domain1 and Domain2.
233
QAD Adaptive ERP Configuration and Administration Guide
build/config/configuration.properties
# @extends directorybackup._base
directorybackup.custom=${dbbackup.dir}
directorybackup.custom.source.dir=${webapp.desktop.dir}
directorybackup.custom.target.dir=${dbbackup.dir}
directorybackup.custom.includes=WEB-INF/**
directorybackup.custom.excludes=WEB-INF/logs,WEB-INF/logs/**
directory-custom-backup
Backs up the 'custom' files.
directory-custom-backup-list
Lists the 'custom' backup files.
directory-custom-backup-remove
Removes the 'custom' backup files.
directory-custom-restore
Restores the 'custom' backup files.
An aggregating backup command directorybackup-backup is available to group backups that should be run as
part of an environment backup. By default a backup is not included in the aggregating command. To include a backup to
run as part of the directorybackup-backup command:
directorybackup.custom.manual.backup=false
1. directory-action-center-backup
2. directory-custom-backup
3. directorybackup-backup
Tags
The '-tag' option either gives a backup a tag to identify it, or specifies the backup to be restored or removed.
The directorybackup.target.dir setting defines the location where backups for this instance will be created.
Within the backup directory, sub-directories based on the tag are used to organize backups. Previous backups that use
the same tag are overwritten, unless configured to not overwrite
directorybackup.custom.overwrite=false.
234
QAD Adaptive ERP Configuration and Administration Guide
The default tag name is "default". Backups can be configured to use timestamps as the tag by default
directorybackup.custom.timestamp=true
The maximum number of timestamped backups that are stored kept can be limited, 0 implies no limit.
directorybackup.custom.timestampmax=5
When directorybackups are run as part of an environment-backup the the dbbackup.timestamp / dbbackup.timestampmax
settings override the directorybackup.timestamp / directorybackup.timestampmax settings - ensuring a consistent
timestamp across the environment-backup.
Listing backups
To list the available backups:
directory-custom-backup-list (1 task)
------------------------------------------------------------------------------
1/1 directory-custom-backup-list
Tag: default
------------
Location: /qad/local/sandbox/backups/dvr/vmdvr02.qad.com/default/custom
Compressed: No
Tag: 20180718095548
-------------------
Location: /qad/local/sandbox/backups/dvr/vmdvr02.qad.com/20180718095548/custom
Compressed: Yes
Restoring Backups
To restore a backup directly:
Similar to the aggregation of backup commands under an directory-backups command, restore commands are
also aggregated under a directorybackup-restore command.
To prevent unintended restores each restore process must be configured to enable it run under the aggregating command
using directorybackup.manual.restore=false
>yab directorybackup-restore
directorybackup-restore (2 tasks)
------------------------------------------------------------------------------
1/2 directory-action-center-restore SKIPPED (0.001 s)
2/2 directory-custom-restore SKIPPED (0.001 s)
------------------------------------------------------------------------------
Configure directorybackup.action-center.manual.restore=false
235
QAD Adaptive ERP Configuration and Administration Guide
directorybackup-restore (2 tasks)
------------------------------------------------------------------------------
1/2 directory-action-center-restore OK (1.048 s)
2/2 directory-custom-restore SKIPPED (0.000 s)
------------------------------------------------------------------------------
Use the '-tag' option to identify a specific backup to be restored. If '-tag' is not provided the tag 'default' is used.
Removing Backups
To remove a specific backup:
236
QAD Adaptive ERP Configuration and Administration Guide
Patches
This section covers the following information related to patches:
237
QAD Adaptive ERP Configuration and Administration Guide
patches/mfg
Setup
To define a new patch create a sub-directory for the patch:
mkdir patches/mfg/patch1
mkdir -p patches/mfg/patch1/src/us/so
mkdir -p patches/mfg/patch1/src/us/wo
mkdir -p patches/mfg/patch1/data/qadadm
mkdir -p patches/mfg/patch1/data/qaddb
Copy the source code into the src directory and the data (Progress .d or QAD XML) into the data directory.
Installing
To install the patch execute the update command with the refresh option (-r).
The data will be loaded into the relevant databases and the operational code will be recompiled, including the patched
sources, into a directory configured by the code.mfg.dir setting, with the default:
dist/mfg
YAB will automatically order the compile PROPATH so that patches take precedence over standard programs. If the
relative order of patches is important a grouporder annotation may be defined on the code.mfg.propath setting to fine-tune
the operational code compile PROPATH. Patches that are not enumerated in the grouporder annotation will be ordered
after the enumerated patches.
Ex.
Removing
To remove patched programs from the system (source code and rcode):
rm -rf patches/mfg/[NAME]/*
yab code-mfg-update
238
QAD Adaptive ERP Configuration and Administration Guide
Financials Hotfix
Financials is 'hotfixed' by copying the hotfix r-code into the following directories:
dist/fin/proxypatch
dist/fin/patch
These directories are included in the run time propath property fields.
Financials can also be hotfixed by copying the proxy hotfix source code into the following directory:
patches/fin/proxypatch
Removing
To remove patched proxy programs from the system (source code and rcode):
dist/fin/proxypatch
dist/fin/patch
239
QAD Adaptive ERP Configuration and Administration Guide
Package Patch
A package is patched by overlaying another "patch" package on top of the package, potentially adding and replacing files.
The package is patched in the local software catalog.
Configuration
Patches are configured using the patches setting:
Ex. Patch the dde-build-1.1.0.0 package by the application of two patch packages.
packages.dde-build=1.1.0.0
packages.dde-build.patches=dde-build-patch-1.1.0.1,dde-build-patch-
1.1.0.3
Patches are applied to the destination package in the order in which they are defined. If a configuration change invalidates
the patched package (i.e. a patch is removed, the patch order changes), the original package will be restored and patched
(as necessary).
A package with patches configured is automatically sourced from the local software catalog.
Displaying
The info command lists the configured packages. A package with patches lists the patches below the package.
240
QAD Adaptive ERP Configuration and Administration Guide
File Patch
A file can be patched using the patch configuration type. Typically a patch is used as a temporary corrective action to
change a managed file in a way that is not yet supported by the system while ensuring that the change is not lost when
the system is updated.
This is best illustrated with an example. Imagine it was necessary to add a proserve argument to the scripts that start
database servers (i.e scripts/database-INSTANCE-start), but the argument was not yet supported by YAB. If the scripts
were directly edited, it is possible the change would be lost the next time the system was updated. A more durable
solution would be to create a patch describing the change and then configure that patch to be applied after the databas
e-script command executes (the command that is responsible for generating the standard script).
rm scripts/database-qaddb-start.modified
Configure the patch to be applied to all files in the scripts directory that match the pattern 'database-*-
start' anytime the database-script command is executed.
build/config/configuration.properties
patch.database-start.patch=${patches.dir}/scripts/database-instance-
start.patch
patch.database-start.dir=${scripts.dir}
patch.database-start.includes=database-*-start
patch.database-start.trigger=database-script
Applying a patch may not produce the desired result if the patched file differs greatly from the file that was used to generate
the patch.
241
QAD Adaptive ERP Configuration and Administration Guide
qra.pl
A patch for the qra.pl procedure library distributed in the qra-oe11 package.
build/config/configuration.properties
# @append
# @group 3
propath.base=${patches.dir}/qra.pl/qra.pl
242
QAD Adaptive ERP Configuration and Administration Guide
Prepared Contexts
An update can be prepared in a context. YAB will consume system resources (CPU, Memory, Disk) while preparing the
update, but otherwise the request will have no impact on the live environment.
The ability to prepare an update "in advance", can have the following uses:
To prepare an update for an environment, while the environment is running, without disrupting users.
To abandon a failed attempt at preparing an update without having had any impact on the environment.
To reduce the time the environment is offline when the update is applied, by reducing the work that must be done
while the environment is offline.
To review the changes before they are applied to the environment.
To have the option to (partially) revert an update that has been applied to the system.
Contexts may also be leveraged as a creative way to periodically (nightly, weekly) validate that an environment is in a
suitable state to be updated. For example, an administrator could set up a cron job to prepare the update command in a
context and then delete the context, to validate that the code in an environment compiles.
Using a context
Adding files to a context
Validating a context
Logging in a context
Context Guidelines
Limitations
243
QAD Adaptive ERP Configuration and Administration Guide
Using a context
Use the (-c) option to submit a request to run in a context. If the context does not exist it will be created.
Typically you will want to name the context yourself by supplying a meaningful name as the value of the option.
But you can omit the name to create a new context with a unique system generated name.
> yab -c
65fc
> yab system-context-list
65fc build/contexts/prepared/65fc
In the previous examples, we simply created a context. Our request did not have any commands. Following this, we could
submit commands to run in that context by referencing the context by name (-c:NAME), but it is not necessary to create
the context in a separate request. For example, either of the following requests will install i19-es-2.2.0.7 in a context
named "install-i19-es".
or
We might even install multiple products into a context and use the (-install-update:false) option to defer the update until
the end.
Nothing we have done up to this point will have had an effect on the environment. We can see this by comparing the
result of running the info command outside of the context with the result of running it in the context. The info outside of the
context will not list our pending i19 products (because they have not been applied) but the info run in the context will. (You
can use other YAB commands (help, config) to query the state of the context as well.)
Use the explain-apply command to get a detailed view of what would happen if the changes in the context were
applied, without actually applying the changes.
Only the changes produced by the last request are saved in the context, with the following exceptions:
Requests that do not introduce changes (help, info, config, explain-apply) are safe to run at any time.
Package and configuration changes are retained across requests.
The practical takeaway is that the last command in a context before the context is applied should almost always be update
or a command that runs update like install.
244
QAD Adaptive ERP Configuration and Administration Guide
When you are ready to apply the changes prepared in the context to the environment, use the apply command.
In the typical case where you have prepared an update, the environment will be taken offline for a portion of the time.
If the apply fails, you can revert the changes prepared in the context.
Not all changes that can be applied can be reverted, but usually a revert with some manual adjustments, is preferable
to having to manually roll back all of the changes that were applied to the environment.
The system-context-info command reports on the processes (and optionally operations) that have been applied
to the environment.
When you are through with the context, you can delete it to reclaim disk space:
245
QAD Adaptive ERP Configuration and Administration Guide
build/contexts/prepared/[NAME]/fs
When you install software in a context, you do not need to interact directly with the cache. For certain kinds of changes,
however, you may need to work with the cache. For example, consider a scenario where you want to prepare a change to
configuration.properties in a context. To set things up you would use the system-context-locate
command with the (-pull) option to add configuration.properties into the context.
> vi /dr01/qadapps/ee/build/contexts/prepared/cfg/fs/rw/_/build/config
/configuration.properties
246
QAD Adaptive ERP Configuration and Administration Guide
Validating a context
Using a context introduces the risk of conflicts.
For example, applying a change prepared in a context typically will restart the environment. Standard operating
procedures, may require that you schedule downtime and while waiting for the downtime window, a file with a pending
update in the context could be modified in the environment. Applying the change would lose the changes made in the
environment. To address this problem, the context includes information describing the original state of the environment,
and when the environment is no longer in this state, the request will be flagged as INVALID. The explain-apply
command can be used at any time to check whether or not a context is valid to be applied (and likewise the explain-
revert command to check if the context is valid to be reverted). The apply command will also perform these
validations up front and reject the request if any of the changes are INVALID.
The (-errors) option on the system-context-info command provides a focused way to see the details behind
any integrity violations.
247
QAD Adaptive ERP Configuration and Administration Guide
Logging in a context
Log messages are recorded in the context while the context is prepared:
build/contexts/prepared/[NAME]/logs/yab.log
When changes are applied to the environment (apply or revert) log messages are recorded in the context and in the
environment:
build/logs/yab.log
248
QAD Adaptive ERP Configuration and Administration Guide
Context Guidelines
A context can be leveraged to prepare a change in advance without impacting the environment, but this separation from
the environment increases the difficulty of resolving failures. By following the guidelines below, you can reduce the chance
of failure while being prepared to respond if a failure occurs.
Preparation
Verify the environment is in working order
Ensure that all environment components are running:
If the environment can be taken offline, an update should be run before verifying the environment.
Handling Failures
Before Apply
Until the context is applied to the environment, work in the context has no effect on the environment. The safest strategy
for recovering from a failure that occurs before the context is applied, is to determine the underlying cause of the failure,
delete the context, and then start over with an appropriately revised plan.
In limited circumstances where this extra precaution is not necessary it may be possible to correct a failure by adjusting
the context (changing configuration settings, installing new software), followed by reprocessing the change in the context.
During Apply
Invalid Status
When the apply fails with an INVALID status, this indicates that the environment has changed since the context was
created. The context log file will contain detailed information on the the files that have changed. These integrity errors are
raised during an initial verification before the environment has been modified and can be handled in the same manner as
a "Before Apply" failure.
In limited circumstances, the integrity error will describe a change that is not substantive (for example a file timestamp has
changed where nothing else is different) and the administrator can choose to force the apply using the (-force) option.
Forcing an apply indiscriminately could result in losing changes to the environment as the "out of date" files in the context
are applied to the system.
Other Errors
The system-cache-flush step integrates packages and configuration changes into the environment. If a failure
occurs before this step, the error can be handled in the same manner as a "Before Apply" failure.
If a failure occurs after system-cache-flush, you have the choice of trying to continue integrating the prepared
change or trying to restore the system to its previous state. Whether it is best to move forward or back depends on a
number of factors and is not a decision that is easy to generalize about.
249
QAD Adaptive ERP Configuration and Administration Guide
Moving Forward
The recommended approach is to continue by working directly with the environment and not the context. In other words,
make the appropriate corrections directly in the environment and then process the changes by running an update in the
environment.
In limited circumstances (when you know what you are doing), corrections can be applied to the context and/or
environment and the apply can be reissued (it will resume where it previously failed).
Moving Back
Before the context is applied, the system creates a configuration backup with the name "before-CONTEXT" where
CONTEXT is the name you assigned to the context. To restore the configuration backup use the (-config-restore) option
and then run an update to apply the change.
Ex. Restore the configuration before the "test" context was applied.
250
QAD Adaptive ERP Configuration and Administration Guide
Limitations
Some upgrades cannot be prepared.
Some applications are sensitive to version differences between client and server processes. OpenEdge, for example,
cannot be upgraded in a context, because a shared memory connection from a client in the context (new version) to a
server in the environment (old version) could fail.
Limited Coverage
We can prepare configuration, package, and Progress schema, (XML) data, and code changes. We plan on increasing
coverage in subsequent releases.
You can prepare a request even when some of the steps/commands are not prepared. The commands that cannot be
prepared are deferred (status DEFER) until the context is applied to the environment at which point they are run in the
proper sequence along with the commands that were prepared in advance.
251
QAD Adaptive ERP Configuration and Administration Guide
Troubleshooting
Logging
Financials Logging
Temporary Files
Collecting Diagnostic Information
Disabling Commands
Refresh & Clean Options
Validation Settings
Defining Java Startup Parameters
Adding Packages to Local Catalog
Control Process Execution
Interactive Execution
Non-interactive Execution
252
QAD Adaptive ERP Configuration and Administration Guide
Logging
Log information is recorded to the build/logs directory by default.
YAB
The yab.log file records log messages for requests submitted through YAB. The types of messages that will be recorded
in the log file can be controlled with a request level option:
-log-level:[OFF|FATAL|ERROR|INFO|DEBUG|TRACE]
The level is interpreted as a threshold. A setting of OFF will discard all log messages, whereas the default setting of
DEBUG will record FATAL, ERROR, INFO, and DEBUG messages to the log file.
The (-v) option will write log messages to the console as well as to the log.
The logging in YAB uses the log4j framework. The log4j config file build/config/etc/log4j.xml is a standard log4j
configuration document that is used to define specific thresholds for logging categories and to determine where log
messages are routed (appenders).
Messages are logged using the following format (where the LOGGER is a name for the code that is submitting the log
message):
Ex.
The (-log-copy) option may be used to write all log messages for the request to a specific log file in addition to the standard
YAB log file. When a log file is not specified a timestamp log file is created in the log directory.
Ex. Write the output of this command to a file named "test.log" in the current working directory.
Progress
The setting progress.service.loglevel is used to set the initial log level of all Progress servers.
Log Levels:
253
QAD Adaptive ERP Configuration and Administration Guide
The following query shows the current log level of all the Progress servers.
To apply a logging level change run the update command that corresponds to the server.
The System Configuration page includes an example process for enabling/disabling 4GL trace on an application server.
The database log files (*.lg) are written in the same directory as the other database files.
254
QAD Adaptive ERP Configuration and Administration Guide
Financials Logging
To troubleshoot a Financials synchronization error you can enable additional logging of the flow by editing the Synchron
ize.config file and setting the BLDebugLevel to 31. This will only impact synchronization and not other
Financials sessions.
config/Synchronize.config
BLDebugLevel=31
Additional details will be logged to a file name ct<1234567>.log where 1234567 is the sessionID (random number) used
by the process.
The location of the log is configured by the setting fin.serverxml.logging-directory which defaults to the
standard logs directory:
fin.serverxml.logging-directory=${appdir.logs}
255
QAD Adaptive ERP Configuration and Administration Guide
Temporary Files
YAB creates and removes temporary files while servicing requests.
export KEEP_TEMP_FILES=true
unset KEEP_TEMP_FILES
export YAB_JAVA_OPTS=-Djava.io.tmpdir=/qond/tmp
256
QAD Adaptive ERP Configuration and Administration Guide
system-diagnostics (1 task)
-------------------------------------------------------------------------
----
1/1 system-diagnostics OK (6.211 s)
-------------------------------------------------------------------------
----
BUILD SUCCESSFUL (7.642 s)
> ll *.zip
-rw-rw-r-- 1 mfg qad 1316481 Mar 26 2015 qea-20160311095017.zip
See system-diagnostics
257
QAD Adaptive ERP Configuration and Administration Guide
Disabling Commands
The process-ignore file is used to enumerate commands that should not be executed, for example, because the command
is not appropriate for the environment or because the command is not functioning correctly and is preventing the
execution of other essential commands.
build/config/etc/process-ignore
258
QAD Adaptive ERP Configuration and Administration Guide
Refresh Option
The refresh option (-r) will force YAB to re-evaluate the application configuration potentially resulting in changes to
configuration settings, commands, and even the packages associated with the environment. This re-evaluation is
automatically triggered whenever a configuration document is added, removed, or modified, the update command is
executed, or the clean option (see below) is defined.
The check-for-updates setting controls whether or not a refresh will reevaluate packages.
Clean Option
The clean option (-clean) option discards/ignores the information used by the requested commands to determine if any
work needs to be performed.
259
QAD Adaptive ERP Configuration and Administration Guide
Validation Settings
It is occasionally necessary or desirable to treat validation errors as non-critical warnings or to skip specific validations.
SETTINGS
Default: true
build/config/configuration.properties
validation.error=false
build/config/configuration.properties
validation.skip.keys=schema.qrabridge-qadadm.area.map
build/config/configuration.properties
validation.skip.validators=com.qad.yab.ee.foundation.CodePageValidation
Validation settings cannot be defined as request parameters but must be set in a configuration file.
260
QAD Adaptive ERP Configuration and Administration Guide
export YAB_JAVA_OPTS="-XX:MaxPermSize=128m"
261
QAD Adaptive ERP Configuration and Administration Guide
Add Package
Ex. Add dde-core-1.1.0.0 into the local catalog.
Remove Package
Ex. Remove dde-core-1.1.0.0 from the local catalog.
Adding a package into the local catalog will add the package to the local catalog but it will not be used by the application
unless it is configured and applied.
262
QAD Adaptive ERP Configuration and Administration Guide
263
QAD Adaptive ERP Configuration and Administration Guide
Interactive Execution
Debug Pause(-debug-pause)
The request option (-debug-pause) puts YAB into a mode where the end user is prompted before each step in a command
is executed. This mode can be useful when it is necessary to halt or pause the execution at a critical point to examine the
state of the system before continuing.
[REFRESH]
-------------------------------------------------------------------------
-----
packages OK (0.076 s)
(20 tasks)
[APPLY]
-------------------------------------------------------------------------
-----
1/20 system-config-package-init OK (0.440 s)
2/20 system-config-before-configure OK (0.021 s)
3/20 extension-scan OK (0.002 s)
4/20 system-config-extension-init OK (0.141 s)
5/20 stage-init OK (0.001 s)
6/20 alerts-stage OK (0.005 s)
7/20 configurator-stage OK (0.006 s)
8/20 qadcss-stage OK (0.021 s)
9/20 eam-stage OK (0.004 s)
10/20 content-discovery OK (0.133 s)
11/20 branch-evaluate OK (0.036 s)
12/20 content-scan OK (1.650 s)
13/20 system-config-configure OK (0.691 s)
14/20 system-config-final-configure OK (1.151 s)
15/20 system-config-validate OK (0.195 s)
16/20 system-config-after-configure OK (0.384 s)
17/20 system-config-final-after-configure OK (0.001 s)
18/20 content-order OK (0.002 s)
19/20 system-config-save OK (0.354 s)
20/20 system-cache-flush OK (0.001 s)
-------------------------------------------------------------------------
-----
Press ENTER to run 'config-host-update' ('s' skip, 'a' run all, 'n' run
all to next break, 'sn' skip all to next break, 'q' quit).
>
The system can be configured to break (prompt) at a specific set of steps instead of at every step by configuring the
option (-break) with a comma separated list of steps to break at.
264
QAD Adaptive ERP Configuration and Administration Guide
By default, the steps that precede the first break step will be executed without prompting. Use the (-skip) option to skip the
steps that precede the first break step, which may be useful to resume processing at a point of failure.
By default, the system will prompt the user prior to executing any processes specified in (-break), this behavior can be
altered to prompt the user after the specified process by using the (-after) option.
The prompt options control whether the current step is executed and at what point the system should prompt again.
Key Description
{ENTER} Executes the current step and prompts at the next step.
n Executes the current step and prompts at the next break step.
sn Skips the current step and prompts at the next break step.
In the following example an update is requested. The (non-system) steps preceding the first break step "netui-pro-
compile" are skipped. When prompted, the option "n" was chosen to execute all steps until the next break step "bootstrap-
default-update" at which point "q" was chosen to quit the program.
[REFRESH]
-------------------------------------------------------------------------
-----
packages OK (3.398 s)
(14 tasks)
[APPLY]
-------------------------------------------------------------------------
-----
1/14 system-config-package-init OK (0.239 s)
2/14 system-config-before-configure OK (0.011 s)
3/14 extension-scan OK (0.001 s)
4/14 system-config-extension-init OK (0.068 s)
5/14 content-scan OK (1.432 s)
6/14 content-configure OK (0.300 s)
7/14 system-config-configure OK (0.419 s)
8/14 system-config-final-configure OK (0.603 s)
9/14 system-config-validate OK (0.720 s)
10/14 system-config-after-configure OK (0.335 s)
11/14 system-config-final-after-configure OK (0.000 s)
12/14 content-order OK (0.001 s)
13/14 system-config-save OK (0.180 s)
14/14 system-cache-flush OK (0.001 s)
-------------------------------------------------------------------------
-----
265
QAD Adaptive ERP Configuration and Administration Guide
[APPLY]
-------------------------------------------------------------------------
-----
1/599 openedge-upgrade-check SKIPPED
(0.000 s)
2/599 config-host-update SKIPPED
(0.000 s)
3/599 trans-dotdees-fhd-stage SKIPPED
(0.000 s)
...
348/599 netui-language-configscreens-update SKIPPED
(0.000 s)
349/599 netui-pro-config-update SKIPPED
(0.000 s)
350/599 netui-pro-compile
Press ENTER to run 'netui-pro-compile' ('s' skip, 'a' run all, 'n' run
all to next break, 'sn' skip all to next break, 'q' quit).
> n
OK (1:09 m)
351/599 netui-pro-install OK (13.470 s)
352/599 bootstrap-default-update
Press ENTER to run 'bootstrap-default-update' ('s' skip, 'a' run all,
'n' run all to next break, 'sn' skip all to next break, 'q' quit).
> q
SKIPPED (21.178 s)
-------------------------------------------------------------------------
-----
Use the system-process-list command to list the "steps" associated with a command:
1. openedge-upgrade-check
2. config-host-update
3. trans-dotdees-fhd-stage
4. qxtend-stage
...
266
QAD Adaptive ERP Configuration and Administration Guide
Non-interactive Execution
There are two Non-interactive Execution Options that YAB provides, (-debug-exit) and (-debug-start). Note, parallel
processing is disabled when using these features.
Debug Exit(-debug-exit)
The request option (-debug-exit) can be useful when it is necessary to exit execution before or after a specific step. The
system can be configured to exit at a given point by specifying a process after (-debug-exit:).
spark-status (2 tasks)
[APPLY]
-------------------------------------------------------------------------
-----
-------------------------------------------------------------------------
-----
By default, the program will exit prior to execution of the configured (-debug-exit) option. To alter this behavior, use the (-
after) option to instruct the application to exit after execution of the selected process.
spark-status (2 tasks)
[APPLY]
-------------------------------------------------------------------------
-----
1/2 spark-master-masterdefault-status STARTED
(0.071 s)
-------------------------------------------------------------------------
-----
Debug Start(-debug-start)
The request option (-debug-start) can be useful when it is necessary to start execution before or after a specific step; any
/all preceding steps are skipped. The system can be configured to start at a given point by specifying a process after (-
debug-exit:).
267
QAD Adaptive ERP Configuration and Administration Guide
spark-status (2 tasks)
[APPLY]
-------------------------------------------------------------------------
-----
1/2 spark-master-masterdefault-status SKIPPED
(0.003 s)
2/2 spark-slave-slavedefault-worker1-status STARTED
(0.047 s)
-------------------------------------------------------------------------
-----
By default, the program will start execution at the step specified in the (-debug-start) option. To alter this behavior, use the
(-after) option to instruct the application to start after execution of the selected process.
spark-status (2 tasks)
[APPLY]
-------------------------------------------------------------------------
-----
1/2 spark-master-masterdefault-status SKIPPED
(0.004 s)
2/2 spark-slave-slavedefault-worker1-status STARTED
(0.065 s)
-------------------------------------------------------------------------
-----
Use the system-process-list command to list the "steps" associated with a command:
1. openedge-upgrade-check
2. config-host-update
3. trans-dotdees-fhd-stage
4. qxtend-stage
...
268
QAD Adaptive ERP Configuration and Administration Guide
Appendix
Parallel Execution
Command Expressions
Selecting Files
Extensions
Rebuild
Managing Progress Data
Creating Tomcat Security Patches
269
QAD Adaptive ERP Configuration and Administration Guide
Parallel Execution
YAB commands can be executed in serial or in parallel. When commands are executed serially, they are executed one at
a time, and when they are executed in parallel, more than one command may be executed at a time. By default all
commands are configured for serial execution.
Commands are executed in an order that satisfies all ordering constraints, whether executed serially or in parallel. For
example, the start command is executed in parallel, a database may be started without waiting for other databases to be
started, but no application server will be started until all databases are started, because of a constraint that ensures that
application servers are always started after database servers.
Only the start and stop commands are certified for parallel execution.
Configuration
Configuring a command to execute in parallel is a two step process:
process.NAME.id=NAME
process.NAME.parallel=true
process.start.id=start
process.start.parallel=true
process.stop.id=stop
process.stop.parallel=true
Configuring a command to execute in parallel also configures the sub-commands to execute in parallel when executed
through the parent command. For example, the command start includes the command database-start. If start were
configured to execute in parallel, executing start (yab start) would also execute database-start in parallel. If database-start
was executed directly (yab database-start) it would be processed serially.
A command configured for parallel execution can be included within a set of commands configured for serial execution. If s
tart were configured to execute in parallel, when start was executed by executing update, the commands associated with st
art would be executed in parallel and the commands preceding and following the start would be executed serially.
threads=4
The setting threads.max is a safety measure to prevent threads from being inadvertently set to an inappropriate value. It
limits the maximum value accepted for the threads setting and has a default value of 10. This can be increased as needed.
Console Output
270
QAD Adaptive ERP Configuration and Administration Guide
When commands are executed in parallel the start and completion of the process are captured on two separate output
lines as demonstrated in the following example.
Logging
The messages in the log file identify the thread that produced the message:
build/logs/yab.log
271
QAD Adaptive ERP Configuration and Administration Guide
Command Expressions
A command expression is a statement that operates on commands as sets.
Syntax
<expr> ::= ["("] <command>|<expr> <operator> <command>|<expr>... [")"]
<operator> ::= "|", "&", "~", "^"
<shallow modifier> ::= "!"<command>
Operators
Operator Visual
"|" - Union
"&" - Intersection
272
QAD Adaptive ERP Configuration and Administration Guide
By default references to commands are "deep" in that they describe the set formed by the command and its (transitive)
implied commands. The shallow modifier changes this to be a reference to the command alone.
Practical Examples
Troublesome Command
Consider a situation in which the environment cannot be cleanly shutdown because the step to stop the admin database
raises errors. Everything in the environment can be shutdown while excluding the step to shutdown the admin database
with the following request, which demonstrates how command expressions can be used in place of commands when
submitting requests.
yab "stop~database-qadadm-stop"
For completeness, another approach to this problem, that attempts to stop the admin database but ignores failures is the
following:
Alias
A command can be defined that is an alias of another command.
process.compile.id=compile
process.compile.expression=code-mfg-update
273
QAD Adaptive ERP Configuration and Administration Guide
Selecting Files
Many configuration types use a similar idiom for selecting files defined in terms of a base directory and include and/or
exclude patterns to select files from the base directory. For example, the copy configuration type is used to configure a
file copy. The source defines the base directory which contains the files to copy and the includes and excludes
patterns are used to define the files to copy. The pattern matching algorithm is loosely based on the FileSet patterns in the
Apache ANT framework, with support for the following wildcard characters:
Wildcard Description
copy.test.includes=**/*
copy.test.includes=foo/*,bar/*
copy.test.includes=foo.css,bar.html
copy.test.includes=**/*.xml
copy.test.excludes=**/*-mapping.xml
274
QAD Adaptive ERP Configuration and Administration Guide
Extensions
An extension is a named directory that is registered with the environment.
An extension is like a package in that both identify directories containing resources for the environment. However, a
package is a versioned, readonly resource that is comparable across systems and time, whereas an extension is an
unversioned resource that may change over time.
Add Extension
Extensions may be either explicitly configured or discovered.
build/config/configuration.properties
extension.test.name=test
extension.test.dir=${appdir}/test
Ex. Discovered
Sub-directories in the extensions.dir will be processed as extensions when YAB is refreshed (-r), using the sub-
directory name to name the extension.
Discovered extensions can bypass the default extension configuration by defining a file named extension.
properties that defines the desired configuration.
[EXTENSION DIR]/yab/config/extension.properties
extensions/test/yab/config/extension.properties
extension.testa.name=testa
extension.testa.dir=a
extension.testb.name=testb
extension.testb.dir=b
If the extension.properties file does not define the location of an extension ("dir" setting), the directory will
default to the discovered extension directory (e.g. extensions/test). If an extension is defined with a relative "dir" setting, the
location is resolved relative to the discovered extension directory (e.g. a = extensions/test/a).
List Extensions
Extensions are listed by the info command (below packages).
275
QAD Adaptive ERP Configuration and Administration Guide
testa extensions/test/a
testb extensions/test/b
Remove Extension
An extension that is explicitly configured is removed by removing the configuration. Otherwise a discovered extension can
be removed by removing the extension directory (or moving it outside of the extensions.dir) and then refreshing
YAB.
Extension Configuration
An extension can distribute configuration settings that will be integrated into the environment. The following table
describes the expected location for configuration files of default and important priority and where they are integrated into
the system.
The configuration settings contributed by (or on behalf of extensions) have the following precedence in the overall
configuration processing (high to low):
build/config/configuration.properties
build/config/system/*
build/config/extensions/.../important/*
build/config/packages/.../important/*
build/config/extensions/.../default/*
build/config/packages/.../default/*
Discovering Content
By default all extensions are scanned for content to integrate into the environment. The discovery process can be disabled
by distributing a file named content-info.properties in the extension's root directory with the following setting:
content-info.properties
scan.enabled=false
276
QAD Adaptive ERP Configuration and Administration Guide
Rebuild
Rebuild resets a component to its factory default state.
Rebuilding components can result in a loss of data. Rebuilding a database, for example, will restore the database to its
original condition and will delete any transaction data entered. Rebuilding a web application, will remove files created in the
application.
Database
Adminserver
Nameserver
Appserver
AIA
Code
Tomcat
Web application
Webspeed Server
Webservices Adapter
A rebuild should be followed by an update to apply necessary changes to the rebuilt component.
277
QAD Adaptive ERP Configuration and Administration Guide
XML Format
YAB provides a comprehensive suite of commands to manage data in XML format. It also provides limited support for
loading data in the Progress native text (.d) and binary (.bd) format. XML is the recommended format for distributing data
in YAB environments, with the exception of very large datasets.
Implementation
XML data files are created by calling the "WRITE-XML" method on a Progress ProDataSet.
https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/dvref/write-xml(-)-method.html
formatted true When a ProDataSet includes data from joined tables, child records are nested within their
parent in the XML document structure.
write- true The XML schema that provides information for interpreting the document is included within
xmlschema the document.
omit-initial- true The XML document has a compact notation where fields whose value is equivalent to the
values configured default (initial) value of the field are not included in the document.
Some products distribute XML data files that were originally created in non-YAB environments using the same ProDataSet
WRITE-XML technique but with different options. These "legacy" files are fully supported by YAB.
Menu Example
This is a typical XML data file describing a single menu:
278
QAD Adaptive ERP Configuration and Administration Guide
279
QAD Adaptive ERP Configuration and Administration Guide
prodata:relationFields="mnd_nbr,mnt_nbr,mnd_select,mnt_select"/>
</xsd:appinfo>
</xsd:annotation>
</xsd:schema>
<mnd_det>
<mnd_nbr>0</mnd_nbr>
<mnd_select>1</mnd_select>
<mnd_label>Items/Sites</mnd_label>
<mnd_exec>1</mnd_exec>
<mnd_fkey>12</mnd_fkey>
<mnt_det>
<mnt_nbr>0</mnt_nbr>
<mnt_select>1</mnt_select>
<mnt_lang>ch</mnt_lang>
<mnt_label>/</mnt_label>
</mnt_det>
<mnt_det>
<mnt_nbr>0</mnt_nbr>
<mnt_select>1</mnt_select>
<mnt_lang>cs</mnt_lang>
<mnt_label>Productos/Plantas</mnt_label>
</mnt_det>
...
</mnd_det>
</xmlroot>
** The (-rec) option was used to select a single menu. There is more information on the (-rec) option in the "Data File
Commands" section.
All XML data files produced by YAB have the following general structure:
280
QAD Adaptive ERP Configuration and Administration Guide
<XML Declaration>
<xmlroot>
<xsd:schema>
...
</xsd:schema>
<parent table record>
<field>value</field>
<field>value</field>
...
<child table record>
<field>value</field>
<field>value</field>
...
</child table record>
</parent table record>
<parent table record>
<field>value</field>
<field>value</field>
...
<child table record>
<field>value</field>
<field>value</field>
...
</child table record>
</parent table record>
...
</xmlroot>
Entities
An entity is a name (e.g. "menus") associated with a document that describes how to export the entity data.
281
QAD Adaptive ERP Configuration and Administration Guide
<Entity>
<Dataset>
<DatasetName>menus</DatasetName>
<InlineSchema>true</InlineSchema>
<Databases>qaddb</Databases>
<Table>
<TableName>mnd_det</TableName>
<ExcludeField>oid_mnd_det</ExcludeField>
</Table>
<Table>
<TableName>mnt_det</TableName>
<ExcludeField>oid_mnt_det</ExcludeField>
</Table>
<Relation>
<ParentTable>mnd_det</ParentTable>
<ParentField>mnd_nbr</ParentField>
<ParentField>mnd_select</ParentField>
<ChildTable>mnt_det</ChildTable>
<ChildField>mnt_nbr</ChildField>
<ChildField>mnt_select</ChildField>
</Relation>
</Dataset>
</Entity>
The document serves as a "base" definition for the entity but commands may dynamically alter the definition. For example,
the "data-xml-dump" command adds to the entity where clause when the option (-rec:0:1) is defined, to filter the data.
Entity definitions should usually only reference tables from a single database. Data is installed with a single database
connected (see "Installing Data"). The predefined extended browse entity (browses-ex) that references tables in the
"qaddb" and "qadadm" databases is used only for analysis and not as a means to distribute and install browse data.
Configured Entities
The system comes preconfigured with entities to support the management of system data. The "dev-data-entity-list"
command lists these entities, their primary index, and the tables they reference.
[MULTIPLE]
Entity Primary
Index
Tables
------
-------------
------
browses-ex n
/a
brw_mstr, brwt_det, brwf_det, vue_mstr, vuf_det, vwj_det, proc_det,
prol_det, pgmi_mstr, flh_mstr, drl_mstr, url_mstr,
[QADADM]
Entity Primary
Index
Tables
282
QAD Adaptive ERP Configuration and Administration Guide
------
-------------
------
browses
brw_name
brw_mstr, brwt_det, brwf_det, proc_det, prol_det
drilldowns drl_field, drl_call_pgm,
drl_exec drl_mstr
label-details lbld_fieldname,
lbld_execname
lbld_det
labels lbl_lang,
lbl_term
lbl_mstr
menu-substitutions
mnds_exec
mnds_det
program-information
pgmi_exec
pgmi_mstr
query-views
vue_name
vue_mstr, vwj_det, vuf_det
transformation-functions
edtrf_name
edtrf_mstr
[QADDB]
Entity Primary
Index
Tables
------
-------------
------
accounts actf_tblname, actf_exec,
actf_acct_fldname actf_mstr
categories ctg_category,
ctg_value
ctg_mstr
field-attributes fldattr_fldname, fldattr_progname,
fldattr_attrname fldattr_mstr
field-help flh_field,
flh_call_pgm
flh_mstr
generalized-codes code_domain, code_fldname,
code_value code_mstr
languages lngd_dataset, lngd_key1, lngd_key2,
lngd_key3, lngd_key4, lngd_field, lngd_lang lngd_det
licenses
lpm_product
lpm_mstr, lpmd_det
master-comments cd_domain, cd_ref, cd_type, cd_lang,
cd_seq cd_det
menus mnd_nbr,
mnd_select
mnd_det, mnt_det
messages msg_nbr,
msg_lang
283
QAD Adaptive ERP Configuration and Administration Guide
msg_mstr
service-support-crossrefs cref_domain, cref_ref_type, cref_item1,
cref_item2 cref_mstr
service-support-programs mnp_domain, mnp_program, mnp_userid,
mnp_sequence, mnp_prog_type mnp_det
service-support-timezones tzo_label,
tzo_area
tzo_mstr, tzod_det
urls url_field, url_field_value, url_call_pgm,
url_exec, url_addr, url_script, url_type url_mstr
warehousing-algorithms Domain, AlgoType,
AlgoNbr AlgoM
You can define your own entities and use them directly:
In fact, if you simply want to export data from a single table, you do not even need an entity definition (but you do have to
specify the -database option):
There are a few reasons that it may make sense to define and configure your own entities:
To avoid locating the entity definition file or specifying the (-database) option each time data is exported.
To include the data in snapshots (see "Snapshot Commands" below).
Configuring
The factory default configuration locates entity definitions for the standard system data:
Additional entities can be configured through instances of the "dev-data.databases" setting, where the instance name is
the name of the database without the "db" prefix (i.e. "dev-data.databases.custom" for the "db.custom" database) and the
value of the setting is a directory that contains entity definition files.
# @append
dev-data.databases.custom=${appdir}/entities/custom
The predefined entities are a good reference for understanding the entity definition format and the help for the data-
xml-dump command provides additional examples.
284
QAD Adaptive ERP Configuration and Administration Guide
Snapshot Commands
Snapshots are primarily used by developers to capture system data changes entered into the application. The commands
are available in the "dev" namespace:
PROCESSES
The "dev-data-snapshot" command creates a snapshot that captures the state of the configured entities in the database.
The "dev-data-list" command lists all snapshots from newest to oldest.
285
QAD Adaptive ERP Configuration and Administration Guide
dev-data-snapshot (1 task)
[APPLY]
-------------------------------------------------------------------------
-----
1/1 dev-data-snapshot OK (36.704 s)
-------------------------------------------------------------------------
-----
Snapshot: 2020-07-23T14-49-29
------------------------
Location: /dr01/qadapps/systest/build/work/dev-data/2020-07-23T14-49-29
...
2 directories, 23 files
286
QAD Adaptive ERP Configuration and Administration Guide
1 directory, 2 files
A "configured" snapshot is a special snapshot that captures the data that is configured. It is implemented by creating
temporary databases, loading schema and entity data, and then taking the snapshot. As such it is a relatively expensive
operation, but it provides a way to compare the configured data with the installed data.
The "Data File Commands" can be used to analyze individual data files in a snapshot or between snapshots.
Scenarios
In the following example, a new menu is added and the menu is captured, and later the menu is updated and captured
again. The "dev-data-patch" command applies the difference between the snapshots to the data directory. It has two
options (-snapshot1) and (-snapshot2) to identify the snapshots to compare. The patch will describe the changes needed
to transform "snapshot1" into "snapshot2". In this scenario, "snapshot1" should be the snapshot taken before the data
changes and "snapshot2" the snapshot taken after the data changes. With this ordering, an added menu is recorded as an
added menu in the patch. (If the order was reversed it would create a patch to undo the changes where the added menu
is recorded as a deleted menu).
See "Capture Manual Changes" and "Capture Data By Primary Index" for alternative strategies to use when the data you
want to capture is already in the database.
287
QAD Adaptive ERP Configuration and Administration Guide
If you are in a situation where you need to capture changes to system data that have already been applied to the
database and if there is a large number of changes or you are not entirely clear on what has changed, you can leverage a
configured snapshot to try to reverse-engineer the changes. (However, if there are only a few changes and are well
known, the "Capture Data By Primary Index" strategy is more efficient and precise.) The general approach is to take a
configured snapshot and a normal database snapshot and then compare the two snapshots where the configured
snapshot is referenced by "snapshot1" and the database snapshot by "snapshot2". It is important that these snapshots
are taken when there are no pending data changes (configured data that has not been installed yet), because these
pending changes would add noise to the comparison. If you are unsure of the state of the system, running an update will
ensure that all pending changes are processed.
Going to this effort to capture what has already been done may be counterintuitive, but there are several important
benefits:
Customizations of standard system data (i.e. changing a standard menu distributed by QAD) will be retained
through upgrades.
The customizations directory accurately reflects how the environment is different than a baseline system.
Changes can be more accurately promoted from one environment to another.
PROCESSES
The data-xml-load command is provided for troubleshooting and experimentation in lab environments and should
only be used in exceptional circumstances otherwise. Loading data directly into the system goes against the principle that
an environment should be fully described by its configuration. See "Distributing Data" and "Installing Data" for the correct
way to distribute and integrate data into environments.
Scenarios
288
QAD Adaptive ERP Configuration and Administration Guide
[QADDB]
Entity Primary
Index
Tables
------
-------------
------
...
menus mnd_nbr,
mnd_select
mnd_det, mnt_det
...
The primary index values to identify the "Item/Sites" menu (mnd_nbr=0 and mnd_select=1) is "0:1" and the primary index
values to identify the "Addresses" menu (mnd_nbr=0 and mnd_select=2) is "0:2". The asterisk (*) can be used in place of
a value to accept any value for the field. For example, "0:*" selects all menus with (mnd_nbr=0).
You can dump all of the entity data and review the primary index values of the instances you are interested in capturing.
Sometimes it is useful to use the "data-xml-index" command to print the primary index values for all of the instances in the
file, using other commands like "grep" to focus on an area of interest.
Once you have identified the instances to dump, they can be identified with the (-rec) option.
Or to dump more than a handful of instances, use (-recfile) to locate a file containing primary index values one per line.
menu-ids
0:1
0:2
...
289
QAD Adaptive ERP Configuration and Administration Guide
Use the (-type) option to list all user and system tables.
Distributing Data
Distributing data is the process of preparing for the installation of data into other environments. Data files can be
distributed in a package along with other artifacts and installed into environments or distributed as files with instructions for
integration into environments. Packaging data is the preferred approach because it simplifies installation and it provides a
structured way to manage versions of the data.
There are several techniques that can be used to capture data for redistribution. All of these techniques will produce files
with the correct names. It is important to not rename the data files when they will be used for installation into other
environments. The ability to customize entities depends on the proper identification of data and this identification is based
on the names of the data files. For example, renaming a "menus.xml" file as "custom-menus.xml" could result in the wrong
data being processed.
Scenarios
Package
The contents of the package are prepared in a directory. Usually this directory is under revision control as a quality
practice but that is not a requirement. In the following example, you prepare the package in a directory named "content"
and create a package named "example". The files in the "content" directory are included in the package but not the
"content" directory itself.
We will create a YAB configuration file in a well known location in our package to enable content discovery.
example.properties
The standard location for Progress XML format data in a package is in the "data/progress/xml" directory.
mkdir -p content/data/progress/xml
The "Capture New Changes" scenario describes a strategy for capturing data and writing it into this directory, for example
creating "content/data/progress/xml/qaddb/menus.xml" with your captured menu data.
If your data is a customization and should override all standard and patch data, add these additional lines to the example.
properties configuration file to instruct the system to process your data as customizations.
290
QAD Adaptive ERP Configuration and Administration Guide
example.properties
# @append
# @group 2
data._order=data.example-xml-qaddb,data.example-xml-qadadm
When all of the content is in order you can create the package.
This creates the package example-1.0.0.0.zip in the current working directory. This package can be copied to other
environments and installed using the "install" command:
After the product is installed, the info command reports on the version installed in the environment:
Customization Directory
Customized data also can be integrated into a system by copying the data files into the appropriate customization
directory:
customizations/mfg/default/data/[DATABASE]
Replace DATABASE with the name of the appropriate database without the "db" prefix (i.e. "custom" for the "db.custom"
database). You may need to create the directory, if the data is for a database other than "qaddb" or "qadadm". After
copying the data, run the "update" command to process the changes.
Installing Data
When a package is installed or an update is run, XML data files are processed during the following steps, where
INSTANCE is the name of a specific database:
database-INSTANCE-data-xml-update
The data process processes all of the XML data files for the database, assigning each file to an entity, by evaluating the
name of the file. This assignment step also supports legacy file names, such as "FLAT_[ADD|MOD|DEL]_mnd_det-
mnt_det.xml", for backward compatibility. All of the data files associated with an entity are consolidated into a single data
file. Alternate versions of the data are reconciled in this consolidation phase. For example, a customized menu is added to
the consolidated data file in preference to the standard menu it overrides. The consolidated data file is compared with the
consolidated data file from the last successful evaluation to produce delta files that describe the records that should be
added into the system and the records that should be removed. Complex entities like browses that consist of many
records are processed with a truncate-load approach, where for example, if any record in a browse changes, all records
related to that browse are deleted from the database, and then the browse is reloaded. Records that were previously
configured but no longer are, are deleted from the system, or if they overrode records, the records they overrode are
reinstated. So for example, if the file "customizations/mfg/default/data/qaddb/menus.xml" is deleted and "database-qaddb-
data-xml-update" is run, menus are deleted or reinstated as appropriate.
Scenarios
291
QAD Adaptive ERP Configuration and Administration Guide
Troubleshooting
When trace logging is enabled (-log-level:trace) the data process logs the underlying record-level create, update, and
delete activity.
The intermediate files associated with the data process calculations are recorded in the following directory:
build/work/system/processes/database-INSTANCE-data-xml-update/state.storage
/default
Finding Data
All installed data is configured by instances of the "data" configuration type.
The "find" command is a useful tool for searching across all data files. For example, the following command would print
the names of all XML or .d data files that contained the text "ab001" and could be used to search for the origin of the
"ab001" browse.
292
QAD Adaptive ERP Configuration and Administration Guide
wget https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.109/bin/apache-
tomcat-7.0.109.tar.gz
> ll tomcat-7.0.109.0.zip
-rw-rw-r--. 1 mfg mfg 10695778 Sep 22 06:30 tomcat-7.0.109.0.zip
Install package
293