Build 06 (4/20/2006)
- fixed a bug in XXDTSearch whereby you could not modify a line that ended with the word "property"
    [e.g., the following line in the XXFWUtil.VCX/cusSettingsVFPTable::zReadMe() method:
          "record in THIS.icDataSource is loaded to a custom property "]
- corrected issues in the XXFWPick.VCX/frmPicklist::cmdOK.Refresh() method
- no longer UPPER()-casing the .icDataSource property in the XXFWNTDS.VCX/ctrDataSource::Init() event-method
- replaced the duplicate "ASORT(laFields, 1, -1, 0)" lines in the XXFWNTDS.VCX/cusDSBehaviorSPT::FetchData() method with the following lines:
  - ASORT(laFields1, 1, -1, 0)
  - ASORT(laFields2, 1, -1, 0)
- enhanced the comments in X5PItems.Prg
Build 05 (4/15/2006)
- in XXFWData.Prg, corrected problem with the ULH_UUIDNA field not being correctly populated in the following two (2) views:
    - v_LoginHistoryOneUser
    - v_LoginHistoryAllUsers
  now assigning a DefaultValue for that field
- removed erroneous NOT from A.Prg that caused VFP9-SP1 not to display the correct _Screen.Caption
- corrected code in the following two methods of the XXFWControlBehaviors.VCX/cusRequiredControl class:
  - ContainerTrue()
  - ContainerFalse()
- moved an UPPER() in the XXFWPick.VCX/frmPicklist::SetupRuntimePicklistForm() method
- fixed a bug in the XXFWFrm.VCX/frmStandby::Init() event-method that was triggered when the passed
  message was too long, thus overflowing the size limit of the label's .Caption
- replaced the incorrect text "ctrBOMgr" with the correct text "ctrBusinessObjectManager" in:
  - the property description for the custom XXFW.VCX/frmData.icBOMgrClass property and in
  - the XXFWNTBO.VCX/ctrBusinessObject::zReadMe() method
Build 04 (4/06/2006)
- now installing CalendarD.BMP to the Graphics\PreXP sub-folder
- fixed bug where specifying last day of week in a calendar-enabled textbox (default keys are K,k) returned the *first* day of the week -- not the last -- when the first day of the week was set to Sunday (day 1)
- if the DeleteAction() call in the DeleteCurrentRow() method fails, data-entry grids in n-Tier forms now:
  - display a message (specified in the message package object) to the user
  - no longer cause the form to go into "EDIT" mode
