WebHub Object Pascal Components

TtpToolButton AutoTextWidth fixed v2.170
When button has different font than form, AutoTextWidth now sets the width correctly (wide enough for larger fonts). Previously it calculated the width based on the form's canvas' font.
Recent TPack units renamed v2.170
These unit names were shortened to make them compatible with the online help system.
tpIBOCodeGenerator -> tpIBObjCodeGen
tpIBOCodeGenerator_Bootstrap -> tpIBObjCodeGen_Bootstrap
TwhBasicApp.WebRobotSession number initialized v2.170
When StreamCatcher is being used with the WebHub app, this property has always been initialized to the web robot session number used by StreamCatcher. However when StreamCatcher was not used, this property had a random/undefined value. It is now initialized to a low number which would never be assigned to on a production server running The Hub with a registered license.
Firebird / IBObjects connection unit includes TIB_Session v2.171
Updated tpIBOCodeGenerator_Bootstrap such that it includes a global TIB_Session object in the generated unit.
Improvements in unit tpIBObjCodeGen.pas v2.171
function Firebird_GetSQL_Fieldlist4Table: It was necessary to select DISTINCT field names.
Added new function, Firebird_GetSQL_FieldCount4Table, which retrieves the number of fields in a table based on the Firebird meta data.
Modified TtpCodeGenOnFieldProc to include the count of fields in the current table as a parameter. This enables code generation logic that must be based on the field count. The Firebird_GenPAS_For_Each_Field_in_1Table method passes this count forward to the TtpCodeGenOnFieldProc procedure.
Note: the whSchedule demo makes use of these code generation features.
IBObjects webdata source "First" fix v2.171
Units whibds.pas and whibods.pas have been fixed such that, at least with IBObjects v5+, they correctly draw the first record in a DataSet, both when it is initially opened and also when navigating back to the first record.
Reference IBObjects Release notes, 12/16/2010 Version 4.9 Release 12 Build 233 for BOF fix.
Unit names cleaned up for IBObjects v2.171
whibds.pas  -> wdbIBObjNSource.pas; to fix this with FuzRegex, search from the top of your project directory tree for whibds\b and replace with wdbIBObjNSource
whibods.pas -> wdbIBObjOSource.pas
wbdeIBOSource.pas -> wdbIBObjOSource.pas because it was a duplicate unit
F2H component no longer raises a dialog when running in a web application v2.171
When F2H was ported for compilation with FreePascal, dependencies on TPack units were removed. In the process, some of the subtly was lost. Now there is a DEFINE at the top that prevents the worst of the error messages from leaving a dialog box on the server screen, waiting for a human keypress.
Database-driven Select component v2.172
Removed duplicate/obsolete unit wdbLBox3.pas in favor of wdbLstBx.pas which defines TwhdbListBox and works with any query that can be pointed to by a TDataSource.
TwhdbListBox now logs a page error when the DataField or ValueField is nil due to bad fieldnames and/or mismatched SQL.
ZaphodsMap, NativeXml compile for FireMonkey v2.172
Confirmed that ZaphodsMap v1.043 compiles and works in FireMonkey applications. This is included in WebHub v2.172.
Helper functions added to ucCodeSiteInterface v2.172
New: CSSend, CSSendWarning, CSSendError. These functions do something only if the program is compiled with the -DCodeSite option.
SOAP improvements v2.172
Lines starting with // no longer stripped from response. Fix was in webApp.pas, TwhAppBase.BuiltInPage, SendStringImm.
ucBase64 encoding improved v2.172
Previously the Code64String function avoided the idea of creating a set of lines of a fixed length. That is still the default behavior but you can now pass a parameter for the maximum line length, e.g. 76 or 80 for email.
Encode/decode provided for AnsiString, UnicodeString, TBytes and PByte. Syntax details are in the online help system.
TwhMail fix v2.173
The use of the SMTPUsername and SMTPPassword feature was broken in v2.172 only. Fixed in webMail.pas (must send encoded values from UTF8 source, not from UnicodeString source).
The whSendMail demo shows how to send an email with an attachment, and this uses the latest new functions in the ucBase64.pas unit. This demo currently runs at http://more.demos.href.com/htem
TwhMailForm OnAdvise v2.173
If compiled with -DLOGEMAIL, the standard email module will automatically hook up an OnAdvise event handler which will log status information to either the usual LOG file on disk or to a CodeSite log file. For the latter to work, an additional define is required, i.e. -DLOGEMAIL;CodeSite. If you have any problems sending email messages, compile this way and check the log because it will show the email dialog. Alternatively if you have the GUI enabled, you can click the button the toolbar of the EMail Panel to show the smtp dialog in the memo.
Function for generating triggers improved v2.174
This function has been renamed to Firebird_GenSQL_TriggersForUpdateFields. If you pass a blank string for either of the fieldnames (UpdatedOnAt or UpdateCounter), zero code is generated for that field.
It should now be possible to use the code-gen routines against a database that does not contain the previously standard fields named UpdatedBy, UpdatedOnAt nor UpdateCounter.
Before-Update Triggers are not generated when both UpdatedOnAt and UpdateCounter fieldnames are blank as of v2.175.
Function Firebird_GenSQL_TriggersForUpdateFields renamed IbAndFb_GenSQL_Triggers in v2.175.
Unit tpDatabaseCredentials renamed ucDatabaseCredentials in v2.175.
FuzRegex search-and-replace script here: WebHub2174-to-2175_Delphi_RevB.fzs
Html > Decode > Count checks for two common syntax mistakes v2.174
These two mistakes are reviewed by the regex parser: (a) leading whitespace prior to starting a whteko tag, i.e. not having it in column 1 and (b) improper caps in whDroplet, whPage.., whSketch, whDoc.
New unit: tpEMailCredentials v2.174
Function ZMLookup_EMail_Credentials, documented
WebHub Component Setup EXE is now code-signed v2.174
Previously only the runtime setup was code-signed by HREF Tools Corp. Now the Components Setup is, too. This should help avoid some annoyance when downloading onto Windows8 Desktop.
WebHub components make an entry on the Embarcadero splash screen during startup v2.174
WebHub and ZaphodsMap design time packages register with the splash screen.
Separated certain functions out of ucShell and into ucShellProcessCntrl v2.174
If your custom code used any of the following functions, add ucShellProcessCntrl to your uses clause: IsProcessRunning, GetCurrentProcessID, TerminateProcessByID.
Removed CLR (Dot Net) support from ucShell.
When compiling ucShell inside FireMonkey, use compiler define FMACTIVE. Sharing a unit that requires Vcl.Forms versus FMX.Forms between the Vcl and FireMonkey frameworks is not a technique recommended nor supported by Embarcadero, and, it works when the shared code is restricted to certain features. This works fine for ucShell.
New unit: tpDatabaseCredentials.pas v2.174
Retrieves databasename, username and password for any named Database using cross-platform ZaphodsMap configuration.
The routines in ucIbAndFbCredentials.pas now use this unit (as of v2.175).
Search and replace unit names tpFirebirdCredentials to ucIbAndFbCredentials within uses clauses, if your code has calls to ZMLookup_Firebird_Credentials and are upgrading to v2.175.
TwhDatabaseIterator.OnDecideHTMLSize event added v2.174
Hook this event up if you want to override the HTML size= and maxlength= attributes within an InstantForm used for data entry.
For usage, see the webhubdemos source, revision 966+, whSchedule project.
Includes ZaphodsMap v1.043 v2.174
There have been some tiny improvements to ZaphodsMap for Delphi XE3 and FireMonkey. No interface changes at this time.
ucExcept unit no longer included in TPack v2.175
HREF Tools published ucExcept.pas with an MIT-style open-source license since 11-Apr-2003; customers may continue using it by saving the file to their own source tree prior to upgrading to v2.175.
The EurekaLog product is far superior and we recommend all customers investigate that, or MADExcept, as alternatives.
Syntax report gives regex hint upon mismatched parentils v2.175
The Html > Decode > Count report will give you a hint for use in FuzRegex if you have more open-parentils than close-parentils in a WHTEKO file. For anyone wanting to use this idea with an older version of WebHub, here is the expression: \(~[^)]+\( That will find you open-parentils followed by another open-parentil prior to being closed.
INPUTTEXT: parsing of extra attributes
Note: To use INPUTTEXT with HTML 5 attributes including the popular placeholder attribute, pass the additional attributes after a vertical-bar separator.
Here is the regex that you can use in Fuz to see whether you have any of these in your *.whtkeo files:
In very old versions, you had to scramble things to make the double-quote end up in the right spot. OLD: (~inputtext|inPetname,15,25," placeholder="Jett~) NEW: (~inputtext|inPetname,15,25,placeholder="Jett"~)
For an example, see whFormPosting.whteko under webhubdemos.
NB: IE 9 does not support the placeholder attribute yet. (! ! !) Firefox and Chrome do support it. Visit html5test.com to find out how well your browser supports HTML5, and to check the status for other popular browsers.
Code-generation of edit-instant-form supports placeholder attribute v2.175
Compile with v2.175 and use whdemo_DMIBObjCodeGen.pas from webhubdemos project, revision 987+.
Code-generation of edit-instant-form supports readonly attribute v2.176
New event: OnBeforeFinish for grid and scan components v2.176
Fewer compiler hints for XE3 v2.176
New procedure IbObj_PrepareAllQueriesAndProcs v2.177
Declaration: procedure IbObj_PrepareAllQueriesAndProcs(InOwner: TComponent; cn: TIB_Connection; tr: TIB_Transaction; sess: TIB_Session);
Sample usage: IBObj_PrepareAllQueriesAndProcs(gCNF_Sess, gNF_Conn, gCNF_Tr, gCNF_Sess); // uses ucIBObjPrepare
Purpose: Assign TIB_Connection, TIB_Transaction, TIB_Session for all IBObjects components nested within a given Owner such as a DataModule or TIB_Session.
Exception raised when Zaphods Map env var blank v2.177
For systems where Zaphods Map env var is blank from the point of view of the running WebHub components, an exception will be raised. Workarounds for fixing this may include: remove UAC from Windows 7; Run (your custom WebHub Application) -As-Administrator.
Globals\ForceEnvOptionsUpdate supported v2.177
For XE2 and XE3, Globals\ForceEnvOptionsUpdate set to 1 in registry when paths updated.
Reference http://docwiki.embarcadero.com/RADStudio/XE2/en/Release_Notes_for_XE2
WebHub DB package builds with TeeChart Pro v2.178
WebHub Components Setup fixed to echo your TeeChartPro package name to WebHubDB_Steema.inc automatically.
Workaround for earlier versions e.g. 2.177: after running WH Component Setup, edit the pkg_src\WebHubDB_Steema.inc file. Replace Tee, with Tee916, for XE2.
Log incoming form data v2.179
When compiling with codesite, the request query string plus incoming form data is now logged. Source is in htWebApp.pas.

The Hub, WebHubAdmin, ZMAdmin

SendFileIIS safer v2.170
The WebHub Components, SendFileIIS method, check that the file exists prior to asking the runner to send it. If the file does not exist, a page error is generated. Page errors are visible in the application error log file.
New URLs for monitoring, old-ipc v2.171
In all examples below, replace 'hubvers' with your HubAppID. For these special pages to function, you must have them defined as part of your HubApp. They are included in HubVersion.whteko as of 25-Jul-2012.
?hubvers:pgRemoteCheckNCT : returns Number of Connected instances as Total
?hubvers:pgRemoteCheckNCA-appid : returns Number of Connected instances for the given AppID
Example: http://www.href.com/scripts/runisa.dll?hubvers:pgRemoteCheckNCT
Example: http://www.href.com/scripts/runisa.dll?hubvers:pgRemoteCheckNCA::HREFSite
New URLs for monitoring, new-ipc v3.171
NB: this version of the hub does not run a hubapp but can still answer a few tiny questions. Use 'h' as the placeholder for the Hub application identifier. There is no need to use HubVersion.whteko for Hub v3.x.
?h:nct : returns Number of Connected instances as Total
?h:nca-appid : returns Number of Connected instances for the given AppID
Real uses of nct are on href.com under the lower table, "Versions in Production", column "Modules."
Delphi XE3 supported v3.174
WebHub applications can be compiled with Delphi XE3 for win32 and win64 as of v3.174, 6-Sep-2012.
WebHub Runtime Setup on clean server v3.177
A problem has been fixed for this situation: install onto clean machine where desired Zaphods Map root folder does not pre-exist. In that case, the Setup had incorrectly saved the setting named WebHubRuntimeDataPath as d:\AppsData\WebHub. This was an inconvenience when trying to use a different folder for WHCentralInfo.xml, WHNetworkInfo.xml, etc.
Hub and WebHubAdmin binaries compiled with XE3 v3.177

WebHub Runners

Runner SendFileIIS safer v2.170
Runner does not attempt to send files that do not exist, for example, due to old webrobot requests for invalid PDF files. Previously the runner would make the attempt and then raise an exception within the ISAPI DLL.
When the filespec is invalid, the runner sends zero response to the http client. Web browsers will eventually timeout and may see this error in Firefox "The connection to the server was reset while the page was loading." This should help webrobots decide to stop pursuing such invalid URLs.
Version response reports Runner ID when disabled v2.170
When you are not expected to see the version response disabled, the usual problem is (a) there is no runner ID in ZMAdmin for the runner filespec (case sensitive); or (b) the runner is unable to load the configuration files due to insufficient Windows permissions. Details for required permissions vary by operating system and whether you are testing locally or over a network.
Runners compiled with Delphi XE3 (D17) instead of XE2 v2.175
Hub and WebHubAdmin compiled with Delphi XE3 v2.177
Where used, EurekaLog is version 7 rather than version 6.