Date: 10-28-2016 Subject: RELEASE 9.9 Runtime Files These release notes pertain to the following programs or files: EMBEDINI 9.9 28 Oct 2016 9,9,0,500 EMBEDINI64 9.9 28 Oct 2016 9,9,0,500 HEXDUMP 9.9 28 Oct 2016 9,9,0,500 HEXDUMP64 9.9 28 Oct 2016 9,9,0,500 MAKECLI 9.9 28 Oct 2016 9,9,0,500 MAKECON 9.9 28 Oct 2016 9,9,0,500 MAKECONET 9.9 28 Oct 2016 9,9,0,500 MAKEDEF 9.9 28 Oct 2016 9,9,0,500 MAKEMFD 9.9 28 Oct 2016 9,9,0,500 MANAGECE 9.9 28 Oct 2016 9,9,0,500 OBJMATCH 9.9 28 Oct 2016 9,9,0,500 OBJMATCH64 9.9 28 Oct 2016 9,9,0,500 ODBCINST64 9.9 28 Oct 2016 9,9,0,500 PLBCGI 9.9 28 Oct 2016 9,9,0,500 PLBCLICON 9.9 28 Oct 2016 9,9,0,500 (ComCtl 6) PLBCLIENT 9.9 28 Oct 2016 9,9,0,500 (ComCtl 6) PLBCLINET 9.9 28 Oct 2016 9,9,0,500 (ComCtl 6) PLBCON 9.9 28 Oct 2016 9,9,0,500 (ComCtl 6) PLBCONET 9.9 28 Oct 2016 9,9,0,500 (ComCtl 6) PLBDSIGN 9.9 28 Oct 2016 9,9,0,500 PLBNET 9.9 28 Oct 2016 9,9,0,500 (ComCtl 6) PLBSERVE 9.9 28 Oct 2016 9,9,0,500 (Processed Server) PLBSERVET 9.9 28 Oct 2016 9,9,0,500 (Threaded Server) PLBWEBSRV 9.9 28 Oct 2016 9,9,0,500 (Processed Server) PLBWEBSRVT 9.9 28 Oct 2016 9,9,0,500 (Threaded Server) PLBWIN 9.9 28 Oct 2016 9,9,0,500 (ComCtl 6) SUNAAMDX 9.9 28 Oct 2016 9,9,0,500 SUNAAMDX64 9.9 28 Oct 2016 9,9,0,500 SETGUID 9.9 28 Oct 2016 9,9,0,500 SUNINDEX 9.9 28 Oct 2016 9,9,0,500 SUNINDEX64 9.9 28 Oct 2016 9,9,0,500 SUNLS 9.9 28 Oct 2016 9,9,0,500 SUNMOD 9.9 28 Oct 2016 9,9,0,500 SUNMOD64 9.9 28 Oct 2016 9,9,0,500 SUNSORT 9.9 28 Oct 2016 9,9,0,500 SUNSORT64 9.9 28 Oct 2016 9,9,0,500 WININST 9.9 28 Oct 2016 9,9,0,500 PLBCLICON5 9.9 28 Oct 2016 9,9,0,500 (ComCtl 5) PLBCLIENT5 9.9 28 Oct 2016 9,9,0,500 (ComCtl 5) PLBCLINET5 9.9 28 Oct 2016 9,9,0,500 (ComCtl 5) PLBCON5 9.9 28 Oct 2016 9,9,0,500 (ComCtl 5) PLBCONET5 9.9 28 Oct 2016 9,9,0,500 (ComCtl 5) PLBNET5 9.9 28 Oct 2016 9,9,0,500 (ComCtl 5) PLBWIN5 9.9 28 Oct 2016 9,9,0,500 (ComCtl 5) PLBNETSUP.DLL 9.9 28 Oct 2016 9,9,0,500 Required for PLBNET PLBWSEC.DLL 9.9 28 Oct 2016 9,9,0,500 Req'd PLBWIN/PLBNET ODSBAC32.DLL 9.9 28 Oct 2016 ODSBAC64.DLL 9.9 28 Oct 2016 SA_DLL32.DLL 9.9 28 Oct 2016 9,9,0,500 SUNWADO.DLL 9.9 28 Oct 2016 9,9,0,500 SUNWADO25.DLL 9.9 28 Oct 2016 9,9,0,500 SUNWADO28.DLL 9.9 28 Oct 2016 9,9,0,500 SUNWMSQL.DLL 9.9 28 Oct 2016 9,9,0,500 SUNWODBC.DLL 9.9 28 Oct 2016 9,9,0,500 SUNWSRV.DLL 9.9 28 Oct 2016 9,9,0,500 DBGIFACE 9.9 28 Oct 2016 PLBCMP 9.9 28 Oct 2016 PLBDBUG 9.9 28 Oct 2016 ADMEQU.INC 9.9 28 Oct 2016 PLBEQU.INC 9.9 28 Oct 2016 PLBMETH.INC 9.9 28 Oct 2016 PLBCLI.ZIP 9.9 28 Oct 2016 9,9,0,600 (ComCtl 6) PLBRUN.ZIP 9.9 28 Oct 2016 9,9,0,600 (ComCtl 6) *============================================================================== Notes for some NEW Items: - Support for Sunbelt PL/B Web Client Apps has been added to the PL/B Web Server. The Sunbelt PL/B Web Client Apps can be downloaded, configured, and executed on Android devices , iOS devices, and Windows 8\newer OS systems to access a PL/B Web Server to run PLB programs. The PL/B Web Client Apps are named 'Plbwebcli' for all supported OS types. The first Sunbelt Plbwebcli released is for Android mobile devices. The Androoid 'Plbwebcli' App is available via the Google 'Play Store' on your Android devices. Note: 1. The 'Plbwebcli' for the iOS and Windows OS systems will be released when the testing and distribution changes are setup for general public access. - Added support a PWS TREEVIEW object. - The PL/B Web Server has been modified to put the infastructure in place so the Web Rest API services can be implemented in patch release 9.9A. *============================================================================== Notes for DOCUMENTATION: - In the PL/B Web Server reference manual under the Server keywords, change the 'PLBWEB_SUSPEND_MAX_TIMEOUT Keyword' section so the expected format reads as follows: "PLBWEB_SUSPEND_MAX_TIMEOUT={minutes}" - In the PL/B Language Reference manual in section 'SetItem Method (TREEVIEW)', delete the Note (2.). - In the PL/B Language Reference manual in section 'GetItemSelImage Method (TREEVIEW)', change the {return} description to read as follows: return Optional. A Numeric Variable that returns the image index. - In the PL/B Language Reference manual in section 'ALTTEXT Property', change the Note (1.) to read as follows: "ALTTEXT may be used in CREATE, GETPROP, or SETPROP statements for ICON or PICT objects." - In the PL/B Language Reference manual in section 'URLSOURCE Property', make the changes as follows: Change Note (1.) to read as follows: "URLSOURCE may be used in CREATE, GETPROP, or SETPROP statements for ICON, PICT, or IMAGELIST objects." Add the Note (6.) as follows: "6. The format of the URLSOURCE {value} string should be a valid URL format as described by 'RFC 1738 Uniform Resource Locator'. Otherwise, unexpected results can occur because of different client browser processing of a poorly formatted URL." Change the following example instruction: From: CREATE P=5:10:5:15,"",URLSOURCE="images\sunbelt.png" To: CREATE P=5:10:5:15,"",URLSOURCE="images/sunbelt.png" - In the PL/B Language Reference manual in section 'SORTED Property', change the Note (1.) to read as follows: "SORTED may be used in CREATE or GETPROP statements for the DATALIST object. For the COMBOBOX object, the SORTED property can be used in CREATE, GETPROP, or SETPROP statements." - In the PL/B Language Reference manual in the section 'IMAGELIST', change the Note (10.) to read as follows: Support for an IMAGELIST was added to the PL/B Web Server in version 9.9. This PWS IMAGELIST is ONLY used to identify a single image which can be sent to the client browser in support of the PWS TREEVIEW object. The PWS IMAGELIST is implemented as a virtual object that is created and maintained on the PWS server side. The PWS IMAGELIST implementation details are described as follows: Properties ( Supported ) IMAGESIZEH The support for this property was added in 9.9 to be used for the PWS runtime objects. Use of this property for the PLBWIN\PLBNET Windows runtimes causes indeterminate results and should be avoided. IMAGESIZEV The support for this property was added in 9.9 to be used for the PWS runtime objects. Use of this property for the PLBWIN\PLBNET Windows runtimes causes indeterminate results and should be avoided. OBJECTID RUNNAME URLSOURCE ( PWS only! ) This property is supported ONLY for the PWS runtimes. This property has not affect or impact on the PLBWIN\PLBNET Windows runtimes. USERDATA Properties ( Not Supported ) Any settings for unsupported properties are processed and maintained by the PWS IMAGELIST. However, these settings are ignored and do not affect the image being used by a PWS object. BGCOLOR IMAGECOLORS MASKCOLOR RESOURCE USECOLORMASK USEMASK Events The following event is supported for the PWS IMAGELIST. Change Methods ( Supported ) LoadStdToolBitMap This method sets the URLSOURCE property of the IMAGELIST to the 'plbtools.bmp' image name. The 'plbtools.bmp' MUST exist in the 'c:\sunbelt\plbwebsrv.9xx\http_root' directory where '9xx' represents the PWS version being used. Methods ( NOT supported ) AddBmp AddBmpMasked AddIcon AddLoadIcon AddLoadImage GetImageCount Remove RemoveAll ReplaceBmp ReplaceIcon WriteBmpFile PWS IMAGELIST operational behaviors a. The PWS IMAGELIST does not simulate the Windows IMAGELIST control. The Windows IMAGELIST control does not provide operation capilities that are compatible with expected client browser image usage. b. The PWS IMAGELIST support allows an image to be identified the URLSOURCE which can be downloaded by a client browser. Once the image is loaded to the client browser, the PWS JavaScript utilizes techniques to slice the image which can be referenced by image index for PWS objects using the PWS IMAGELIST. c. Images identified by the PWS IMAGELIST are expected to be a horizontal combination of image segments combined based on the current IMAGESIZEH and IMAGESIZEV values. The format of the PWS IMAGELIST image is the same as exported by the PL/B Designer. The IMAGELIST image index is a value starting with zero representing the image segment at the left-most position in the image. d. When an embedded PWS IMAGELIST resource is being used by a PWS object in a PWF form, the embedded resource is dynamically generated as a BMP image named with the following format: "I{guid}{resnum}.bmp" where: {guid} - Is the unique GUID identifier assigned to any PLF or PWF when being saved. {resnum} - The PLF\PWF resource number assigned to the imagelist internal resource by the PL/B Designer. This internal resource number is NOT available to the end-user. The "I{guid}{res}.bmp" image can be downloaded by a client browser as required by a PWS object using the IMAGELIST resource. It should also be noted that ONLY one instance of the 'I{guid}.bmp' is created which can be reused by any PLB PWS object of the PWF form using the IMAGELIST resource. The "I{guid}{res}.bmp" images are never deleted by the PWS runtimes. The end-user can remove any or all of these resource working images at any time without causing any application problems. e. The behaviors of the PWS IMAGELIST using the URLSOURCE property versus the internal image resource usage for a PWS IMAGELIST CAN NOT be changed and\or invoked using the SETPROP instruction. These behaviors are determined and used when the PWS IMAGELIST is initially created. Use of the SETPROP to change the PWS IMAGELIST URLSOURCE can result in the indeterminate presentation of PWS objects using the IMAGELIST. - In the PL/B Language Reference manual in the section 'IMAGESIZEH Property', change the Note (1.) to read as follows: "1. IMAGESIZEH may be used in CREATE or GETPROP statements of an IMAGELIST object. In addition, the SETPROP statement can be used to change this property for a PL/B Web Server (PWS) IMAGELIST. Warning: Executing the SETPROP of the IMAGESIZEH property using any Windows OS runtime\client like PLBWIN\PLBNET\PLBCLIENT\... causes indeterminate behaviors and should be avoided." - In the PL/B Language Reference manual in the section 'IMAGESIZEV Property', change the Note (1.) to read as follows: "1. IMAGESIZEV may be used in CREATE or GETPROP statements of an IMAGELIST object. In addition, the SETPROP statement can be used to change this property for a PL/B Web Server (PWS) IMAGELIST. Warning: Executing the SETPROP of the IMAGESIZEV property using any Windows OS runtime\client like PLBWIN\PLBNET\PLBCLIENT\... causes indeterminate behaviors and should be avoided." - In the PL/B Web Server manual in section 'PLBWEB_IMAGES Keyword', change the description paragraph to read as follows: This optional keyword controls the checking and extraction of resource '.jpg' and '.ico' images referenced by the RESOURCE property for a PICT or ICON object. In addition, this keyword specifies the working directory used to store working images that can be dynamically generated when a PWS IMAGELIST is being used. The {directory} specifies the directory beneath the PWS 'http_root' directory that contains the images. If this keyword is not used, the default PWS directory used is named 'images' under the PWS 'http_root' directory." - In the PL/B Language Reference manual in the section 'TREEVIEW', add a Note (11.) that reads as follows: 11. Support for the PWS TREEVIEW object is added in release 9.9. The PWS TREEVIEW is limited to a total of 1000 nodes as currently implemented. To optimize the TREEVIEW operations for the PL/B Web Server, the TREEVIEW data is maintained on the server side as virtual data. The TREEVIEW data is rendered to the client browser as needed to give the best possible performance. While the PWS TREEVIEW object is implemented to simulate the PLB Windows TREEVIEW object behaviors, it should be noted that there are differences for appearances and events that cannot be simulated. Properties ( Supported ) ANCHOR APPEARANCE BORDER BUTTONS The BUTTONS property visual presentation is controlled by the '.treevp' and '.treevm' CSS classes found in the 'plbwebbasic.css' style class definitions. CAUSEVALID CHECKBOX DOCK ENABLED FONT IMAGELIST LEFT OBJECTID RUNNAME TABID TOOLTIP TOP TREELNSTYLE USERDATA VISIBLE WIDTH ZORDER Properties ( Not Supported ) Any settings for unsupported properties are processed and maintained by the PWS virtual TREEVIEW. However, there settings are ignored and do not affect the operations of the PWS TREEVIEW. AUTOREDRAW DROPID FLOATMENU FULLROW HELPFILE HELPID HELPTOPIC HIDESEL HOTTRACK HWND IDENT THEME TOOLTIPHWND Events ( Supported ) The events for the PWS TREEVIEW are generated and rendered by the PWS client browser JavaScript operations. The following events are supported by the PWS TREEVIEW. Change Click DoubleClick ( not when using mobile device ) GotFocus LostFocus Validate Events ( Not Supported ) DragDrop DragOver KeyPress MouseDown MouseMove MouseUp Methods ( Supported ) DeleteAll DeleteItem EnsureVisible Expand The CODE parameter TVE_COLLAPSERESET is not supported. GetCount GetItemCheck GetItemImage GetItemParam GetItemSelImage GetItemState GetItemText GetNextItem GetVisibleCount Different from the Windows Control. See behavior note (b.) below. GetWebId GetWebStyle GetXmlDataSize InsertItem The string can be specified as simple text or a well formed HTML data string. LoadXmlFile SaveXmlFile SaveXmlToDim SelectItem SetImageList SetItem The string can be specified as simple text or a well formed HTML data string. SetItemCheck SetItemState SetWebStyle SortChildren Methods ( Not Supported ) GetLastDropXY ItemHitTest PWS TREEVIEW operational behaviors a. A single end-user click action on a PWS TREEVIEW parent node causes the expand or collapse action of the children nodes. A double click action is ONLY possible when using a client browser that does not exist on a mobile device. b. The PWS TREEVIEW GetVisibleCount returns the total number of nodes that are available to become visible in the TREEVIEW view. The PWS TREEVIEW GetVisibleCount can be greater than the number of current nodes showing in the TREEVIEW view. The value identifies all nodes which are currently expanded and can be scrolled into the PWS TREEVIEW view. The PWS TREEVIEW GetVisibleCount return value is different than the Windows TREEVIEW GetVisibleCount value which is calculated using the TREEVIEW height and the node height. c. The SETPROP CHECKBOX property operation ONLY takes affect for the PWS TREEVIEW. This same operation DOES NOT have a visual affect for the Windows TREEVIEW control. d. The PWS TREEVIEW object utilizes the '.treevp' and '.treevm' classes as described in the 'plbwebbasic.css' file. These classes allow end-users to control the visual presentation of the TREEVIEW background being applied for an item's button when the 'BUTTONS' property is turned on. The 'background-position' css style in the '.treevp' and '.treevm' classes can be changed to a setting as shown in the 'plbwebcss.info' file that is located in the 'http_root' directory. The descriptions as shown in the 'plbwebcss.info' file correspond to the 'jQuery Framework Icon' images shown at the URL 'http://jqueryui.com/themeroller/' link. In addition, a HTML web page named 'plbwebtvcssinfo.html' located and provided in the 'http_root' directory. This web page can be executed\used to show all of the available JQuery ui-con images along with the corresponding 'background-position' settings. - In the PL/B Web Server manual in section 'Considerations', change the Note (10.) as follows: a. Remove IMAGELIST from unsupported PWS Objects lists. b. Remove TREEVIEW from unsupported PWS Objects lists. - In the PL/B Language Reference manual in the 'DBCONNECT' section, change the Note (5.) to include the following bit mask {flags} value: Value Description 4 When using the ODBC driver, the SQL connection is made using a NOPROMPT driver completion mode. The NOPROMPT flag setting is only used when the {host} string is NULL and the {conn} string is being used to make a connection. - In the PL/B Language Reference manual in the 'TRAP' instruction section, change the Note (22.) to read as follows: 27. When executing a PL/B program using a GUI runtime, the keyboard events for the TRAP instruction including CHAR {char], F1-F40, FKEY, ESCAPE, and the special keys are only processed for KEYIN instructions. This means that the keyboard traps are only processed for the runtime main window since it is the only window that supports the KEYIN instructions. Also, the keyboard event TRAPs do not get dispatched unless the runtime main window has the focus to accept the Windows OS key stroke messages - In the PL/B Language Reference manual in the 'CgiString Method (RUNTIME)' section, correct the syntax format: 'CgiStrin' change to 'CgiString' - In the PL/B Language Reference manual in the '*PICT (PRTPAGE)' section, change the control description to include the new syntax format as follows: 1. Change the syntax: (1) *PICT={top}:{bottom}:{left}:{right}:{pic} (2) *PICT={top}:{bottom}:{left}:{right}:{jpgimage} 2. Change the description to read as follows: "This list control creates a rectangle bounded by {top}:{bottom}:{left}:{right} around the graphics image. The image is resized up or down to fit the rectangle. {pic} is a PICT object variable as shown in format (1). The {jpgname} is a Character String Variable or Literal that contains the file name of a JPG image file used in format (2). 3. Add the following 'Note:' descriptions: Note: 1. The {jpgimage} file MUST be a JPG image file in compliance to the guidelines defined in the standard PDF specifications. 2. The {jpgimage} can be a fully qualified name of the physical image file containing the JPG image data. The {jpgimage} physical file MUST exist on the same OS file system where the PLB runtime is executing. 3. This *PICT control syntax using the {jpgname} is supported by all PLB runtimes including Linux\Unix runtimes. 4. Add the following 'Example:': Example: PF PFILE . PRTOPEN PF, "pdf:", "mydoc.pdf" ... PRTPAGE PF; *PICT=1:10:1:10:"prod.jpg" In this case, the "prod.jpg" image must exist in the current working dirctory of the PLB runtime. Otherwise, PLB runtime uses the PLB_PATH to locate the JPG image to be used. ... PRTPAGE PF; *PICT=1:10:1:10:"c:\temp\prod.jpg" - In the PL/B Language Reference manual in the 'Suspend Event' section, add a Note (5.) as follows: Note: 5. This event is only used and generated when using PLB CE runtime. - In the PL/B Language Reference manual, add a new section named 'RunSuspend Event' as follows: The RunSuspend event is generated using a PL/B Web Server runtime. This event is generated when a PWS child task goes into a SUSPEND state. This event is implemented as a fast event. Note the following: 1. This event is ONLY registered for the RUNTIME object using the EVENTREG instruction. 2. This event is implemented as a fast event which is dispatched when a PWS child task goes into a SUSPEND state. 4. The RunSuspend event is referenced using an event value of thirty-four (34). The equated label in PLBEQU.INC for this event is $RUNSUSPEND. $RUNSUSPEND EQU 34 //PWS RUNTIME event! - In the PL/B Language Reference manual, add a new section named 'RunResume Event' as follows: The RunResume event is generated using a PL/B Web Server runtime. This event is generated when a PWS client mobile device re-establishes the communications connection to a PWS suspended child task. Note the following: 1. This event is ONLY registered for the RUNTIME object using the EVENTREG instruction. 2. This event is implemented to occur when the client mobile device re-establishes the communications connection to a suspended child task. 3. This event is NOT implemented as a fast event. However, this event is pushed onto the top of the PLB user stack as the next event to be dispatched. 4. The RunResume event is referenced using an event value of thirty-five (35). The equated label in PLBEQU.INC for this event is $RUNRESUME. $RUNRESUME EQU 35 //PWS RUNTIME event! - In the PL/B Language Reference manual, add a new section named 'RunIdle Event' as follows: The RunIdle event is generated using a PL/B Web Server runtime. This event occurs when the PLBWEB_IDLE_TIMEOUT expires resulting in the event being pushed onto the top of the PLB user stack as the next event to be dispatched and the idle timeout is reset. Therefore, the PLBWEB_IDLE_MAX_TIMEOUT will never occur when this event is register. The PLB end-user program must determine when to terminate the program using a STOP or SHUTDOWN instruction. Note the following: 1. This event is ONLY registered for the RUNTIME object using the EVENTREG instruction. 2. This event is implemented to prevent the PWS runtime default idle action for a child task. The PLB end-user program take responsibility for all actions to determine when a client UI operations are no longer occurring. 3. If a PWS PLB program is in an ALERT, ERROR dialog, or in a MENU popdown, the $RUNIDLE event CAN NOT be generated because the PWS program is in an inactive state waiting for an end-user action. Therefore, $RUNIDLE can detect nor generate an event while a PLB program is in one of these PLB program instructions or state waiting for a UI action. 4. The RunIdle event is referenced using an event value of thirty-six (36). The equated label in PLBEQU.INC for this event is $RUNIDLE. $RUNIDLE EQU 36 //PWS RUNTIME event! - In the PL/B Web Server manual in the 'Server Configuration Keywords' section, add the new PWS keyword described as follows: PLBWEB_MSGCOMPRESS={ON|OFF} This keyword can be used to disable\turn off the PWS server 'Deflate Compression' support. By default, this PWS server supports 'Deflate Compression' as determined by the client Browsers being used. If this keyword is set to 'OFF', the PWS Deflate Compression support is disabled and no cmpression is used when communicating with client browsers. Note: 1. This keyword can be placed in the 'plbwebsrv.ini' [Environment] section. 2. This keyword is implemented to take immediate affect when any new client browser logon actions occurs. Thus, this keyword can take affect without having to restart the PWS server. 3. When the mini-server deflate support is enabled, messages greater than 50 bytes and less than 400K for all browsers and apps are used except for IE. - In the PL/B Runtime Reference manual in the 'S (Spool) Errors' section, add the following spool S31 error descriptions which can be generate by the 'PRTPAGE PF; *PICT' control when processing a JPG image to be embedded into the Sunbelt 'pdf:' {device} output. S31 - An error has occurred processing the PRTPAGE *PICT control to directly embed JPG image data directly into the Sunbelt PDF 'pdf:' file. The following subcodes provide additional information: 101 - Invalid image file name! ( Null name not allowed! ) 102 - Invalid image file name! Length of path and name too long! 103 - Invalid image file name! Blank name not allowed! 104 - Unable open image file name! 105 - Invalid *PICT Image file size! 106 - Unable to read all of the *PICT Image data! 107 - Unable to allocate memory for image buffer! 108 - Invalid Image type (Only JPG supported)! 109 - Unable to print JPG image! - In the PL/B Web Server manual under the 'PLBWEB_SSL_KEYFILE Keyword' section, change the Note (3.) as follows: 1. Change the first sentence to read as follows: "To support PL/B development of PWS applications, a self-signed certificate may be generated and used during the development period." 2. Change Note: 3. (A.) Change example From: openssl genrsa -our privkey.pem 2048 To: openssl genrsa -out privkey.pem 2048 3. Add Note: 3. (C.) C. When using a self-signed certificate, the PWS server keyword named 'PLBWEB_SSL_SELFSIGNED=ON' must be specified in the 'plbwebsrv.ini' [Environment] section. Otherwise, the client browser can not make a connection to the PWS server. - In the PL/B Web Server manual under the 'Server Configuration Keywords' section, add the keyword named 'PLBWEB_SSL_SELFSIGNED={on|off}' as follows: PLBWEB_SSL_SELFSIGNED={on|off} Starting in release 9.8B, the default SSL support was implemented to require the TLSv1 interface method which gives the best security level when a client browser is accessing the PWS server. To use a self-signed certificate, the default SSL interface method must be set to a lower security level using the SSLv23 interface method. In this case, the 'PLBWEB_SSL_SELFSIGNED=ON' must be used to allow a self-signed certificate to be used. Note: 1. The 'PLBWEB_SSL_SELFSIGNED=ON' should ONLY be used when a self-signed SSL certificate is being used. This keyword should NOT be used when a self-signed SSL certificate is NOT being used. - In the PL/B Language Reference manual in the 'List Controls (SETMODE)' section, add the following description for the *EDITTEXTMODES keyword: SETMODE *EDITTEXTMODES={dnumnvar} This *EDITTEXTMODES keyword value defines a bit mask value where each bit defines a behavior that can be applied to an EDITTEXT object when it is created. The bit mask values are defined as follows: EDITTEXTMODES (Values) Behavior 0x00000000 - All runtime defaults are used. 0x00000001 - Reserved for internal use. Ignored! 0x00000002 - Force newly created EDITTEXT objects to cause the cue text data to become invisible when the object gains focus. This behavior is the same as expected for runtime versions prior to version 9.9. - In the PL/B Language Reference manual in the 'List Controls (GETMODE)' section, add the following description for the *EDITTEXTMODES keyword: GETMODE *EDITTEXTMODES={nvar} The *EDITEXTMODES keyword returns the current runtime bit mask value used to control specialize EDITTEXT behaviors. The returned bit mask settings are the same as described by the SETMODE *EDITTEXTMODES keyword. - In the PL/B Language Reference manual in the 'GETFILE' instruction section, add the support for the ADMIN variable as follows: Change the 'file' description to read as follows: "A previously defined AFILE, DBFILE, FILE, IFILE, COMFILE, PFILE, FILELIST, or ADMIN variable." Add a new Note (22.) that reads as follows: Note: 22. GETFILE using the ADMIN variable type is ONLY used to determine whether the ADMIN variable is currently opened or not by setting the ZERO flag appropriately. The ADMIN is opened using the ADMLOGON instruction. - In the PL/B Runtime Reference manual in the 'I (I/O) Errors' section, modify the I27 subcodes to include the following: 110 - When a 'TRANSACTION START' transaction is active, the file variable(s) used in the I/O instruction encountering the I27 error must be included in the 'TRANSACTION START' list of file variables. - In the PL/B Language Reference manual in the 'WEBCLASS Property' section, change the following: 1. Change Note (4.) to read as: "This property is not supported for the MENU, SUBMENU, COLOR, FONT, MENU, SUBMENU, or TIMER objects." 2. Change the 'Objects' supported for WEBCLASS as follows: Remove - COLOR Remove - FONT Remove - SUBMENU Add - TREEVIEW Add - WINDOW - In the PL/B Language Reference manual add the 'WEBHEIGHT Property', 'WEBWIDTH Property', 'WEBTOP Property', 'WEBLEFT Property', and 'WEBPOSITION Property' sections as described in the PLBCMP section. - In the PL/B Language Reference manual in the 'GetInfo Method (CLIENT)' section, change the Note (8.) to read as follows: The {options} parameter is a bit-mask value that allows one or more data fields to be retrieved. If the {options} parameter is not specified or it is specified with a value of zero, the 'GetInfo' method returns all of the available data fields with a delimiter character between the fields. If the {options} is specified with a non-zero value, the {options} is a bit-mask value where one or more data fields can be retrieved where the {options} bit-mask values are defined as follows: Bit-Mask Value Returns ... 0x00000000 0 all data fields with a delimiter character between the fields. 0x00000001 1 the field 'availHeight' data. 0x00000002 2 the field 'availWidth' data. 0x00000004 4 the field 'colorDepth' data. 0x00000008 8 the field 'height' data. 0x00000010 16 the field 'pixelDepth' data. 0x00000020 32 the field 'width' data. 0x00000040 64 the field 'appCodeName' data. 0x00000080 128 the field 'appName' data. 0x00000100 256 the field 'appVersion' data. 0x00000200 512 the field 'cookieEnabled' data. 0x00000400 1024 the field 'language' data. 0x00000800 2048 the field 'platform' data. 0x00001000 4096 the field 'product' data. 0x00002000 8192 the field 'userAgent' data. 0x00004000 16384 the field 'PeerIP' data. 0x00008000 32768 the field 'HttpHost' data. See the 'plbmeth.inc' equate values for 'options': . . GetInfo Options Constants: . $INFO_ALL EQU 0 $INFO_AVAIL_HEIGHT EQU 1 $INFO_AVAIL_WIDTH EQU 2 $INFO_COLOR_DEPTH EQU 4 $INFO_HEIGHT EQU 8 $INFO_PIXEL_DEPTH EQU 16 $INFO_WIDTH EQU 32 $INFO_APP_CODE_NAME EQU 64 $INFO_APP_NAME EQU 128 $INFO_APP_VERSION EQU 256 $INFO_COOKIE_ENABLED EQU 512 $INFO_LANGUAGE EQU 1024 $INFO_PLATFORM EQU 2048 $INFO_PRODUCT EQU 4096 $INFO_USER_AGENT EQU 8192 $INFO_PEER_IP EQU 16384 $INFO_HTTP_HOST EQU 32768 - In the PL/B Runtime Reference manual in the 'I (I/O) Errors' section, modify the XML base handler subcodes table for subcode 10 to read as follows: 10 - XML file too large for memory area. If this subcode occurs when 'GETFILE XFILE, XMLDATA={svar}' is executed, the {svar} is too small to receive all of the XFILE XML data. - In the PL/B Language Reference manual in the 'GETFILE ('XFILE') section, change the Note (2.) to read as follows: 2. If the value returned to a string variable is longer than the variable, the EOS flag is set. When using the XMLDATA keyword, an 'I83 subcode 310' error is generated when the XML data is too large to be stored into the string variable without being truncated. - In the PL/B Runtime Reference manual in the 'PLBWIN Runtime Requirements' section, Add the following to the 'SUNWADO.DLL' description: SUNWADO.DLL ( Add this description to the current description. ) Note: In release 9.6, three ADO drivers were generated and named: sunwado.dll - Compatible with 9.5 and earlier versions of driver. sunwado25.dll - Compatible with 9.5A and 9.5B versions of driver. sunwado28.dll - Created using latest ADO interface libraries. The end-user should choose the appropriate 9.6 version of a SUNWADO driver depending on the previous version that was being used. - In the PL/B Language Reference manual under the 'GetDir Method (RUNTIME)' section, add the following items to the Note (3.) {dirtype} values: Note 3. (Add these values) Type Value Returns... 5 The directory specified by the PLBWEB_SAVETOCLIENT keyword. If this keyword is not used, the returned value is the 'savetoclient' relative directory name. 6 The directory specified by the PLBWEB_UPLOADS keyword. If this keyword is not used, the returned value is the 'uploads' directory. - In the PL/B Language Reference manual under the 'GetState Method (CLIENT)' section, add the following {mask} bit value in the Note (5.): Note 5. (Add this {mask} bit value: Mask Value Definition 0x2 This state flag indicates that Corodva/Phonegap Support is used for the client. - In the PL/B Language Reference manual under the 'URLSOURCE Property' section, add the Note (6.) as follows: Note (6.) 6. When the '!' character is used as the leading character in the 'URLSRC' property string value, the Web application files are retrieved\used from the 'local application area' on the mobile device when using the 'plbwebcli' App. A leading '!' character for other client browsers is ignored. *============================================================================== The following files have been changed as noted: ------------------------------------------------------------------------------- PLBWEBSRV (HTML\JS\CSS) - Modified to support 9.9 changes. plbwebbasic.css 9.9 161028 plbwebbasic.js 9.9 161017 plbwebtvcssinfo.html 9.9 161028 - Added support a PWS TREEVIEW object. See the description provided int the 'Notes for DOCUMENTATION:' readme section above. - Modified the PWS TREEVIEW object to utilize the '.treevp' and '.treevm' classes as described in the 'plbwebbasic.css' file. This modification allows end-users to control the visual presentation of the TREEVIEW background being applied for an item's button when the 'BUTTONS' property is turned on. The 'background-position' css style in the '.treevp' and '.treevm' classes can be changed to a setting as shown in the 'plbwebcss.info' file which is located in the 'http_root' directory. The descriptions as shown in the 'plbwebcss.info' file correspond to the 'jQuery Framework Icon' images shown at the URL 'http://jqueryui.com/themeroller/' link. In addition, a HTML web page named 'plbwebtvcssinfo.html' located in the 'http_root' directory can be executed to show all of the available JQuery ui-con images along with the corresponding 'background-position' settings. - Added support for a PWS IMAGELIST object. The PWS IMAGELIST support is implemented to allow a client browser to download and use a URLSOURCE as normally expected. The IMAGELIST object support is being implemented to allow PWS objects like the PWS TREEVIEW to utilize images. At this time the PWS IMAGELIST is ONLY used in support of the PWS TREEVIEW. See the description provided int the 'Notes for DOCUMENTATION:' readme section above. - Corrected a problem where a MODAL form 'LoadEvent' was being repeated an indeterminate number of times when the 'LoadEvent' logic executed a FORMLOAD of an 'object-only' form. ------------------------------------------------------------------------------- PLBWEBSRV - Added support for the Sunbelt Plb Web Client App. The Sunbelt Plb Web App is named 'plbwebcli'. The 9.9 PWS (PL/B Web Server) supports the the Android Sunbelt Plb Web App as a client. The 'plbwebcli' App can not be used to access any PWS server versions older than 9.9. The Android 'plbwebcli' App can be downloaded using the Google 'Play Store' on your Android mobile device. Note: 1. The Android 'plbwebcli' App has been implemented to execute on an Android OS version 4.0 or newer. 2. The Android 'plbwebcli' App implementation uses Cordova and PhoneGap technologies. See the following links for more information: https://cordova.apache.org/docs/en/latest/guide/overview/ http://phonegap.com 3. The Android 'plbwebcli' is implemented to allow access\logon to a PL/B Web Server (PWS) where PL/B programs can be executed with all UI occurring in the App viewport. 4. New PWS keywords have been implemented to support the Sunbelt 'plbwebcli' App as follows: PLBWEB_APP_IMAGE_URL={url} This keyword is used to generate a remote URL on a 'URLSRC' property for a PICTURE or ICON when running under a Cordova application client and there is no protocol header detected. Example: PLBWEB_APP_IMAGE_URL=http://192.168.1.7:8081/ PLBWEB_APP_IMAGE_SSL_URL={sslurl} This keyword is used to generate a remote URL on a 'URLSRC' property for a PICTURE or ICON when running under a Cordova application client and there is no protocol header detected. Example: PLBWEB_APP_IMAGE_SSL_URL=https://www.mypws.com:8082/ PLBWEB_UPLOADS={directoryname}[/] This keyword specifies the directory under the 'http_root' directory to place any files sent by the 'AppUpload' method. If this keyword is not used, the default directory under 'http_root' is named 'uploads'. The RUNTIME object method named 'GetDir' returns the string value of this keyword when a Type value of 6 specified. PLBWEB_APP_SUPPORT={on|off} By default the PL/B Web Server supports PL/B Web App clients. This keyword can be set to OFF to prevent 'Plbwebcli' App access to the PWS server. 5. The Plbwebcli App is implemented to support SSL certificates. However, self-signed SSL certificates are not supported. 6. The PL/B PICT/ICON objects have been changed to support the Sunbelt 'plbwebcli' App as follows: - Use the '!' as the leading character in the 'URLSRC' property string value to get\use Web application files from the 'local application area' on the mobile device. 7. The PL/B CLIENT object method 'GetState' has been modified to include a new {mask} bit value of 0x2 described as follows: Mask Value Definition 0x2 This state flag indicates that Corodva/Phonegap Support is used for the client. 8. The PL/B CLIENT object has been modified to support new methods which are implemented when using the 'plbwebcli' App client. If these methods are executed using a normal Client Browser, the methods are ignored. The use of the 'plbwebcli' methods requires knowledge of JSON (JavaScript Object Notation) used by these methods. Note the following: a. All methods are Cordova/PhoneGap based operations. b. All method names start with 'App' prefix. c. All 'AppXxx' methods return one of the following error codes: AppErrorNone EQU 0 AppErrorNoCordovaSupport EQU 1 AppErrorWithExtendedInfo EQU 2 AppErrorWithNoExtendedInfo EQU 3 AppErrorUnknownInfoType EQU 4 AppErrorNoInfoReturned EQU 5 AppErrorBadCaptureType EQU 6 AppErrorBadMediaType EQU 7 AppErrorUnknownService EQU 8 AppErrorUnknownPushAction EQU 9 AppErrorUnknownGeoType EQU 10 If a string is returned for a method, any error code is returned in a json string as follows: { "plbError": num } d. For any methods that require a Cordova 'plugin', the operation specifics are described in the Cordova documentation of the 'plugin' being used. f. Some method operations occur asynchronously on a mobile device after a CLIENT method has returned to the PLB program executing the method. For these methods, an event must be registered using the EVENTREG instruction for the CLIENT object to allow the mobile device result to be passed to the PLB program once it has been completed by the mobile device user. In these scenarios, the method result is passed using the PLB event ARG1 parameter as a JSON string. See methods for details. e. These methods for the CLIENT object can ONLY be used for the PL/B Cordova\PhoneGap web App. Here is the list of the 'plbwebcli' App methods: AppCapture Event 103 required AppDialog Event 107 required AppDownload Event 105 required AppExtendedError AppFindContact Event 108 required AppGetInfo AppGetPicture Event 102 & 118 required AppGeoLocation Event 115 required AppMedia Event 109 required AppPickContact Event 101 required AppScanBarCode Event 119 required AppUpload Event 104 required AppVibrate 9. Definitions used for PL/B Web Client: PLBWEBCLI - Sunbelt Web Application Plbwebcli is a Web application that can be downloaded to mobile devices. It can be used to access the Sunbelt PL/B Web Server (PWS) and executed PL/B programs. Cordova Apache Cordova is an open-source mobile development framework. It allows you to use standard web technologies - HTML5, CSS3, and JavaScript for cross-platform development. See the following link for more information: https://cordova.apache.org/docs/en/latest/guide/overview/ PhoneGap From the team behind Apache Cordova, the Adobe PhoneGap framework is an open source distribution of Cordova providing the advantage of technology created by a diverse team of pros along with a robust developer community plus access to the PhoneGap toolset, so you can get to mobile faster. See the following link for more information: http://phonegap.com Local Application Area Persistent and private data storage where the Web application files and directories are stored on a mobile device. See the following link for a detail description of files residing on a device: https://www.npmjs.com/package/cordova-plugin-file For Example: "cdvfile://localhost/persistent|temporary/path/to/file can be used for platform-independent file paths. cdvfile paths are supported by core plugins - for example you can download an mp3 file to cdvfile-path via cordova-plugin-file-transfer and play it via cordova-plugin-media." "cdvfile://localhost/persistent/Bill1.jpg" "cdvfile://localhost/temporary/Bill1.jpg" - Added new methods for the CLIENT object to support the Sunbelt PLB Web Client App. These methods are described as follows: ............................................................... . AppCapture Method for PWS CLIENT Object . The AppCapture method can be used to access a mobile device's audio, image, and video capture capabilities. This method is ONLY used for a Sunbelt PL/B Web Client App using Cordova\PhoneGap operations. See the following link for details on the Cordova plugin used: https://www.npmjs.com/package/cordova-plugin-media-capture The method uses the following format: [label] {object}.AppCapture GIVING {return}: USING [*TYPE=]{type}[: [*OPTIONS=]{options}] Where: {label} is an optional Program Execution Label. {object} is a PWS CLIENT object that has been previously Required declared. {return} is a Numeric Variable that returns the pass\failure values for the execution of the method. {type} is a Numeric Variable or decimal number that Required specified the type of data being captured at the mobile device. {options} is Character String Variable or string literal Optional that specifies a JSON notation string used for a specific {type} being used. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to TRUE if the {return} value is zero. 2. The OVER flag is set to TRUE if the {return} variable it too small to receive the numeric result. 3. The supported {type} values are defined as follows: AppCaptureImage EQU 0 AppCaptureAudio EQU 1 AppCaptureVideo EQU 2 AppCaptureImage This method executes to capture an image on a mobile device. - The {options} parameter string can be specified using JSON notation to limit the number of images captured in a single capture operation. The default limit is 1 image. AppCaptureAudio This method executes to capture audio clips on a mobile device. - The {options} parameter string can be specified using JSON notation to limit the number of audio clips captured in a single capture operation. The default image is 1 audio clip. - The {options} parameter string can be specified to set the maximum duration of an audio sound clip given in seconds. AppCaptureVideo This method executes to capture video clips on a mobile device. - The {options} parameter string can be specified to limit the number of video clips captured in a single capture operation. The default limit is 1 video clip. - The {options} parameter string can be specified to set the maximum duration of a video clip given in seconds. 4. The {options} parameter can be used to control the behavior of the Cordova plugin when the AppCapture method operation is being performed. The {options} JSON property strings are defined as follows: AppCaptureImage EQU 0 - Image {options} Description limit: Limit the number of images captured by the mobile device method operation. AppCaptureAudio EQU 1 - Audio Clip {options} Description limit: Limit the number of audio clip captured by the mobile device method operation. duration: The maximum duration of an audio clip specified in seconds. AppCaptureVideo EQU 2 - Video Clip {options} Description limit: Limit the number of video clip captured by the mobile device method operation. duration: The maximum duration of a video clip specified in seconds. Examples {options}: .... . In this case, the 'AppCapture' is set to allow 2 . images to be captured at the mobile device. . Client.AppCapture Using *Type=AppCaptureImage: *Options="{#"limit#": 2 }" .... . In this case, the number of audio clips are limited to . 2 clips each with a maximum duration of 20 seconds. . Client.AppCapture Using *Type=AppCaptureAudio: *Options="{#"limit#": 2, #"duration#": 20 }" 5. This method starts an asynchronous operation on the mobile device which returns the result using the 'AppEventDoCapture' CLIENT object event where the event data is returned in ARG1 which contains a JSON notation stream. The event number used in EVENTREG is: AppEventDoCapture EQU 103 //Event number for EVENTREG. The event result is defined as follows: The event data returned by this method can be either an error formatted as a JSON string or an array of file data JSON objects found in the PLB Event ARG1 parameter. JSON objects with JSON fields defined as follows: name: The name of the file, without path information. localURL: The name of the file as a URL. fullPath: The full path of the file, including the name. type: The file's mime type. lastModifiedDate: The date and time when the file was last modified. size: The size of the file, in bytes. Example Event Data returned in ARG1: jData DIM 400 Client CLIENT EVENTREG Client, AppEventDoCapture: Event103: ARG1=jData . ... . Do AppCapture method event! . ARG1 data variable 'jData' contains a . JSON string that can be processed using . the PLB XDATA object. A sample of the JSON . returned could be: . .{[ . { . "name": "photo_005.jpg", . "localURL": "cdvfile://localhost/temporary/ . photo_005.jpg", . "type": "image/jpeg", . "lastModifiedDate": 499276952, . "size": 429145, . "fullPath": "/var/mobile/Containers/Data/ . Application/2B60A96C-C125-4AF1 . -B9CB-42DCEC80E090/tmp/photo_ . 005.jpg" . }] .} . xData XDATA . Event103 xData.LoadJson USING jData . ...Process the JSON data using XDATA. . RETURN The event data can be an error that is reported as a JSON string format as: { "code": num } Where: code: is one of the pre-defined error codes listed below: CAPTURE_INTERNAL_ERR EQU 0 The camera or microphone failed to capture image or sound. CAPTURE_APPLICATION_BUSY EQU 1 The camera or audio capture application is currently serving another capture request. CAPTURE_INVALID_ARGUMENT EQU 2 Invalid use of the API (e.g., the value of `limit` is less than one). CAPTURE_NO_MEDIA_FILES EQU 3 The user exits the camera or audio capture application before capturing anything. CAPTURE_NOT_SUPPORTED EQU 4 The requested capture operation is not supported. ............................................................... . AppDialog Method for PWS CLIENT Object . The AppDialog method can be used to access a mobile device dialog UI elements. This method is ONLY used for a Sunbelt PL/B Web Client App using Cordova\PhoneGap operations. See the following link for details on the Cordova plugin used: https://www.npmjs.com/package/cordova-plugin-dialogs The method uses the following format: [label] {object}.AppDialog GIVING {return}: USING [*TEXT=]{text}[: [*TITLE=]{title}][: [*BUTTON=]{button}][: [*DEFAULTTEXT=]{deftext}] Where: {label} is an optional Program Execution Label. {object} is a PWS CLIENT object that has been previously Required declared. {return} is a Numeric Variable that returns the pass\failure values for the execution of the method. {text} is a Character String Variable or string literal Required giving the text to be displayed in the dialog. {title} is a Character String Variable or string literal Optional giving the title to be displayed in the dialog. {button} is a Character String Variable or string literal Optional that contains one or more button names. Button names are separated by ';' characters. {deftext} is a Character String Variable or string literal Optional giving the default text for an edit field used in a Prompt dialog. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to TRUE if the {return} value is zero. 2. The OVER flag is set to TRUE if the {return} variable it too small to receive the numeric result. 3. The type of mobile device dialog is determined by which parameters are specified for the AppDialog method as follows: - If a single button is used with no 'DefaultText' text, an Alert dialog is used. - If multiple buttons are used with no 'DefaultText' text, a Confirm Dialog is used. - If 'DefaultText' text is provided, a Prompt Dialog is used which prompts the end-user for data input. 4. This method starts an asynchronous operation on the mobile device which returns the result using the 'AppEventDialog' CLIENT object event where the event data is returned in ARG1 as plain text data (i.e. not JSON string). The event Modifier value contains the button pressed starting with a value of 1 for the first specified button in the 'Button' parameter. The event number used in EVENTREG is: AppEventDialog EQU 107 //Event number for EVENTREG. The event result is defined as follows: Alert dialog ARG1 - No data returned on event. Modifier - Is the button number ( always 1 ). Confirm dialog ARG1 - No data returned on event. Modifier - Is the button number. Prompt dialog ARG1 - Prompt edit text data returned as plain text (i.e. not JSON). Modifier - Is the button number. 5. Sample Code Bnum FORM 3 //Expect value from 1 to N. FullData DIM 200 //Plain data returned for event. . EventReg Client,AppEventDialog,DialogEvent: Modifier=Bnum, ARG1=FullData . Client.AppDialog Using "How much should be added?": "Numbers": "One;Two" ............................................................... . AppDownload Method for PWS CLIENT Object . The AppDownload method can be used to transfer a file from the PWS server to the client application. This method is ONLY used for a Sunbelt PL/B Web Client App using Cordova\PhoneGap operations. See the following link for details on the Cordova plugin used: https://www.npmjs.com/package/cordova-plugin-file-transfer The method uses the following format: [label] {object}.AppDownload GIVING {return}: USING [*URL=]{url}: [*FILENAME=]{filename}[: [*OPTIONS=]{options}] Where: {label} is an optional Program Execution Label. {object} is a PWS CLIENT object that has been previously Required declared. {return} is a Numeric Variable that returns the pass\failure values for the execution of the method. {url} is Character String Variable or string literal Required giving the URL of the file to download from the PWS server. {filename} is Character String Variable or string literal Required giving the file name to use on the client mobile device 'Local Application Area'. See previous description of the 'Local Application Area' under Definitions. {options} is Character String Variable or string literal Optional that specifies a JSON object that is passed directly to the Cordova routine used for this method. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to TRUE if the {return} value is zero. 2. The OVER flag is set to TRUE if the {return} variable it too small to receive the numeric result. 3. The {options} parameter can be used to control the behavior of the Cordova plugin when the AppDownload method operation is being performed. The {options} parameter is passed directly as a JSON object to the Cordova routine. The {options} parameter currently only supports headers (such as Authorization (Basic Authentication), etc). See the plugin documentation for more information. 4. This method starts an asynchronous download of a file from the PWS server to the client and store in the 'Local Application Area' on the mobile device. The return result for the 'AppEventDoDownload' event data is returned in ARG1 in JSON notation. The event number used in EVENTREG is: AppEventDoDownload EQU 105 //Event number for EVENTREG. The event result is defined as follows: The event data returned by this method can be either a FiletTransferError Object or a FileEntry JSON object returned in the ARG1 parameter. JSON FileEntry object fields defined as follows: isFile: Always true. isDirectory: Always false. name: The name of the FileEntry, excluding the path leading to it. fullPath: The full absolute path from the mobile device root to the FileEntry. JSON FileTransferError object fields defined as follows: code: One of the predefined error codes listed below: FILE_NOT_FOUND_ERR EQU 1 INVALID_URL_ERR EQU 2 CONNECTION_ERR EQU 3 ABORT_ERR EQU 4 NOT_MODIFIED_ERR EQU 5 source: URL to the source. target: URL to the target. http_status: HTTP status code. This attribute is only available when a response code is received from the HTTP connection. body: Response body. This attribute is only available when a response is received from the HTTP connection. 5. Sample Code EventData DIM 200 //JSON data returned for event. . EventReg Client,AppEventDoDownload,DoneFunc: ARG1=EventData . Client.AppDownLoad Giving Result Using *URL="Bill1.jpg": *FILENAME="cdvfile://localhost/persistent/Bill1.jpg" ............................................................... . AppExtendedError Method for PWS CLIENT Object . The AppExtendedError method provides extra error information when the error code 'AppErrorWithExtendedInfo' is returned as the result for a previous method that returned this error code. The method uses the following format: [label] {object}.AppExtendedError GIVING {return}[: USING [*OPTIONS=]{options}] Where: {label} is an optional Program Execution Label. {object} is a PWS CLIENT object that has been previously Required declared. {return} is Character String Variable that receives the extended error string data in JSON notation. {options} is Numeric Variable or decimal number that Optional gives a value to control the behavior of this method. Flags Affected: EOS Note the following: 1. The EOS flag is set to TRUE if the {return} variable is too small to receive the extended error data without being truncated. 3. The {options} parameter is a numeric value that controls the behavior of this method as follows: Option Value Description 0 This is the default value of this method. By default the execution of this method automatically clears the extended error information data. 1 In this case, the extended error information is not cleared when this method is executed. 4. Sample Code Client.AppExtendedError GIVING S$CMDLIN ............................................................... . AppFindContact Method for PWS CLIENT Object . The AppFindContact method can be used to access\retrieve a mobile device's contact information. This method is ONLY used for a Sunbelt PL/B Web Client App using Cordova\PhoneGap operations. See the following link for details on the Cordova plugin used: https://www.npmjs.com/package/cordova-plugin-contacts The method uses the following format: [label] {object}.AppFindContact GIVING {return}: USING [*FIELDS=]{fields}[: [*OPTIONS=]{options}] Where: {label} is an optional Program Execution Label. {object} is a PWS CLIENT object that has been previously Required declared. {return} is a Numeric Variable that returns the pass\failure values for the execution of the method. {fields} is a Character String Variable or string Required literal that is a JSON string giving the Contact fields to use as a search qualifier. A zero-length (NULL) parameter is invalid and results in INVALID_ARGUMENT_ERROR. A value of "*" searches all contact fields. {options} is Character String Variable or string literal Optional that specifies a JSON notation string that is passed directly to the Cordova routine used for this method. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to TRUE if the {return} value is zero. 2. The OVER flag is set to TRUE if the {return} variable it too small to receive the numeric result. 3. The {fields} JSON string is formatted to include the names to be used when searching the mobile device contacts: JSON string: ["displayName","name"] Example: FindContact INIT "[#"displayName#",#"name#"]" 4. The {options} parameter is passed directly as a JSON object to the Cordova routine. It uses the following fields: filter: The search string is used to find navigator.contacts. If the JSON "filter" name is not specified, the default behavior is to search all contacts (Default: ""). If provided, a case-insensitive, partial value match is applied to each field specified in the 'Fields' parameter. If there is a match for any of the specified fields, the contact is returned. multiple: Determines if the find operation returns multiple navigator.contacts. (Default: `false`) desiredFields: Specify the Contact fields that are to be returned as previously defined by event data Contact JSON object description. For the specified Contact fields, the resulting `Contact` object only returns values for these fields. hasPhoneNumber: (Android only) Filters the search to only return contacts with a phone number informed. (Default: `false`) See the plugin documentation for more information. 5. This method executes asynchronously, querying the device contacts database. A result is returned as an 'AppEventGetContact' event with the event data being returned in ARG1 in JSON notation. The event number used in EVENTREG is: AppEventGetContact EQU 108 //Event number for EVENTREG. The event result is defined as follows: The event data returned by this method can be either as a JSON error object or as an array of Contact JSON objects where the data is returned in the PLB Event ARG1 parameter. A JSON error object with the fields of: code: One of the predefined error codes listed below: UNKNOWN_ERROR EQU 0 INVALID_ARGUMENT_ERROR EQU 1 TIMEOUT_ERROR EQU 2 PENDING_OPERATION_ERROR EQU 3 IO_ERROR EQU 4 NOT_SUPPORTED_ERROR EQU 5 OPERATION_CANCELLED_ERROR EQU 6 PERMISSION_DENIED_ERROR EQU 20 message: Error message description. An array of Contact JSON objects with the fields: code: id: A globally unique identifier. displayName: The name of this Contact, suitable for display to end users. name: An object containing all components of a person's name. nickname: A casual name by which to address the contact. phoneNumbers: An array of all the contact's phone numbers. emails: An array of all the contact's email addresses. addresses: An array of all the contact's addresses. ims: An array of all the contact's IM addresses. organizations: An array of all the contact's organizations. birthday: The birthday of the contact. note: A note about the contact. photos: An array of the contact's photos. categories: An array of all the user-defined categories associated with the contact. urls: An array of web pages associated with the contact. Example Event Data returned in ARG1: { "id": "{5.70002.30}", "rawId": null, "displayName": "Tom Smith", "name": { "formatted": "Tom Smith", "familyName": "Smith", "givenName": "Tom", "middleName": null, "honorificPrefix": null, "honorificSuffix": null }, "nickname": "Tom", "phoneNumbers": [], "emails": [], "addresses": [], "ims": [], "organizations": [], "birthday": null, "note": null, "photos": null, "categories": null, "urls": null } 6. Sample Code Cl CLIENT . EventReg Cl,AppEventGetContact,GetContactFunc: ARG1=ContactData . Cl.AppFindContact Using *Fields="[#"displayName#",#"name#"]": *Options="{#"filter#": #"Bob#"}" ............................................................... . AppGetInfo Method for PWS CLIENT Object . The AppGetInfo method can be used to retrieve information from a mobile device's information that describes the hardware and software. This method is ONLY used for a Sunbelt PL/B Web Client App using Cordova\PhoneGap operations. See the following link for details on the Cordova plugin used: https://www.npmjs.com/package/cordova-plugin-device The method uses the following format: [label] {object}.AppGetInfo GIVING {return}: USING [*TYPE=]{type}[: [*OPTIONS=]{options}] Where: {label} is an optional Program Execution Label. {object} is a PWS CLIENT object that has been previously Required declared. {return} is a Character String Variable that receives the mobile device's information formatted as a JSON string. {type} is a Numeric Variable or decimal number that Optional specifies the specific mobile device information to be return. {options} is Character String Variable or string literal Optional that can be used to control the behavior of this method. Currently this parameter is not implemented. Flags Affected: EOS Note the following: 1. The EOS flag is set to TRUE if the {return} variable is too small to receive all of the method data without being truncated. 2. The supported {type} values indicate the type of mobile device information to be retrieved by this method. The supported {type} parameter values are defined as follows: AppInfoDevice EQU 0 AppInfoBattery EQU 1 AppInfoNetwork EQU 2 AppInfoLanguage EQU 3 AppInfoDevice Type: See this link for details on specific operating values identified in this method. https://www.npmjs.com/package/cordova-plugin-device The method type returns as JSON notation string with the following fields: cordova: The version of Cordova running on the device. model: The name of the device's model or product. The value is set by the device manufacturer and may be different across versions of the same product. platform: The device's operating system name. uuid: The device's Universally Unique Identifier. version: The operating system version. manufacturer: The device's manufacturer. isVirtual: Whether the device is running on a simulator. serial: The device hardware serial number. AppInfoBattery Type: See this link for details on specific operating values identified in this method. https://www.npmjs.com/package/cordova-plugin -battery-status This method type starts application battery monitoring and returns the last battery event data in JSON notation. The JSON notation string contains the following fields level: The percentage of battery charge (0-100). isPlugged: A boolean that indicates whether the device is plugged in or not. AppInfoNetwork Type: See this link for details on specific operating values identified in this method. https://www.npmjs.com/package/cordova-plugin -network-information This method type returns the device's cellar and wifi connection type in the event data in JSON notation. The JSON notation string with the following field: type: The type identifies one of following: UNKNOWN ETHERNET WIFI CELL_2G CELL_3G CELL_4G CELL NONE AppInfoLanguage Type: See this link for details on specific operating values identified in this method. https://www.npmjs.com/package/cordova-plugin -globalization This method type returns information about the user's locale, language, and timezone at the client device. This information is returned in JSON notation. The JSON notation string with the following fields: language: The BCP 47 (Best Current Practice) compliant language identifier tag (language: en-US). localeName: The BCP 47 (Best Current Practice) compliant tag for the client's current locale date: A JSON object containing the fields: pattern: The date and time pattern to format and parse date. timezone: The abbreviated name of the time zone on the client. utc_offset: The current difference in seconds between the client's time zone and coordinated universal time. dst_offset: The current daylight saving time offset in seconds between the client's non-daylight saving's time zone and the client's daylight saving's time zone. number: A JSON object containing the fields: pattern: The number pattern to format and parse numbers. The patterns follow Unicode Technical Standard. See link: http://unicode.org/reports/tr35/tr35-4.html symbol: The symbol to use when formatting and parsing, such as a percent or currency symbol. fraction: The number of fractional digits to use when parsing and formatting numbers. rounding: The rounding increment to use when parsing and formatting. positive: The symbol to use for positive numbers when parsing and formatting. negative: The symbol to use for negative numbers when parsing and formatting. decimal: The decimal symbol to use for parsing and formatting. grouping: The grouping symbol to use for parsing and formatting. 3. The {options} parameter is implemented for future use. 4. This method can generate PLB events when the AppInfoBattery {type] is being used. The following event are supported and must be registered using the EVENTREG instruction. The battery events are: AppEventBattery EQU 114 AppEventBatteryLow EQU 116 AppEventBatteryCrit EQU 117 Battery event data is returned in ARG1 in JSON notation. ............................................................... . AppGetPicture Method for PWS CLIENT Object . The AppGetPicture method can be used for taking pictures and for choosing images from the device's image library. This method is ONLY used for a Sunbelt PL/B Web Client App using Cordova\PhoneGap operations. See the following link for details on the Cordova plugin used: https://www.npmjs.com/package/cordova-plugin-camera The method uses the following format: [label] {object}.AppGetPicture GIVING {return}[: USING [*OPTIONS=]{options}] Where: {label} is an optional Program Execution Label. {object} is a PWS CLIENT object that has been previously Required declared. {return} is a Numeric Variable that returns the pass\failure values for the execution of the method. {options} is Character String Variable or string literal Optional that specifies a JSON object that is passed directly to the Cordova routine used for this method. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to TRUE if the {return} value is zero. 2. The OVER flag is set to TRUE if the {return} variable it too small to receive the numeric result. 3. The {options} parameter can be used to control the behavior of the Cordova plugin when the AppGetPicture method operation is being performed. The {options} parameter is passed directly as a JSON object to the Cordova routine. If {options} parameter has { "cleanUp": true }, the AppGetPicture method only removes intermediate image files that are kept in temporary storage on the device. The JSON object supports and can include the following fields: quality: Quality of the saved image, expressed as a range of 0-100, where 100 is typically full resolution with no loss from file compression. (Note that information about the camera's resolution is unavailable.) destinationType: This JSON field chooses the format of the data returned. One of the following numeric values is allowed: DATA_URL EQU 0 // Return base64 encoded // string FILE_URI EQU 1 // Default Return file uri NATIVE_URI EQU 2 // Return native uri sourceType: This JSON field sets the source of the picture on device. One of the following numeric values is allowed: PHOTOLIBRARY EQU 0 // Choose image from // picture library CAMERA EQU 1 // Default Take picture // from camera SAVEDPHOTOALBUM EQU 2 // Choose image from // picture library allowEdit: This JSON field can allow simple editing of image on the device before selection. The allowed values are true and false. The default is true. encodingType: This JSON field chooses the returned image file's encoding. One of the following numeric values is allowed: JPEG EQU 0 // Default Return JPEG encoded // image PNG EQU 1 // Return PNG encoded image targetWidth: This JSON field specifies the width in pixels to scale the returned image. This field must be used with `targetHeight`. The aspect ratio remains constant. targetHeight: This JSON field specifies the height in pixels to scale the returned image. This field must be used with `targetWidth`. The aspect ratio remains constant. mediaType: This JSON field sets the type of media to select from on the device. This field only works when `PictureSourceType` is `PHOTOLIBRARY` or `SAVEDPHOTOALBUM`. One of the following numeric values is allowed: PICTURE EQU 0 // Default Allow selection of // still pictures only. VIDEO EQU 1 // Allow selection of video only, //ONLY RETURNS URL. ALLMEDIA EQU 2 // Allow selection from all // media types . correctOrientation: This JSON field allows rotation of the image to correct for the orientation of the device during capture. saveToPhotoAlbum: This JSON field causes the image to be save to the photo album on the device after capture. cameraDirection: This JSON field chooses the camera to use (front- or back-facing). One of the following numeric values is allowed: BACK EQU 0 // Default Use the // back-facing camera FRONT EQU 1 // Use the front-facing // camera 4. This method starts an asynchronous operation on the mobile device which returns the result using the 'AppEventGetPict' CLIENT object event where the event data is returned in ARG1 which contains a JSON notation string. If an error occurs when this method is being executed at the mobile device, the PLB AppEventGetPictError is generated and the error data is returned in ARG1. The event numbers used in EVENTREG is: AppEventGetPict EQU 102 //Event number for EVENTREG AppEventGetPictError EQU 118 //Event number for EVENTREG The event result is defined as follows: AppEventGetPictError Event Data If an error occurs, the error event data is a string that is a message provided by the mobile device's native code. AppEventGetPict The success event data is a string that is based upon the 'destinationType' {option} parameter field. Value Event Data Returned is... FILE_URI a string representing the image file location on local storage. DATA_URL a string containing the base64-encoded photo image. NATIVE_URI a native uri. See link Cordova plug-in for more details. 4. Sample Code FileUrl DIM 250 Cl CLIENT Opt INIT "{#"sourceType#": 1, #"destinationType#": 2}" . EventReg Cl,AppEventGetPict,PictEvent,ARG1=FileUrl . Cl.AppGetPicture Using "{#"cleanUp#": true }" . Cl.AppGetPicture Using Opt ............................................................... . AppGeoLocation Method for PWS CLIENT Object . The AppGeoLocation method provides information about a mobile device's location, such as latitude and longitude. This method is ONLY used for a Sunbelt PL/B Web Client App using Cordova\PhoneGap operations. See the following link for details on the Cordova plugin used: https://www.npmjs.com/package/cordova-plugin-geolocation The method uses the following format: [label] {object}.AppGeoLocation GIVING {return}: USING [*TYPE=]{type}[: [*OPTIONS=]{options}] Where: {label} is an optional Program Execution Label. {object} is a PWS CLIENT object that has been previously Required declared. {return} is a Numeric Variable that returns the pass\failure values for the execution of the method. {type} is a Numeric Variable or decimal number that Required specifies the type of location information to be retrieved. {options} is Character String Variable or string literal Optional that specifies a JSON object string that is passed directly to the Cordova routine to customize the retrieval of the geolocation position. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to TRUE if the {return} value is zero. 2. The OVER flag is set to TRUE if the {return} variable it too small to receive the numeric result. 3. The supported {type} values are defined as follows: AppGeoGetLocation EQU 0 AppGeoWatchLocation EQU 1 AppGeoClearWatch EQU 2 AppGeoGetLocation This method type returns a result using the PLB AppEventLocation event with the event data being returned in ARG1 in JSON notation. AppGeoWatchLocation This type returns the device's current position when a change in position is detected. The result event and {options} parameter are the same as described for the AppGeoGetLocation type. AppGeoClearWatch This type will cancel any previously setup AppGeoWatchLocation. 4. The {options} parameter is passed directly as a JSON object to the Cordova routine to customize the retrieval of the geolocation position. The {options} JSON object fields are defined as follows as determined by the {type} being used: AppGeoGetLocation AppGeoWatchLocation enableHighAccuracy: Provides a hint that the application needs the best possible results. By default, the device attempts to retrieve a `Position` using network-based methods. Setting this property to `true` tells the framework to use more accurate methods, such as satellite positioning. timeout: The maximum length of time (milliseconds) that is allowed to pass from the call until the corresponding event. maximumAge: Accept a cached position whose age is no greater than the specified time in milliseconds. 5. This method starts an asynchronous operation on the mobile device which returns the result using the 'AppEventLocation' CLIENT object event where the event data is returned in ARG1 which contains a JSON notation stream. The event number used in EVENTREG is: AppEventLocation EQU 115 //Event number for EVENTREG. The event result is defined as follows: The event data returned by this method can be either a JSON Error object string or a JSON Position object string found in the PLB Event ARG1 parameter. JSON Error Object Event Data fields are defined as follows: code: One of the pre-defined error codes listed below. PERMISSION_DENIED EQU 1 Returned when users do not allow the app to retrieve position information. POSITION_UNAVAILABLE EQU 2 Returned when the device is unable to retrieve a position. In general, this means the device is not connected to a network or can't get a satellite fix. TIMEOUT EQU 3 Returned when the device is unable to retrieve a position within the time specified by 'the timeout` included in the Options parameter. message: Error message. Position JSON Object Event Data fields are defined as follows: latitude: Latitude in decimal degrees. longitude: Longitude in decimal degrees. altitude: Height of the position in meters above the ellipsoid. accuracy: Accuracy level of the latitude and longitude coordinates in meters. altitudeAccuracy: Accuracy level of the altitude coordinate in meters. heading: Direction of travel, specified in degrees counting clockwise relative to the true north. speed: Current ground speed of the device, specified in meters per second. timestamp: Creation timestamp. 6. Sample Code FileLoc DIM 250 Opt INIT "{ #"maximumAge#": 3000, #"timeout#": 5000,": " #"enableHighAccuracy#": true }" . EventReg Client,AppEventLocation,GeoEvent,ARG1=FileLoc . Client.AppGeoLocation Using *Type=AppGeoGetLocation: *Options=Opt ............................................................... . AppMedia Method for PWS CLIENT Object . The AppMedia method provides the ability to play audio files on a mobile device. This method is ONLY used for a Sunbelt PL/B Web Client App using Cordova\PhoneGap operations. See the following link for details on the Cordova plugin used: https://www.npmjs.com/package/cordova-plugin-media The method uses the following format: [label] {object}.AppGeoLocation GIVING {return}: USING [*ACTION=]{action}[: [*URL=]{url}][: [*VOLUME=]{volume}] Where: {label} is an optional Program Execution Label. {object} is a PWS CLIENT object that has been previously Required declared. {return} is a Numeric Variable that returns the pass\failure values for the execution of the method. {action} is a Numeric Variable or decimal number that Required specifies the action to be performed by this method. {url} is Character String Variable or string literal Optional that specifies a valid URL string to be used by this method as the source. {volume} is a Numeric Variable or decimal number that Optional specifies the volume to be used for this method. The volumne value must be within the range of 0 to 100. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to TRUE if the {return} value is zero. 2. The OVER flag is set to TRUE if the {return} variable it too small to receive the numeric result. 3. The supported {action} values are defined as follows: AppMediaPlay EQU 0 AppMediaPause EQU 1 AppMediaRewind EQU 2 AppMediaStop EQU 3 AppMediaRelease EQU 4 AppMediaPlay The current media source starts to play. AppMediaPause The current media source pauses. AppMediaRewind The current media source is reset to the start. AppMediaStop The current media source stops any play. AppMediaRelease The current media source is released. 4. If the {url} parameter is used, any old media source is released and a new media source is created using the given URI containing the audio content. 5. This method starts an asynchronous operation on the mobile device which returns the results using the 'AppEventMedia' CLIENT object event where the event data is returned in ARG1 which contains a JSON notation string. The result of the media source creation is returned using the PLB event with the event data being returned in ARG1 in JSON notation. This event is returned when the media source has completed the current play, or stop action without any event data. The event number used in EVENTREG is: AppEventMedia EQU 109 //Event number for EVENTREG. The event data is returned by this method with a JSON Error object as follows. JSON Error Object Event Data fields are defined as follows: code: JSON Error Object Event Data fields are defined as follows: code: One of the pre-defined error codes listed below. MEDIA_ERR_ABORTED EQU 1 MEDIA_ERR_NETWORK EQU 2 MEDIA_ERR_DECODE EQU 3 MEDIA_ERR_NONE_SUPPORTED EQU 4 message: Error message. 6. Sample Code resMedia DIM 250 dUrl INIT "http://audio.ibeat.org/content/p1rj1s/": "p1rj1s_-_rockGuitar.mp3" . EventReg Client,AppEventMedia,MediaEvent,ARG1=resMedia . Client.AppMedia Using AppMediaPlay, *URL=dUrl ............................................................... . AppPictContact Method for PWS CLIENT Object . The AppPictContact method launches the Contact Picker to select a single contact from the device contacts database. This method is ONLY used for a Sunbelt PL/B Web Client App using Cordova\PhoneGap operations. See the following link for details on the Cordova plugin used: https://www.npmjs.com/package/cordova-plugin-contacts The method uses the following format: [label] {object}.AppPickContact GIVING {return} Where: {label} is an optional Program Execution Label. {object} is a PWS CLIENT object that has been previously Required declared. {return} is a Numeric Variable that returns the pass\failure values for the execution of the method. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to TRUE if the {return} value is zero. 2. The OVER flag is set to TRUE if the {return} variable it too small to receive the numeric result. 3. The method starts an asynchronous Contact Picker dialog on mobile device and a result is generated as a PLB 'AppEventContactPicked' CLIENT object event with the event data being returned in ARG1 in JSON notation. The event number used in EVENTREG is: AppEventContactPicked EQU 101 //EVENTREG Event number. The event data is returned by this method either with a Error JSON object or a Contact JSON object. JSON Error Object Event Data fields are defined as follows: code: One of the pre-defined error codes listed below. UNKNOWN_ERROR EQU 0 INVALID_ARGUMENT_ERROR EQU 1 TIMEOUT_ERROR EQU 2 PENDING_OPERATION_ERROR EQU 3 IO_ERROR EQU 4 NOT_SUPPORTED_ERROR EQU 5 OPERATION_CANCELLED_ERROR EQU 6 PERMISSION_DENIED_ERROR EQU 20 message: Error message. Contact JSON Object Event Data fields are defined as follows: id: A globally unique identifier. displayName: The name of this Contact, suitable for display to end users. name: An object containing all components of a person's name. nickname: A casual name by which to address the contact. phoneNumbers: An array of all the contact's phone numbers. emails: An array of all the contact's email addresses. addresses: An array of all the contact's addresses. ims: An array of all the contact's IM addresses. organizations: An array of all the contact's organizations. birthday: The birthday of the contact. note: A note about the contact. photos: An array of the contact's photos. categories: An array of all the user-defined categories associated with the contact. urls: An array of web pages associated with the contact. Eample Contact JSON Event Data: { "id": "{5.70002.30}", "rawId": null, "displayName": "Tom Smith", "name": { "formatted": "Tom Smith", "familyName": "Smith", "givenName": "Tom", "middleName": null, "honorificPrefix": null, "honorificSuffix": null }, "nickname": "Tom", "phoneNumbers": [], "emails": [], "addresses": [], "ims": [], "organizations": [], "birthday": null, "note": null, "photos": null, "categories": null, "urls": null } 4. Sample Code resContact DIM 500 nRes FORM 3 . EventReg Client,AppEventContactPicked,ContactEvent: ARG1=resContact . Client.AppPickContact GIVING nRes ............................................................... . AppScanBarCode Method for PWS CLIENT Object . The AppScanBarCode method provides an API for scanning barcodes. This method opens the device's default camera application to scan a barcode. Once the user scans the barcode, the camera application closes and the PLB AppEventScanBarCode event is generated. This method is ONLY used for a Sunbelt PL/B Web Client App using Cordova\PhoneGap operations. See the following link for details on the Cordova plugin used: https://github.com/phonegap/phonegap-plugin-barcodescanner The method uses the following format: [label] {object}.AppScanBarCode GIVING {return}[: USING [*OPTIONS=]{options}] Where: {label} is an optional Program Execution Label. {object} is a PWS CLIENT object that has been previously Required declared. {return} is a Numeric Variable that returns the pass\failure values for the execution of the method. {options} is Character String Variable or string literal Optional that specifies a JSON object string that is passed directly to the Cordova routine to customize the scanning operation. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to TRUE if the {return} value is zero. 2. The OVER flag is set to TRUE if the {return} variable it too small to receive the numeric result. 3. The {options} parameter is passed directly as a JSON object to the Cordova routine to customize the scanning barcode operation. The {options} JSON object fields are defined as follows: preferFrontCamera: A iOS and Android supported field that scans using the front camera. (default: true) showFlipCameraButton : A iOS and Android supported field that adds a flip camera button. (default : true ) prompt: An Android only field that specifies the message displayed in the scanning area. (default: "Place a barcode inside the scan area") formats: List of formats to support. (example "QR_CODE,PDF_417" ) (default: all but PDF_417 and RSS_EXPANDED) orientation: An Android only field that specifies either "landscape" or "portrait" for the scanning area. (default: unset so it rotates with the device) 4. This method starts an asynchronous operation on the mobile device which returns the result using the PLB 'AppEventScanBarCode' CLIENT object event where the event data is returned in ARG1 which contains a JSON notation string. The event number used in EVENTREG is: AppEventScanBarCode EQU 119 //EVENTREG Event number. The event data is returned by this method either with a Error JSON object or a JSON object. JSON Error Object Event Data fields are defined as follows: code: Error code value. message: Error message description. JSON Object Event Data fields are defined as follows: text: Text representation of the barcode data. format: Type of barcode detected. cancelled: When mobile device user cancelled ths scan operation, this field is se to true. Otherwise, this field is set to false. ............................................................... . AppUpload Method for PWS CLIENT Object . The AppUpload method provides a means of transferring a file from the client application to a server. This method is ONLY used for a Sunbelt PL/B Web Client App using Cordova\PhoneGap operations. See the following link for details on the Cordova plugin used: https://www.npmjs.com/package/cordova-plugin-file-transfer The method uses the following format: [label] {object}.AppUpload GIVING {return}: USING [*URL=]{url}: [*FILENAME=]{filename}[: [*OPTIONS=]{options}] Where: {label} is an optional Program Execution Label. {object} is a PWS CLIENT object that has been previously Required declared. {return} is a Numeric Variable that returns the pass\failure values for the execution of the method. {url} is Character String Variable or string literal Required giving the URL of the file to upload from the client. {filename} is Character String Variable or string literal Required giving the file name to use on the server. {options} is Character String Variable or string literal Optional that specifies a JSON object that is passed directly to the Cordova routine used for this method. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to TRUE if the {return} value is zero. 2. The OVER flag is set to TRUE if the {return} variable it too small to receive the numeric result. 3. The (options} parameter is passed directly as a JSON object to the Cordova routine. This currently only supports mimeType field as follows: See the plugin documentation for more information. mimeType: The mime type of the data to upload. Defaults to image/jpeg` mime type. 4. This method starts an asynchronous upload of a file from the client to the PWS server. A result is generated using the PLB 'AppEventDoUpload' CLIENT object event with the event data being returned in ARG1 in JSON notation. The event number used in EVENTREG is: AppEventDoUpload EQU 104 //Event number for EVENTREG. The event result is defined as follows: The event data returned by this method can be either a FiletTransferError Object or a FileUploadResult JSON object returned in the ARG1 parameter. FileUploadResult JSON object fields defined as follows: bytesSent: The number of bytes sent to the server as part of the upload. responseCode: The HTTP response code returned by the server. response: The HTTP response returned by the server. JSON FileTransferError object fields defined as follows: code: One of the predefined error codes listed below: FILE_NOT_FOUND_ERR EQU 1 INVALID_URL_ERR EQU 2 CONNECTION_ERR EQU 3 ABORT_ERR EQU 4 NOT_MODIFIED_ERR EQU 5 source: URL to the source. target: URL to the target. http_status: HTTP status code. This attribute is only available when a response code is received from the HTTP connection. body: Response body. This attribute is only available when a response is received from the HTTP connection. 5. Sample Code ResultData DIM 500 . EventReg Client,AppEventDoUpload,UploadDoneFunc: ARG1=ResultData . Client.AppUpload Giving Result: Using "cdvfile://localhost/persistent/Bill1.txt": "Bill2.txt" ............................................................... . AppVibrate Method for PWS CLIENT Object . The AppVibrate method provides a way to vibrate the mobile device. This method is ONLY used for a Sunbelt PL/B Web Client App using Cordova\PhoneGap operations. See the following link for details on the Cordova plugin used: https://www.npmjs.com/package/cordova-plugin-vibration The method uses the following format: [label] {object}.AppVibrate GIVING {return}[: USING [*TIME=]{time}] Where: {label} is an optional Program Execution Label. {object} is a PWS CLIENT object that has been previously Required declared. {return} is a Numeric Variable that returns the pass\failure values for the execution of the method. {time} is a Numeric Variable or decimal number whose Optional value specifies the amount of time to vibrate the mobile device. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to TRUE if the {return} value is zero. 2. The OVER flag is set to TRUE if the {return} variable it too small to receive the numeric result. 3. The {time} parameter defines the time to vibrate the mobile device. The {time} value is given in milliseconds. The default time is 3000ms. 4. Sample Code Client.AppVibrate Using 1000 //1 second vibrate! - Modified the PWS COMBOBOX object to maintain the combobox data as virtual data at the PWS server. This change is implemented to correct a problem where the 'GetItemData' method was losing item data values when the COMBOBOX 'SORTED' property was turned on for the object. In addition, this change improves the overall performance of the PWS COMBOBOX. - Added support a PWS TREEVIEW object. See the description provided int the 'Notes for DOCUMENTATION:' readme section above. - Added support for a limited IMAGELIST object used to support the PWS TREEVIEW. See the description provided int the 'Notes for DOCUMENTATION:' readme section above. - Modified the PWS runtime to support new events for the PWS RUNTIME object described as follows: $RUNSUSPEND EQU 34 1. This event is ONLY registered for the RUNTIME object using the EVENTREG instruction. 2. This event is implemented as a fast event which is dispatched when a PWS child task goes into a SUSPEND state. $RUNRESUME EQU 35 1. This event is ONLY registered for the RUNTIME object using the EVENTREG instruction. 2. This event is implemented to occur when the client mobile device re-establish communications connection to a suspended child task. 3. This event is NOT implemented as a fast event. However, this event is pushed onto the top of the PLB user stack as the next event to be dispatched. $RUNIDLE EQU 36 1. This event is ONLY registered for the RUNTIME object using the EVENTREG instruction. 2. This event is implemented to prevent the PWS runtime default idle action for a child task. The PLB end-user program take responsibility for all actions to determine when a client UI operations are no longer occurring. 3. This event occurs when the PLBWEB_IDLE_TIMEOUT expires resulting in the event being pushed onto the top of the PLB user stack as the next event to be dispatched and the idle timeout is reset. Therefore, the PLBWEB_IDLE_MAX_TIMEOUT will never occur. The PLB end-user program must determine when to terminate the program using a STOP or SHUTDOWN instruction. - The PWS mini-server has been modified to support Deflate Compression as determined by the client Browser being used. This compression supoprt is available on all client browsers except for the Windows Internet Explorer. By default the compression is turned on when a client Browser supports the compression. Note: 1. A new keyword named 'PLBWEB_MSGCOMPRESS={ON|OFF}' has been added to the PWS server. The 'PLBWEB_MSGCOMPRESS=OFF' keyword can be set in the 'plbwebsrv.ini' [Evironment] section to disable the Deflate Compression support. - A new keyword named 'PLBWEB_SSL_SELFSIGNED={on|off}' has been added to allow the default SSL interface level to be set to SSLv23. When the SSLv23 SSL interface is used, a SSL self-signed certificate can be used by the PWS server so a user of a client browser can force\invoke a certificate exception to access the PWS server. If this keyword is not used, the PWS server defaults to use the SSL interface level of TLSv1 with a higher security level where client browsers DO NOT allow a user exception to override a self-signed certifiicate. Note: 1. The 'PLBWEB_SSL_SELFSIGNED=ON' should ONLY be used when a self-signed SSL certificate is being used. This keyword should NOT be used when a self-signed SSL certificate is NOT being used. - Modified the PWS runtime to support the WEBHEIGHT, WEBWIDTH, WEBTOP, WEBLEFT, and WEBPOSITON properties which are described in the PLBCMP section. - Modified the 'Child Start' log entry to identify a Cordova Web App. - Added a log message to indicate when an end user closes the client browser while a PLB program is running. - Modified the SSL support for PWS mini-server to support SSL chained certificates. - Added a new keyword named 'PLBWEB_SSL_CHAINCERT={on|off}' which can be used to enable or disable SSL chained file certificates. By default if this keyword is not used, the PWS server enables SSL chained certificates where the PWS server loads a certificate chain file. If the 'PLBWEB_SSL_CHAINCERT=OFF' keyword is specified in the 'plbwebsrv.ini' [Environment] section, the PWS server loads a SSL certificate file in the same manner as PWS versions prior to 9.9. - Modified to prevent a saturation of the PWS log file when unexpected select\accept logon socket errors occur. - Modified the PWS server to terminate if excessive ACCEPT logon errors occur for the PLBWEB_HOSTNAME listening socket. If more than 2048 socket errors occur sequentially, the PWS server is automatically terminated with a '-t' termination command. - Modified the 'CLOCK SYSPORT' instruction to return a more unique port ID generated from the OS child task id. - Corrected a problem in a PWS COMBOBOX where items loaded only from a PWF would cause the click result to be off by 1. - Corrected a problem where the 'DeleteString' method of the PWS COMBOBOX object did not return the number of items remaining after the method was completed. - Corrected a problem where SSL extended text error data was not being logged in the PWS log file. - Corrected a problem where a GPF error could occur when a 'plbwebsrv.exe' command executed a '-t', '-f', ...etc option which encountered a socket error accessing an active PWS server. - Corrected issue with UDA not being cleared out on the destroy of PLF form. This could cause unexpected program behaviors. ------------------------------------------------------------------------------- PLBWIN, PLBNET - Modified the runtimes to allow the PLB Designer to support the URLSOURCE property for a PWS IMAGELIST. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX), PLBWEBSRV - The PRTPAGE *PICT control has been modified to allow a JPG image to be directly embedded into the PDF output of the Sunbelt 'pdf:' {device}. Therefore the *PICT control an alternate syntax format as follows: *PICT={top}:{bottom}:{left}:{right}:{jpgimage} Where: {jpgimage} - is a previously declared Character String Variable or literal. The file name identifies a JPG image file whose contents is stored directly into the body of the Sunbelt 'pdf:' {device} output. Note: 1. The {jpgimage} file MUST be a JPG image file in compliance to the guidelines defined in the standard PDF specifications. 2. The {jpgimage} can be a fully qualified name of the physical image file containing the JPG image data. The {jpgimage} physical file MUST exist on the same OS file system where the PLB runtime is executing. 3. This *PICT control syntax using the {jpgname} is supported by all PLB runtimes including Linux\Unix runtimes. Example: PF PFILE . PRTOPEN PF, "pdf:", "mydoc.pdf" ... PRTPAGE PF; *PICT=1:10:1:10:"prod.jpg" In this case, the "prod.jpg" image must exist in the current working dirctory of the PLB runtime. Otherwise, PLB runtime uses the PLB_PATH to locate the JPG image to be used. ... PRTPAGE PF; *PICT=1:10:1:10:"c:\temp\prod.jpg" - The Sunbelt products have been updated to use the latest SQLite version 3.14.1. Prior to this update, the previous SQLite version 3.8.11.1 was being used. Details on the SQLite changes can be found at this link: https://sqlite.org/changes.html - Modified the GETFILE instruction to detect whether an ADMIN data variable has been opened by the ADMLOGON instruction or not. The ZERO flag state indicates whether the ADMIN variable is opened or not. - Corrected a problem in the HTTP instruction where the HTTP 1.1 Header request fields were being terminated with a single 'LF' character rather than 'CRLF' as defined by the RFC3270 specification. The problem of using a single 'LF' could cause some Web Servers to reject\ignore the HTTP 1.1 Header requests giving an indeterminate error result. - Corrected a memory leak problem when PDF Templates were used for Sunbelt 'pdf:' ouput. - Corrected a problem where a HTTP header field named 'Soap-Content-Length:' was erroneously being detected and used as the 'Content-Length:' of a received HTTP message. This problem was causing an unexpected HTTP timeout resulting in a timeout error 17. - Corrected a problem where the 'GETFILE XFILE, XMLDATA={svar}' instruction was NOT generating an 'I83 subcode 310' error when the {svar} was too small to receive all of the XFILE XML data. - Corrected a problem where a FINDDIR could return the filesize as a negative value when a file size larger than 2GB was found. ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - Modified the CUETEXT property for an EDITTEXT object to allow the cue text to remain visible until the end-user starts typing data as the defaualt behavior. Prior to this change, the 'CUETEXT' property was implemented to cause the cue text data to be removed when the EDITTEXT gained focus. Note: 1. A new keyword named '*EDITTEXTMODES={nvar}' has been added for the GETMODE and SETMODE instructions. This keyword can be used to set the bit mask value of 2 to force runtime versions 9.9 and later to allow the cue text to become invisible when an EDITTEXT gains focus. This keyword ONLY takes affect for any EDITTEXT objects that are created after the keyword setting is set. - A new keyword named '*EDITTEXTMODES={nvar} has been implemented for the GETMODE and SETMODE instructions. This keyword is used to set default behaviors applied to any EDITTEXT that is created after this keyword bit mask value is set. SETMODE *EDITTEXTMODES={dnumnvar} This *EDITTEXTMODES keyword value defines a bit mask value where each bit defines a behavior that can be applied to an EDITTEXT object. The bit mask values are defined as follows: EDITTEXTMODES (Values) Behavior 0x00000000 - All runtime defaults are used. 0x00000001 - Reserved for internal use. Ignored! 0x00000002 - Force newly created EDITTEXT objects to cause the cue text data to become invisible when the object gains focus. This behavior is the same as expected for runtime versions prior to version 9.9. GETMODE *EDITTEXTMODES={nvar} The *EDITEXTMODES keyword returns the current runtime bit mask value used to control specialize EDITTEXT behaviors. The returned bit mask settings are the same as described by the SETMODE *EDITTEXTMODES keyword. ------------------------------------------------------------------------------- PLBCMP - Added a new compiler directive named %RECORDLABELS. This compiler directive can be used to save the RECORD member names into a DIM variable. This DIM variable can be used when a program executes to use the RECORD text member names for the PLB application. FORMAT: label %RECORDLABELS {record}[, {mode}] Where: label Required. A data variable generated as a DIM. record Required. A previously declared RECORD variable. mode Optional. A decimal constant, a CONST value, or EQUATEd value that defines directive special behaviors. Flags Affected: NONE Note the following: 1. The %RECORDLABELS retrieves the RECORD member text names from the compiler symbol table and stores them into a DIM variable. The RECORD member text names are separated using a '|' pipe character. 2. The {mode} behavior values are defined as follows for the %RECORDLABELS directive. Mode Value Comment 0 - The default value of zero causes RECORD member names to be stored using the format of 'REC.MEMBER'. 1 - The {mode} value of one causes the RECORD member names to be stored without including the base RECORD label name. 3. The RECORD member names are rendered into the DIM variable using the same case sensitivity used by the PLB compiler. Example: Rec RECORD M1 DIM 1 M2 FORM 1 M3 INTEGER 1 RECORDEND ..... . RecLab %RECORDLABELS Rec . . The 'RecLab' DIM should be the same as the 'Lab' INIT. . Lab INIT "REC.M1|REC.M2|REC.M3|" . IF ( RecLab == Lab ) DISPLAY "'RecLab' equals 'Lab'" //This is expected! ELSE DISPLAY "Error: 'RecLab' NOT EQUAL 'Lab'!" ENDIF . ..... . RecLab1 %RECORDLABELS Rec, 1 //DO NOT include base Record! . . The 'RecLab1' DIM should be the same as the 'Lab1' INIT. . Lab INIT "M1|M2|M3|" . IF ( RecLab1 == Lab1 ) DISPLAY "'RecLab1' equals 'Lab1'" //This is expected! ELSE DISPLAY "Error: 'RecLab1' NOT EQUAL 'Lab1'!" ENDIF - Modified the compiler to support the URLSOURCE property for an IMAGELIST object. The URLSOURCE property is ONLY used to support PWS objects. - Modified the compiler to support the SETPROP of the IMAGESIZEH and IMAGESIZEV properties for a IMAGELIST. The SETPROP of these properties is being made to support the PWS IMAGELIST. - Modified to allow the SETPROP of the CHECKBOX property for a TREEVIEW object. The SETPROP of the CHECKBOX property ONLY takes affect when using a PWS TREEVIEW object. A SETPROP CHECKBOX operation using a Windows TREEVIEW control DOES NOT have any visual affect. - Modified the LIKE directive to give an appropriate error when the LIKE source is specified as a RECORD DEFINITION member. - Modified the compiler cross reference output to report all labels as case sensitive names. This change has been made to help support enhanced PL/B IDE operations. - Modified the GETFILE to accept the ADMIN data variable type for the {file} source variable. The GETFILE ADMIN is ONLY being implemented to determine if the ADMIN variable open status. - Added 5 new properties for the PWS objects as follows: PWS objects supporting these properties: BUTTON, CHECKBOX, COMBOBOX, DATALIST, EDITDATETIME, EDITNUMBER, EDITTEXT, FLOATMENU, GROUPBOX, ICON, LABELTEXT, LISTVIEW, MREGION, PANEL, PICT, PROGRESS, RADIO, STATTEXT, TABCONTROL, TREEVIEW, and WINDOW. ........................................................................ WEBHEIGHT The WEBHEIGHT property specifies the height property to be applied to the HTML element\object rendered at the client browser for the PL\B Web Server object. The property uses the following format: WEBHEIGHT={svarlit} Note: 1. The WEBHEIGHT may be used in CREATE, SETPROP, or GETPROP statements. 2. The WEBHEIGHT {svarlit} is formatted as a case sensitive string to allow the PLB program to specify the height property with values consistent to CSS syntax format as: CSS Syntax: auto|length|%|initial|inherit Where: auto - The browser calculates the height. length - Defines the height in px, cm, em, etc... See link: http://www.w3schools.com/cssref/css_units.asp % - Defines the height as percent of the parent container object. initial - Sets this property to its default value. inherit - Inherits this property from its parent container element. 3. See this link for more details for CSS height description: http://www.w3schools.com/cssref/pr_dim_height.asp Examples: Button BUTTON . .... . SETPROP Button, WEBHEIGHT="100px" SETPROP Button, WEBHEIGHT="15em" ........................................................................ WEBLEFT The WEBLEFT property specifies the left property to be applied to the HTML element\object rendered at the client browser for the PL\B Web Server object. The property uses the following format: WEBLEFT={svarlit} Note: 1. The WEBLEFT may be used in CREATE, SETPROP, or GETPROP statements. 2. The WEBLEFT {svarlit} is formatted as a case sensitive string to allow the PLB program to specify the left property with values consistent to CSS syntax format as: CSS Syntax: auto|length|%|initial|inherit Where: auto - Lets the browser calculate the left edge position. length - Sets the left edge position in px, cm, em, ...etc. Negative values are allowed. See link: http://www.w3schools.com/cssref/css_units.asp % - Sets the left edge position in % of the parent container element. Negative values are allowed initial - Sets this property to its default value. inherit - Inherits this property from its parent container element. 3. See this link for more details for CSS left description: http://www.w3schools.com/css/css_dimension.asp http://www.w3schools.com/cssref/pr_pos_left.asp Examples: Button BUTTON . .... . SETPROP Button, WEBLEFT="60px" SETPROP Button, WEBLEFT="10em" ........................................................................ WEBTOP The WEBTOP property specifies the top property to be applied to the HTML element\object rendered at the client browser for the PL\B Web Server object. The property uses the following format: WEBTOP={svarlit} Note: 1. The WEBTOP may be used in CREATE, SETPROP, or GETPROP statements. 2. The WEBTOP {svarlit} is formatted as a case sensitive string to allow the PLB program to specify the top property with values consistent to CSS syntax format as: CSS Syntax: auto|length|%|initial|inherit Where: auto - Lets the browser calculate the top edge position. length - Sets the top edge position in px, cm, em, ...etc. Negative values are allowed. See link: http://www.w3schools.com/cssref/css_units.asp % - Sets the top edge position in % of the parent container element. Negative values are allowed initial - Sets this property to its default value. inherit - Inherits this property from its parent container element. 3. See this link for more details for CSS top description: http://www.w3schools.com/css/css_dimension.asp http://www.w3schools.com/cssref/pr_pos_top.asp Examples: Button BUTTON . .... . SETPROP Button, WEBTOP="60px" SETPROP Button, WEBTOP="25%" ........................................................................ WEBWIDTH The WEBWIDTH property specifies the width property to be applied to the HTML element\object rendered at the client browser for the PL\B Web Server object. The property uses the following format: WEBWIDTH={svarlit} Note: 1. The WEBWIDTH may be used in CREATE, SETPROP, or GETPROP statements. 2. The WEBWIDTH {svarlit} is formatted as a case sensitive string to allow the PLB program to specify the width property with values consistent to CSS syntax format as: CSS Syntax: auto|length|%|initial|inherit Where: auto - The browser calculates the width. length - Sets the width in px, cm, em, etc... See link: http://www.w3schools.com/cssref/css_units.asp % - Sets the width as percent of the parent container object width. initial - Sets this property to its default value. inherit - Inherits this property from its parent container element. 3. See this link for more details for CSS width description: http://www.w3schools.com/cssref/pr_dim_width.asp Examples: Button BUTTON . .... . SETPROP Button, WEBWIDTH="100px" SETPROP Button, WEBWIDTH="40%" ........................................................................ WEBPOSITION The WEBPOSITION property specifies the position property to be applied to the HTML element\object rendered at the client browser for the PL\B Web Server object. The property uses the following format: WEBPOSITION={dnumnvar} Note: 1. The WEBPOSITION may be used in CREATE, SETPROP, or GETPROP statements. 2. The allowed WEBPOSITION {dnumnvar} values are defined as follows in accordance to expected CSS positioning methods supported for an HTML element. See the following URL link for more details CSS position property values. http://www.w3schools.com/cssref/pr_class_position.asp Value - Description 0 The CSS position property is set to be 'absolute' which is the default. 1 The CSS position property is set to be 'static' and the CSS margin is set to be 'auto'. 2 The CSS position property is set to be 'relative'. 3 The CSS position property is set to be 'fixed'. 4+ The CSS position property the same as the default. Examples: Button BUTTON . .... . SETPROP Button, WEBPOSITION=1 //static SETPROP Button, WEBWIDTH=2 //relative - Corrected problems where the VERB data and execution label references might not give the proper source line reference in a cross reference. - Corrected a problem where a WHEREIS or WHEREISLAST were not properly detecting the preposition between the first and second operands. This problem could cause invalid program code that would cause indeterminate program operations including a possible GPF when the invalid preposition existed. With this correction, the compiler reports a proper error when an invalid preposition is detected for the WHEREIS\WHEREISLAST. - Corrected an unexpected compiler error that could occur on a 'RECORD LIKEPTR' instruction when the newly created record was split across symbol table boundaries. The unexpected error that was fixed could occur as follow: "Invalid Data statement between LIST/RECORD at line (nnnn.) & LISTEND/RECORDEND" ------------------------------------------------------------------------------- PLB Designer - Modified to support IMAGELIST and TREEVIEW for PWF forms. ------------------------------------------------------------------------------- PLBEQU.INC - Updated for PWS IMAGELIST and TREEVIEW. - Added the descriptions for the new PWS properties named WEBHEIGHT, WEBLEFT, WEBPOSITION, WEBTOP, and WEBWIDTH. ------------------------------------------------------------------------------- PLBMETH.INC - Updated for PWS IMAGELIST and TREEVIEW. - Modified the objects to include the new PWS properties named WEBHEIGHT, WEBLEFT, WEBPOSITION, WEBTOP, and WEBWIDTH. ------------------------------------------------------------------------------- ODSBAC64.DLL - Corrected a GPF error that would occur on a Windows 10 OS system when the ODBC Administrator utility accessed the ODSBAC64.dll. This problem was occurring because the dll was not being properly generated as a 64-bit application by a newer version of the Microsoft Visual Studio. ------------------------------------------------------------------------------- SUNWODBC.DLL - Modified the ODBC driver to support a NOPROMPT flags setting. The NOPROMPT flags setting can be used to prevent a SQL Server error dialog when a SQL connection error occurs for a DBCONNECT instruction. The DBCONNECT {flags} parameter bit mask value of 0x4 causes the NOPROMPT option to be used only when a connection is made using the {conn} connection string. ------------------------------------------------------------------------------- DESIGNER.PLC - Corrected the application of a form's object prefix property to all existing form objects. - Corrected setting of the modified flag during a cut operation. - Corrected an issue that occurred when the designer's ini file did not define a default screen font. - Added logic to prevent attempts to position to a line that is less than the calculated starting line number. - Added logic to allow a "GoTo" in the SunIDE program when a form object is selected to open the form and select the object. - Corrected an XML read error during initialization. - Corrected an XML read error that occurred when an empty new form was closed and the designer was running as an IDE loadmod. - Corrected an issue in saving a form that has panels nested more than 10 deep. - Corrected opening of second form when using the Limit to One Instance option. - Modified defintions file to include the Picture and Icon properties for a Button on a PL/B web form. - Modified the add new resource function to not repeat the file selection dialog. - Corrected handling of the Font Angle property. - Added support for treeview and imagelist objects in web forms. - Added support for icons and picture resources in web forms. - Corrected an issue that could cause a PLF to be save as a PWF and vice versa when files of both type were open and a saveall operation executed. - Corrected an issue regarding a Copy function involving object that have "web only" properties defined. - Corrected minor display issues with the DesignerPortSpecific logic. - Corrected an issue in renaming an object array element. - Corrected the creation of object arrays. ------------------------------------------------------------------------------- EDITOR.PLC - Added ability to disable code folding while still showing the structure lines. - Added support logic to signify when a find next or find previous is available. - Added instructions for updating the editor control when outdated and a notification alert is displayed. - Added an EVENTQUEUE to the Strip Trailing Spaces function. - Modified the SetBookmarks function to accept single line entries. - Updated the editor configuration files with verbs, keywords, methods, and syntax changes. ------------------------------------------------------------------------------- SUNIDE.PLC - Added logic to place functions and function variables in the browse labels list and thus be accessible to the "Go to Label" function. - Modified the PosToError routine to correctly locate a "short" file name regardless of case. - The IDE is now disabled while a build is in process. - Selecting "GO TO" for an object in a plform will now start the designer and select the object. - Modified the IDE to allow files from any directory to be added to a project. - Modified the IDE to require a cross reference listing to support the label searching. - Added informative prompts and messages to inform the user of issues with the label processing. - Corrected form file detection in Find In Files function. - Added a "Labels Only" option to the Find In Files function to search for matching values in only the first column. - Corrected the parsing of file names with directories containing a space. - The IDE will now terminate if the -CFG option directory does not exist. - The SCRATCH directory is now created beneath the -CFG directory. - Added quotes around the output file before executing the SORT verb to support working directories containing spaces. ------------------------------------------------------------------------------- SUNCS21.OCX - Added a notification when a FindNext or FindPrevious are available. ------------------------------------------------------------------------------- SCHEMAEDITOR.PLC - Corrected the offset calculation when importing named io columns into Sqlio columns. - Increased the AAMDEX file name field length from 32 to 100. - Increased the ISAM file name field Length from 50 to 100. - Added a description column identifier field used during the PL/B code import. - Added validation logic for SQLIO index columns. - Added Test Prep functions for SQLIO files, indexes, and aamdexes. - Modified to assume extensions for for SQLIO files, indexes, and aamdexes if not specified. - Corrected the SQLIO column export to include the nullable option value. - Ensured all exported SQL statements end with a semicolon. ------------------------------------------------------------------------------- DBGIFACE.PLC (Graphical Debugger) - Added a clipboard Copy command to the watch window right click menu and the source editor. ------------------------------------------------------------------------------- WATCH.PLC - Modified theconfig file processing to use smaller variables to work around a runtime issue when the PLB_OPENUSEIP runtime keyword is defined. - Added a Find function to the Server Logging window. - Added the ability to perform extended selection to the Server Logging window. - Added a toolbar with Select All, Clear Selections, and Copy to the server Logging Window. ------------------------------------------------------------------------------- DBEXPLORER.PLC - Corrected an update issue on the Data tab. -------------------------------------------------------------------------------