- moved duplicate IF...ENDIF check to the correct place in the XXFWNTDS.VCX/ctrDataSource::Validate() method
Build 03
- added code to colBase::Init() to ensure that XXFW.VCX is in the SET
CLASSLIB list
- fixed bug in several BO_SemaphoreLock methods, where lcSL_Context doesn't
always get set properly
- modified the update of cusDataPackagerXML::PopulateDataSet() made in
2005.06.07.12 to fix a problem with specifying the ALIASes to whose record
pointers are saved/restored
Build 02
- fixed bug in the new cusMenu::AddUserNametoLogOutOptionOfFileMenu()
method, that causes a "Menu has not been defined with DEFINE POPUP" error in
some INTL-enabled scenarios
- updated cusUserPrefs::ResetAllPrefs() to handle "ALLUSERS" scenarios where
Usr_PK is of Integer data type
- fixed bug in several of the BO_SemaphoreLock::SUnlock_*...() methods, where
some of the lcSL_* variables were not getting set properly in some scenarios
- modified tbrSCADONav.cmdNext.SetExprProps()/cmdPrevious.SetExprProps() to
change the hotkeys from Ctrl+UpArrow/Ctrl+DownArrow to Ctrl+LeftArrow/Ctrl+RightArrow,
so as to not conflict with a typical AppConfig "PageNavigationKeyCodes" setting
Build 01
- modified frmPicklist::EmptyPicklist() to save/reset the icMainAlias
properly
- updated the default value for grdPicklist.ilAnyDeSelected from .T. to .F. in
the Properties Sheet
- re-fixed a bug in XXERROR.PRG that resulted in some error text not being
included in GenerateBasicErrorText()
- changed the VARTYPE(loRegExp.Multiline) test in X8RegExpTest.PRG on the
TYPE("loRegExp.Multiline")
- added a missing SELECT (m.lnSelect) to txtPicklistValid::Refresh()
Jun 07, 2005 build
=================================================
Build 12
- modified cusDataPackagerXML::PopulateDataSet() to restore record pointers
irrespective of the THIS.inEmptyDateTimeBehavior value, because the
XMLAdapter.ToXML() method sends the cursor to EOF()
- modified cusHyperlinkTextbox::ApplyHyperlink() to set the hyperlink
label.BackStyle to 0
Build 11
- fixed 3 bugs in ctrDataSource::FetchFieldsForOnePK() where the PK field
wasn't always processed properly and the field list memory variable wasn't
referenced consistently
- fixed a bug in XXWBBODS.PRG when all 8 parameters are passed, to set the
BOClassName properly
- split new grdDataEntry::Init() code introduced in Build 02 into a new
SetDefaultPropertyValuesNT method, making it easier to augment/override that
action
- modified ctrDataSource::FetchFieldsForOnePK() to support AS fields in the list
- modified frmData::LoadBOMgr() and Destroy() to do a more consistent job of
handling the "shared BOMgr" behavior
Build 10
- enhanced X8BEALL.PRG to expand tcSourceClass to tcInclBaseClasses and add
new tcExclBaseClasses
- re-fixed a bug in chkBase::Valid(), where the IF NOT VARTYPE(m.loActiveForm) =
"O" should be IF VARTYPE(m.loActiveForm)
- fixed problem in cusSettings::UpdateCurrentRecord() where the
App_ItemDescription field was not being saved properly in a default oAppInfo
implementation
- modified frmData::ORCleanup() to not release THIS.ioBOMgr, but rather leave it
around until frmData::Destroy() calls its ORCleanup() and then releases ioBOMgr
- enhanced frmData::SaveMessageOnFailure() and the (XXFWDATA.PRG-generated)
VMP_RI/VMP_RI_Error Stored Procedures to give more/better information in some
Trigger-failure scenarios
Build 09
- fixed a bug in chkBase::Valid(), where the IF NOT VARTYPE(m.loActiveForm)
= "O" should be IF VARTYPE(m.loActiveForm)
- modified the ProgrammaticChange() of xxxBase classes to suppress the
(redundant) call to THIS.OnChange() when the KeyPress event is in the stack
- modified frmData::SetInitialMainAliasRecno() to insert a missing ".ioMainDS"
object in one of the CASE results
- fixed a bug in frmData::DeleteAction(), where an UPPER() string was being
compared to a string that was most likely mixed case, in the first CASE of the
first DO CASE in that method
Build 08
- modified A.PRG/XXPROCDT.PRG to kill the current VFP session when you go to
the VMP Downloads page when a newer build is available, minimizing the
possibility that when you do the install, an existing VFP session will prevent
VMP framework files from being copied
- modified txtPicklistValid::MenuLookup() to suppress the normal validation no
matter what, including when it is called from the OnButtonClick
- modified the VMP Application Setup Wizard to respect your procedural hooks (if
any) called from XXFWDATA.PRG, to update the AppConfig/AppInfo default settings
- modified the Developer's Toolbar/Properties dropdown to handle a grid whose
AllowCellSelection = .F.
- modified pgfDEForms::OnUpdateFormOnSave() to add an IF..ENDIF left out of the
.07 modification, to test for a Save subsequent to an <Add>
- modified grdBase::SetinCurrentRecno() to add THIS.Refresh() from the list of
methods that don't cause THIS.ClearFindTextbox() to fire
- enhanced pgfPageRefresh::ResetPageRefreshIndicator() to accept an optional
toPage parameter and therefore only reset the page refresh indicator for that
page
- enhanced grdBase::PushPopRecordSource() to force the tlNoDoScroll parameter to
.T. whenever THIS.ShellRequery() is in the execution stack, indicating that the
grid.RecordSource is being completely rebuilt/refetched
Build 07
- modified cusUserPrefs::UpdateBuffer() to check whether the User
Preferences view is open
- modified cusPushPopOrder::Init() to fix a problem that can result in the
restored tag being set to DESCENDING
- modified X8ShellExecute() to do a better job of respecting the
X8FindExecutable() association for web browser tcURLorFilenameS
- replaced the grdPicklist reference in frmPick::SetRecordPointerOnAdd() with
the correct grdPicklist1
- modified pgfDEForms::OnUpdateFormOnSave() to respect a page refresh expression
specified at the page level
- modified frmData::SaveAction(), SaveMessageOnFailure() to create and populate
a private pc_SaveActionDebugging_SectionThatFailed variable, containing
additional debugging information that is included in developer messaging and the
ErrorLog.ER_LstMemo entry
- modified pjhVMP::icFileName_Assign() to handle .H files
- modified XXWBRI to fix a problem when navigating from an AllowCellSelection=.F.
row
- fixed a typo in txtPicklistValid::SuppressCustomValid(), in the expression for
the first IF statement
Build 06
- modified the PopulateRITable local proc of XXFWDATA.PRG to properly set
the XRI_UPDATE_TYPE to "C" for the Users->IUDLog record
- updated the Build 05 modification to ctrDataSource::DeleteAction() to take
child/grandchild/etc.-specific action
- modified the XXDTHACK form to fix a problem running in VFP 8, where Anchor
resizing is not available
- added a Language dropdown to the XXDTMSGS interface so you can view/edit the
c<Language> fields
- fixed a bug in ctrDataSource::ValidateControl() that causes it to RETURN .T.
when there is more than one rule object and one object evaluates to .F. but the
last such rule evaluated RETURNs .T.
- updated XXDTSearch to include .SPRs in the search thru source code, making it
more useful when searching legacy code
Build 05
- modified cusCalendarTextbox::SetupHotkeysAndToolTipText() to fix a problem
in INTL-enabled apps, where a recent modification incorrectly refers to a
toControl object
- modified ctrApp::ReindexTables() to post any pending changes in the UserPrefs
view buffer when the reindex will be handled by SDT::Reindex(), which would
otherwise just TABLEREVERT() that buffer
- modified cusChildCursorSvc::GenAndPopKeys() to properly restore the DESCENDING
status on SET ORDER TO
- modified ctrMover::OnRefresh() to "refresh" the AutoHideScrollbar property
- reset to default the frmReport::StoreActiveFormToCallingForm() method to
eliminate the NODEFAULT
- modified pgfDEForms::CommonPageActivate() to properly respect scenarios where
the ComparisonValue is set at the page level
- updated frmAbstractCalendar::SetInitialVisibleLocation() to support
SDI/Top-Level Form scenarios
- re-factored the VMP_RI... Stored Procedures (XXFWDATA.PRG) to replace the ON
ERROR error handling with TRY/CATCH error handling
- enhanced the DeleteAction method of BOMgr, BO, and DS to pass the message on
to sibling and child BOs, but siblings do nothing with the message, and children
only execute a FetchClear()
Build 04
- modified ctrDataSource::ValidateControl() to make additional logic checks
when storing the iaVCInfo array
- added a missing LOOP command to cusSettings::LoadPropertiessFromDataSource()
to the initial IF..ENDIF block of the SCAN..ENDSCAN, to properly respect the
optional tcSetting parameter
Build 03
- adjusted the .02 modification to grdDataEntry::Init() to handle those rare
scenarios where THIS.ioBO isn't set for a data-entry grid on an n-Tier form
- adjusted the .02 modification to frmData::SetInitialMainAliasRecno() to refer
to frmDEGridNav.ioPicklistGrid rather than THIS.grdPicklist1
- modified frmBase::ProximityLabel() to add an optional parameter that supports
a Proximity Label that is currently set to invisible
- modified the Validate(), ValidateControl(), and ValidateFieldValue() methods
of ctrDataSource to validate custom rule objects before the corresponding .DBC-based
field/row rules
Build 02
- moved the DODEFAULT() in frmData::Destroy() to occur before the block of
code to call THIS.ioBOMgr.ORCleanup()
- added TTOC(DATETIME()) to the Caption of the "System Error" form generated by
XXERROR.PRG
- modified XXFWDATA.PRG, cusForms::SetCalendarBehaviors(),
cusCalendarTextbox::SetupHotkeysAndToolTipText()/KeyPress(),
ctrCalendar::SetupHotkeys()/KeyPress(), STRINGS.DBF, XXFWDATA.PRG to respect
AppConfig records for "NextDayKeys" and "PrevDayKeys" -- DO XXDTMEST
- modified frmBase::StoreActiveFormToCallingForm() and frmBase::Activate() to
only store THISFORM to THISFORM.ioCallingForm.ioCalledForm when THISFORM is
modeless, including creating a new frmBase::StoreTHISFORMToCalledForm method
- modified grdDataEntry::Init() to automatically set parent-child properties
when THIS.ioBO is set (n-Tier scenarios)
- fixed a problem in XXTOOLS.VCX/cusCreatePopCode with Currency fields in some
tables with few/small fields
- fixed frmXXWBRI::UpdateTriggers() code that can remove the VMPRI() trigger
call improperly in some scenarios
- modified frmPicklist::InitialFormSetup() to handle non-character
tuInitialValue
- modified frmData::SetInitialMainAliasRecno() to handle additional n-Tier
scenarios for frmPicklist and frmDEGridNav forms
- fixed logic in pgfDEForms::OnUpdateFormOnCancel() to do a better job of
resetting the page refresh indicator
Build 01
- modified the SP_VMP_IUDLog() Stored Procedure in XXFWDATA.PRG to properly
exclude non-"regular" fields from IUD_UFields population
- modified cusShortcutMenu::DevDiagStuff() to pass the 2nd parameter to the 2
calls to X3TAGXPR()
Mar
18, 2005 build
=================================================
Build 16
- removed the txtPicklistValid::Init() modification made in the .13 refresh,
to revert to the behavior where the txtPV is not automatically disabled for
those specified conditions
- modified frmPicklist::InitialFormSetup() to not carry the Look For string over
if it is the explicit string "!NONE!"
- replaced the hard-coded reference to THIS.txtPV in
ctrPicklistValid::OnPicklistvalidTextboxInteractiveChange() with the proper toPV
reference
- added OnRefresh method to frmBase, pgfBase, ctrBase and eliminated all Refresh
code, to prevent redundant Refresh calls, as explained in the header comments of
the new OnRefresh methods
- modified cusHyperlinkTextbox::ApplyHyperLink() to do a better job when the
hyperlink text is longer than the textbox.Width accommodates
- modified ctrBusinessObjectManager::RemoveBusinessObject() to fix an error when
deleting the BO from the iaBO array
- modified ctrDataSource::ORCleanup() to call THIS.Close() unconditionally
- modified txtPicklistValid::Destroy() to close the unique-use cursor in n-Tier
services scenarios
- modified XXOpenDataBase.PRG, XXOpenTable.PRG, and cusDBCSvc::OpenData() to
support passing the tlExclusive parameter to XXOpenDatabase() as .NULL.,
indicating that it doesn't matter if the specified database is already open for
SHARED or EXCLUSIVE use
Build 15
- modified XXFWMAIN.PRG to set the refresh number to 15 rather than the
bogus 10 that was left in while testing prior to Build 14
Build 14
- modified ctrDataSource::FetchList/FetchData to reverse the FetchListAfter/FetchListBefore
modification made in the .13 build (thus preserving the old behavior)
- modified ctrDataSource::FetchList/FetchData to insert new
FetchListAfterSQLExecute/FetchDataAfterDSBehaviorAfterFetchData shell methods
(thus providing for the new functionality in the .13 refresh, while preserving
the old behavior)
Build 13
- updated the "IFND" IntelliSense record (XXDTFoxCode.PRG) to handle more
LPARAMETERS statements, and to insert the m. qualifier
- removed the "BOMB" command from NTDECUSC8.SCX
- fixed bug in ctrPicklistValid::OnPicklistvalidTextboxInteractiveChange() to
refer to THIS.txtPV.ilAlternateLookup rather than THIS.ilAlternateLookup
- modified frmPicklist::GotFocus() to "carry over" the tuInitialValue to
txtFind.Value when the initial controlling column is the one specified in
grdPicklist.inInitialControllingColumn
- fixed bug in frmData::DeleteAction() to replace the erroneous luPKValueMV
references to luPKValueMA
- re-factored frmData::UpdateFormOnCancel() to message the OnUpdateFormOnCancel
of ioDEPageFrame, data-entry grids, ctrDERegisteredComposites when pcMode =
"ADD"
- modified the WINMSG local procedure in X3MSGSVC.PRG to handle scenarios where
tuVariable is not a Character string
- modified the Create_oAppConfig_Object procedure in XXFWMAIN.PRG to add the
.DBF extension to tcAppConfigFile if necessary
- un-commented the SET CONFIRM code in txtPicklistFind::GotFocus/LostFocus, that
somehow got commented sometime after it was added to the .08 refresh
- modified ctrSelCriteria::SaveControlValues()/RestoreControlValues() to handle
scenarios where there are no SelCriteria controls at the ctrSelCriteria level
(such as when Sel Criteria controls are all in containers in the ctrSelCriteria)
- modified ctrDataSource::FetchList() to move the call to FetchListAfter() to
immediately after the call to THIS.SQLExecute(), and before FetchListPost()
- modified ctrDataSource::FetchData() to move the call to FetchDataAfter() to
immediately after the call to THIS.ioDSBehavior.FetchData(), and before
FetchDataPost()
- modified frmData::RequeryShowingDataEntryGrids() to immediately RETURN in
n-Tier scenarios, since middle-tier objects handle refreshing/requerying data
- modified txtPicklistValid::Init() to start out disabled in unbound scenarios,
to prevent such a control from "flashing" from enabled to disabled on loading a
form with "blank" data
- modified cmdPicklistValid::Init() to start out disabled, knowing that it will
be refreshed on form instantiation, whereupon its Enabled will match its sibling
txtPicklistValid
- modified edtBase::AutoExpandOpenTable() to ignore VMP wizard/builder/tools
usages, fixing a problem with XXWBDEFV, on selecting the <Post> button
Build 12
- modified ctrSelCriteria::AllEmptyControlValues() to correct 2nd CASE,
which calls nested selection criteria containers
- modified ctrSelCriteria::Init() to add an additional BINDEVENT() to handle
member.Value changes via a manually-invoked picklist of a txtPicklistValid
- modified ctrPicklistValid::ClearControlValues() to take specific/custom action
that covers (n-Tier) scenarios where there is no cusSelCriteria object attached
to the txtPicklistValid instance
- modified VMDVRULE.PRG to correct the reference to the SP_VMP_IUDLog() function
in the Delete Trigger for the Cities table
- added NTDECTY4.SCX form to the NT example app
Build 11
- modified the Destroy and ORCleanup of most xxxBase classes, and
frmData::RegisterDataEntryGrids and grdDataEntry::ORCleanup to handle
RemoveObject() scenarios
- modified frmThermoBar to restore the chiseled 3D look by setting
frmThermoBar.Themes to .F., and to adjust the size of the colored bar
programmatically
- set the Enabled to .F. of cmdSave and cmdCancel on frmDEGridNav2Pages so the
initial focus is handled correctly
- modified frmData::DeleteAction() to cover additional scenarios
- modified cusMenu::UpdateWindowMenuItem() to additionally call SetMarkOfBar(),
now that bars are released and rebuilt from scratch
- modified XXSYNCPK.PRG to handle scenarios where the Primary Key index tag is
DESCENDING
- modified txtPicklistValid::MenuLookup() to not set ilSuppressValid to .NULL.
when the picklist has been called from the button in a ctrPicklistValid
- updated the interface from a MESSAGEBOX() to a VFP form when the "auto daily
build check" discovers that a newer version of VMP is available
- added missing Spanish translations to MSGSVC.DBF/STRINGS.DBF, courtesy of VMP
developer Jorge Mota
- modified ctrSelCriteria::AllEmptyControlValues() to handle scenarios where
there are no members directly in the ctrSelCriteria
Build 10
- modified frmReportCatalog::Load() to fix a bug that prevents any reports
from being loaded when the ReportCatalog is a local/remote view
- modified frmReportCatalog.pgfReports.Page1::Activate() to prevent a
second/duplicate call to THISFORM.UpdateReportsList() on form instantiation
- modified edtBase::AutoExpandOpenTable() to support scenarios where MemoAE is a
remote view, and to only create one MemoAE cursor per form, for all editboxes
- modified cusShortcutMenu to fix a problem when XXIUDLOG.PRG/SetDatabaseFromEnvironment
finds no IUDLog table
- modified XXDTSearch to correct the Match Whole Word behavior in some scenarios
where the search string is all digits
- modified frmBase to make the icAppConfigFile property Protected, and updated
frmBase::zReadMe/cusStandaloneForms::Setup2() accordingly
- modified frmData::SaveMessageOnFailure() to replace VARTYPE(gaVMPRIErrors)
with TYPE("gaVMPRIErrors")
- modified pgfPageRefresh::CommonPageActivate() to not perform its SetFocus
behavior when called explicitly from THISFORM.UpdateFormOnNav()
- modified the XXDTAppConfig.PRG interface to make the necessary DODEFAULT() so
that the selected file is properly displayed
- modified cusMenu::UpdateWindowMenuItem() to release the bar before (re)defining
it, so that VFP resizes the width of the bar to match its prompt text
- modified cusGridPreference::RestorePrefs() to correct a problem when a
Column.ColumnOrder is updated in the Designer
Build 09
- modified pgfPageRefresh::ManualPageRefreshAction() to fix a bug introduced
in 2005.03.18.05 that resulted in the current active page being refreshed twice
during THISFORM.UpdateFormOnNav(), most problematic that the OnPageActivate/ShellRequery
of any grids/registered composites on the active page fires twice
- modified pgfDEForms::CommonPageActivate() to handle initial activation on
instantiation of Page1 on non-frmDEGridNav2Pages forms
- modified cusUserPrefs::SetInitialDesignedValues() to explicitly set the
Prf_ItemDescription to keep remote databases happy
- modified grdBase::SetUserSecurity() to respect NO ACCESS columns when
THISFORM.ilReadOnly = .t.
- modified cusDSBehaviorSPT::SaveActionInsert() to wrap the INSERT in a
TRY/CATCH block, and to speed up the loop that stores local variables
- modified XXPROCDT.PRG/VMPRequirementsAndAssumptions to check for an
empty/invalid _Builder setting
- modified XXFWCOMP.VCX/ctrGetFile.cmdGetFile1.Click() and
ctrGetFile.txtFileName1.ProgrammaticChange() to fix 2 problems with displaying
the selected file properly and to never store the X7DISPTH() version of the file
to cmdGetFile1.icSelectedFile
- modified XXWBUpsize.PRG and XXWB.VCX/frmXXWBUpsize to handle more scenarios
where the path to the VMP database contains embedded spaces
- modified XXCreateDBCWithRemoteViewsOfVMPSystemTables.PRG/Create_MemoAE_Views()
to swap the remote MEMOAE view definitions in the IF m.llMAE_UsrFK
- modified grdBase::SeekValue() to not refresh the grid until after any seek tag
has been reset
- modified the Refresh() of cmdDEGridAdd, cmdDEGridDelete, cmdDataGeneral,
cmdBase to respect FULL ACCESS on a ReadOnly form when the new AppConfig/"RespectFullAccessControlsOnReadOnlyForms"
record has been set to "1"
- modified frmReport::ReportFormCommand() to force SET REPORTBEHAVIOR 80 when
the clauses include TO FILE .. ASCII
- modified XXSQLEXE.PRG/XXRQUERY.PRG to do a better job of detecting n-Tier
scenarios, and respecting the ConnectionObject.ilCheckHandleOnEveryGet, rather
than testing the connection handle locally
Build 08
- modified frmData::RemoteRefresh() to update an loForm reference to
loCallingForm
- modified ctrApp::InstallGlobalErrorHandler() to give an ASSERT if the required
"Fatal" messages are missing from the app-specific MSGSVC.DBF
- modified XXFWDATA.PRG/IndexXXTable to fix a bug when the VMPRI table is not
open and its indexes are to be created
- modified the WinMsg local procedure in X3MSGSVC.PRG to replace the 2 luRetVal
references with the proper lcRetVal references
- modified grdBase::MakeCurrentRowTopmost() and ChangeDisplayOrder() so that
ChangeDisplayOrder() calls THIS.RealRefresh() when THIS.MakeCurrentRowTopmost()
finds that THIS.RelativeRow = 1
- modified txtPicklistFind::GotFocus/LostFocus to SET CONFIRM ON while focus is
in that textbox
- modified XXDTExplicitPEM and XXDTCountCode to respect the "Search files marked
Excluded" checkbox
- removed cmdBase::MouseMove method code
- modified XXAPPINF.PRG to insert two missing SELECT (m.lnSelect) lines
- modified cusForms::ActiveControlValid() to improve performance
- modified a CASE in grdGeneral02::Init() to fix a problem restoring the sort
order when the Column1 is the controlling column
Build 07
- modified frmBase::GetProximityLabelText() to set the worst-case-scenario
text for local views/contained tables
- modified cusUserSecurity::UserBelongsToGroup() to fix a bug when passing the
optional tuUsr_PK parameter as an Integer
- made numerous updates and a couple of bug fixes to
BO_IUDLog::PopulateIUD_UFields()
- added a CASE to cusDSBehaviorSPT::SaveActionUpdateRecord() to handle ISBLANK()
logical fields
Build 06
- modified ctrDataSource::ApplyDefaultValues() to handle scenarios where a
Date is used as the DefaultValue for a DateTime field, and vice versa
- updated VMP_RI_Open Stored Procedure (XXFWDATA.PRG) to use TRY/CATCH rather
than ON ERROR error trapping, to fix a problem in some scenarios where
VMP_RI_Open() fails and VFP aborts the entire VMP_RI stored procedure
- updated VMP_RI and VMP_RI_Error Stored Procedures (XXFWDATA.PRG) to generate
improved gaVMPRIErrors messaging when the Child Table cannot be opened
- modified frmData::RemoteRefresh() to immediately RETURN .f. when a form
discovers that a called modal form executed the SaveAction that precipitated the
RemoteRefresh
- modified pgfPageRefresh::CommonPageActivate() to prevent a SetFocus when the
current active form is not THISFORM
- modified cusDataSourceBehavior::PopulateIdentityPK() to add a missing
THIS.PARENT qualifier
- modified cusDataSourceBehavior::Close() to not close the parent
DataSource.icTableName
- fixed bug in XXFWDATA.PRG/SP_VMP_IUDLog() that caused some Memo fields to not
be logged properly
- modified BO_IUDLog::PopulateResultCursor() to fix a bug when the logged table
contains more than one Memo field
- modified XXSYNCPK.PRG to properly reference the taUpdatedRows array in order
to update its contents
Build 05
- fixed bug in cusLockout::GetLockout() to refresh the oAppInfo.DataFactor
value before checking its value, includes enhancing
cusSettings::LoadPropertiesFromDataSource() to accept an optional tcSetting
parameter
- modified pgfDEForms::CommonPageActivate() to respect a Page-level
iaPageRefreshComparisonValueExpression setting, also
frmDEGridNav2Pages/frmDEGridNav2Pages02::Init to suppress the
ShellRequeryMainViewAlias for Page1
- modified frmData::UpdateFormOnNav() to defer to the CommonPageActivate of any
pgfDEForms instance rather than always calling ShellRequeryMainViewAlias()
directly in scenarios where the form contains a pgfDEForms (such as
frmDEGridNav2Pages forms)
- modified frmBase::Load and frmBase::Show to reset the setup for the sizer
control when/if the form Height/Width are changed during instantiation
- modified txtBase/spnBase::Click to ensure that the ilMouseDownOnGotFocus
property exists
- modified XXFWDATA.PRG to add 2 index tags to the VMPRI table, and adjust the
VMP_RI Stored Procedure to Rushmore Optimize the SCAN FORs on Novell networks
running VFP 9.0
- modified grdBase/grdBase02::AdjustColumnWidthsToExactlyFillGrid() to fix a bug
in the comparison of the available width to the Percentage factor
- fixed bug in XXSYNCPK.PRG that can fail to restore SET DELETED
- modified XXDTBuildXXLIB.PRG to update the list VMP framework files pulled into
the XXLIB.EXE
- modified frmAbstractCalendar::OKAction() to move the
ActionOnCalendarFormSelection behavior to cusCalendarTextbox::DoCalendarForm()
- modified the Work Areas Viewer to support VFP 9.0+ BINARY index tags
- modified XXSyncPK.PRG to support an additional tlHighestChar parameter, and to
deal with tables whose PK field is AutoInc-generated
- modified cusPushPopSQLThermo::Init() to add explicit support for a docked
Command Window
- modified the RightClick of these VMP base control classes to add a default
Shortcut menu behavior: spnBase, chkBase, cboBase, lstBase, opgBase
- modified frmBase::ProximityLabel() to not EXIT when a qualifying label is
found just above the passed toControl, but rather to wait and see if label is
found just to the left of toControl
- modified cusShortcutMenu to add 2 new Diagnostic Mode options, for displaying
field/record history (from IUDLog)
- added the IUD_DT index tag to IUDLog table: XXDTES("XXFWDATA.PRG","IUD_DT")
- modified SP_VMP_IUDLog_ActionOnCheckFileSize (in XXFWDATA.PRG) to also execute
any external IUD_CFS.PRG: _VFP.Help(FULLPATH("VMPHELP.CHM"),,"SP_VMP_IUDLog_ActionOnCheckFileSize
header comments")
- added IUD_Stack, IUD_SYS0, IUD_DS fields to the IUDLog table, and an index tag
on UPPER(IUD_SYS0): XXDTES("XXFWDATA.PRG","IUD_Stack M")
- fixed bug in XXFWDATA.PRG/IUDLogStoredProcedures that resulted in all CRLFs
being removed from the Stored Procedures when the SP_VMP_IUDLog* Stored
Procedures got removed
- replaced the SP_VMP_IUDLog_Suppress() Stored Procedure with separate
SP_VMP_IUDLog_RW() and SP_VMP_IUDLog_XLogging() stored procedures
- added support for creating a semaphore file to suppress the population of
IUD_Exception and IUD_Stack except when desired during debugging
Build 04
- modified the Audit Trail/Logging feature (XXFWDATA.PRG) to rename some
fields, add the IUD_UFields field and its population logic, switch the field
value storage to XML, and improve performance -- this feature is now considered
"finished"
- fixed a bug in XXDTSearch that prevented RightClick on the Project/Folder
dropdowns from working properly
- added code to frmSelCriteria::AddSelCriteriaContainer() to reposition the
cmdClearAll button
Build 03
- renamed grdBase02::ColumnsWidthToGridDiff to
grdBase02::ColumnsWidthToGridWidthDiff, fixing a crash here: XXDTES("XXFWBC02.VCX","lnCW
= THIS.ColumnsWidthToGridWidthDiff()","grdbase02","ADJUSTCOLUMNWIDTHSTOEXACTLYFILLGRID")
- modified ctrApp::SetupMultipleInstances() to fix a problem where the 1st app
instance/window was not being restored/activated
- fixed bug in XXFWDATA.PRG that resulted in the IUDLog table not created for
the VM and NT example apps, when the "auto" update on installing a new build was
run
- modified the OLDVAL~CurrentValue separator in IUDLog.IUD_BA*Values (Memo/Blob/Varbinary)
fields from a single tilde/CHR(126) to CHR(126)+CHR(255)+CHR(126), for more
bulletproof parsing
- modified XXFWDATA.PRG to add support for creating "dedicated" IUDLog_<TableName>
tables _VFP.Help(FULLPATH("VMPHELP.CHM"),,"Advanced IUDLog features")
- modified the Audit Trail/Logging feature (XXFWDATA.PRG) to save all field
values for buffered Updates, same as un-buffered Updates as well as Inserts and
Deletes
Build 02
- fixed bug in XXFWDATA.PRG that resulted in the IUDLog table not created
for the VM and NT example apps
- sped up the SP_VMP_IUDLog Stored Procedure (XXFWDATA.PRG/Audit Trail)
- split the SP_VMP_IUDLog Stored Procedure up into several individual per-task
Stored Procedures
- added SP_VMP_IUDLog.. Stored Procedures to provide for setting a "warning"
when the IUDLog.DBF/.FPT is approaching the VFP 2G file size limit
- added new X8GUID.PRG library routine to generate a GUID
- added IUDLog.IUD_TransID and IUDLog.IUD_TXNLevel fields and their population
- modified frmData::SaveAction() and ctrBusinessObjectManager::SaveAction() to
generate a "transaction ID GUID" for populating to IUDLog.IUD_TransID
- moved sensitive header comments from SP_VMP_IUDLog..() Stored Procedures into
the VMP help file
Build 01
- modified cmdCalendar::Refresh()/UIEnable() to ensure that the button is
refreshed (Visible/Enabled set) when it's on a page of a pageframe that
*doesn't* inherit from XXFW.VCX/pgfPageRefresh
- fixed a typo in frmData::LoadBOMgr(), where "ioCallingForm" was spelled with
an extra "l": "ioCalllingForm", which prevented that first IF from evaluating to
.T. properly
- modified cusCalendarTextbox::OwnerKeypress() to match the FirstDayOfWeek/LastDayOfWeek
hotkey actions to any "CalendarFirstDayOfWeek" AppConfig setting
Jan 28, 2005 build
=================================================
Build 08
- modified XXFWDATA.PRG/CreateUsersTable to check for the existence of the
glX8ED memvar
- modified cusDBCSvc::OpenData() and OpenAllTables() to pass the tnDataSession
parameter so that when tables are to be opened, they get opened in the indicated
data session
- modified the cmdPath::Click() of XXWBNewForm.PRG to properly leave the path
setting alone after Cancelling from the GetDir() dialog
- added a new pgfBase::PageCount_Assign method to ensure that decrementing the
PageCount doesn't fail because of dangling object references to data-entry grids
or registered composites
- Reset To Default the grdNavigate::SetUserSecurity() method, so that normal VMP
grid/column security can be applied to grdNavigate (the grdNav on frmDEGridNav
forms)
- added txtBase::Click and spnBase::Click to code a replacement workaround for
the code that was formerly in txtBase/spnBase::GotFocus but quit working in VFP
9.0, to select the contents when the mouse is used to select the control and
SelectOnEntry=.T. or "K"$Format
- modified grdBase::ReSort() and grdGeneral02::ReSort() to work around a VFP
anomaly where an invisible column's header can actually be clicked under certain
circumstances
- modified grdBase::Init() and grdBase02::Init() to ignore invisible columns
when establishing the ilScrollLock behavior
Build 07
- fixed a typo in grdBase::SetColors() that can prevent the
Grid.SelectedItemBackColor not being set per the AppConfig setting
- fixed a bug in cusPushPopCursorState::Destroy() that can result in the
ASCENDING/DESCENDING status of the index tag from not being restored properly
- modified frmPicklist::Init() and txtPicklistValid::SetPicklistFormParameters()
to properly respect the frmPicklist.ilAdd setting if the
txtPicklistValid.ilPicklistFormAddButton is left set to .NULL.
- modified XXDTMEST to check for ReadOnly MSGSVC.DBF/STRINGS.DBF and message the
user accordingly
- modified cusLockout::SetLockout() and cusLockout::GetLockout() to store the
AppInfo "TextFactor" record's App_ItemValue as an ALLTRIM()med string rather
than filling the entire field (encrypted)
- reversed the behavior of the optional 7th parameter accepted by XXFWDATA.PRG,
from enabling the default behavior to suppressing the default behavior (changed
from tlUseBinaryDELETEDTagsInVFP9OrHigher to
tlNoBinaryDELETEDTagsInVFP9OrHigher)
- modified cmdPicklistValid::Refresh, SetUserSecurity, and Visible_Assign, to
set the button's Enabled/Visible properties based on its "owner"
txtPicklistValid
Build 06
- added THIS.Close() to ctrDataSource::ORCleanup(), as an adjustment to the
mod made in build .05 to cusDataSourceBehavior::Destroy()
Build 05
- modified XXFWMAIN.PRG/ReleaseAppObjects and ctrApp::CleanupOnAppTerminate()
to not run CleanupOnAppTerminate to not redundantly call CleanupOnAppTerminate
during normal app termination
- modified XXWBNewForm.PRG to hide the Properties Sheet if it's on top and
therefore interferes with the KEYBOARD "y"
- modified frmEventLog::LoadBO() to use a different test for the existence of
the ErrorLog table in a remote database
- modified grdDataEntry::OnUpdateFormOnCancel() and grdDataEntry::Destroy() to
support some n-Tier "Prefill" scenarios
- modified ctrDataSource::FetchData() to attempt to save/restore the
THIS.icAlias record pointer
- added the THISFORM parameter to the call to oForms::RealActiveControl() in the
BeforeRowColChange method of grdDataEntry and grdDataEntry02, but only when not
called due to a member txtPicklistValid invoking its picklist form
- modified txtBase::CustomValid() to add code to support a cusDTOTextbox
behavior for a textbox on an n-Tier data-entry subform
- modified cmdBase::SetReadOnlySecured() add a missing THIS qualifier
- modified ctrDataSource::icAlias_Assign and ctrBusinessObject::OpenDataSources()
to support additional update-DS.icAlias-on-the-fly scenarios
- fixed a bug in XXERROR.PRG that resulted in some error text not being included
in GenerateBasicErrorText()
- commented out the THIS.Close() line of code in cusDataSourceBehavior::Destroy()
- modified cusReindex::ReindexData() to add support for VFP 9 BINARY index tags
Build 04
- modified cusForms::GetFormID() so that it handles spaces between the
Class,ClassName portions of the first parameter
- modified cusForms::RegisterForm() to property set the 3rd column of the
iaFormInstances[] array to "CREATEOBJECT" for class-based forms
- modified ctrDataSource::ApplyDefaultValues() to reset the loException variable
properly
Build 03
- moved the ADDPROPERTY(THIS,"ilDestroying",.f.) line from frmBase::Init()
to frmBase::Load() so ilDestroying is available in certain "DirectLoad"
scenarios
- replaced the erroneous line llConnectionCheck = .f. in XXSQLEXE.PRG with the
proper line llHandleCheck = .f.
- fixed bug in cusPushPopSQLThermo that resulted in the Command Window being
made visible in some scenarios when running a VMP app in the development
environment
- modified cusTempDBC::Init/Destroy to push/pop the SET DATABASE
- modified frmEventLog::LoadBOMgr() to fix a problem that prevents the form from
loading in some 1-tier scenarios
- fixed a bug in A.PRG that caused a crash when checking for a newer build of
VMP
- modified frmData::IsBufferDirty() to correctly push/pop the proper ALIAS() and
RECNO()
Build 02
- modified X8ConvChar.PRG (and X2CNVCHR.PRG) to transform a blank tuValue to
a logical .F. when tcDataType = "L"
- added cusUserPrefs::SetInitialDesignedValues() and modified the RestorePrefs
method of cusUserPrefs/cusGridPreference to eliminate the need for the user to
set a preference-effected property TWICE subsquent to the UserPrefs being empty
(ZAPped/just-distributed/new user/etc.)
- modified XXDTMEST.PRG to fix a strange VFP9 problem re-indexing the
STRINGS.DBF table
- modified ctrDataSource::icAlias_Assign() to cover additional scenarios
- modified grdBase::Init() to remove llCaptionPaddingApplied logic
- replaced the X3CPEDIG() reference in frmReportEventLog::PrepareData() with
X7CPEDIG()
- modified frmBase::StandaloneSetup() to fix a problem in some scenarios where
{SHIFT+F11} calls the Work Areas Viewer from a modal form called from a modeless
form
- modified cusForms::DoForm() to fix a problem where an ilAllowMultipleInstances=.F.
form can incorrectly be interpreted as being called "from itself"
- inserted a line of code into ctrBusinessObjectManager::RegisterBO(), to set
the BO's ioBOMgr property, thus supporting additional BOMgr+BO scenarios
- fixed the FLUSH FORCE code in frmData::UpdateBuffers() to properly
comma-separate the list of tables
- replaced two X3MSGVC("rawtext") with X3MSGSVC("RawTextOK")
- modified SelectAllRows() in grdPicklist, grdPicklist02 to properly reset the
RELATION when the RecordSource is the source of more than 1 relation
- modified grdDataEntry::DeleteCurrentRow() to handle repositioning the record
pointer properly in n-Tier scenarios
- modified ctrDataSource::IsBufferDirty() to correctly push/pop the proper
ALIAS() and RECNO()
- modified cusUserSecurity::GetAccessOtherUser() to fix several minor issues
Build 01 - initial release