/**
* @class Valence_RPG_Toolkit
* @singleton
* Valence RPG Toolkit
*
* Using the Valence RPG toolkit procedures in your programs requires a minimal amount of proficiency in the ILE RPG concept of binding modules together to create a program object. Simply put, by binding the Valence service program (VVSRVPGM) to your RPG applications you can directly interact with the Valence app running in the browser or mobile front-end. This process is made relatively simple by following the examples and templates provided with Valence.
*
* First, your RPG program must include a series of D-specs defining the global variables and subprocedure prototypes that are used to invoke Valence procedures. To make this easy, all the D-specs are accommodated by including the VVDSPECS copy source at the appropriate point in your program.
*
* With the required D-specs included in your program, the other thing you'll need to do is bind the VVSRVPGM service program to your compiled object. Though you can explicitly specify one or more bound service programs as part of your compile command, the best way to bind modules or service programs to your program is to use a binding directory encoded on an H-spec so you don't have to worry about supplementing your compiles with special parameters each time. If you're already using binding directories in your programs, all you need to do is add the VVBNDDIR binding directory (which specifies VVSRVPGM) to your list of binding directories when compiling. For those that are new to using binding directories, here's a quick tutorial:
*
* - A binding directory is simply a list of modules and/or service programs that are bound to your program when you compile it
* - You can specify binding directories as part of your compile command:<br>
* <b>CRTBNDRPG PGM(VALENCE50/MY_PROGRAM) SRCFILE(VALENCE50/QRPGLESRC) BNDDIR(VVBNDDIR)</b>
* - Alternatively, you can just put one or more binding directories in your H specs at the top of your program. This method is generally preferable because it's automatically handled by the compiler without you having to explicitly state your binding directories on every compile command.
* - If you're not already using a binding directory in your program, just specify the single Valence directory:<br>
* <b>H BNDDIR(VVSRVPGM)</b>
* - If you're already using binding directories, you can specify multiple directories by separating each one with a colon:<br>
* <b>H BNDDIR(VVSRVPGM:YOURBNDDIR)</b>
*
* While we're on the topic of H specs, we would recommend you habitually include <b>OPTION(\*SRCSTMT:\*NODEBUGIO)</b> on each RPG program you create, as this will make your life easier during the debugging process. \*SRCSTMT will ensure the program line numbers that show up in compiles and error messages match up with your source line numbers; \*NODEBUGIO will allow you to step through your RPG programs in the interactive debugger without having to step through every field I/O whenever a READ or CHAIN is encountered.
*
* Note that the use of bound procedures in your back-end programs will require that you use something other than the default activation group when you compile, otherwise you'll get a RNF9302 error ("Parameter BNDDIR not allowed with DFTACTGRP(\*YES)") from the compiler. Therefore you should specify <b>DFTACTGRP(*NO)</b> along with your binding directories in your H-specs. You could also specify a specific named activation group (i.e., by adding <b>ACTGRP('MYACTGRP')</b> to your H-spec directives)
*/