By Trent L. Taylor - 4/16/2008
This is the first installment of the 1.6.6 beta update. You will notice that the version will display as 1.6.5.1 when looking in the StrataFrame->Version window. This will make it easier for us to determine if you are running a beta version or a fully released version.There are quite a few changes in this build and there will be many more to come before the release. However, there have bee some requests out there that are in this build which include the business object field orders to the specifications of the ConnectionDataFolder (ability to specify the folder location for the Appkeys.dat and the Connections.dat files). There are also many new enhancements to the DDT which includes pre and post script executions, field struction default prefixes (makes it easier when creating new columns), and more. Here is a list of what is in this update: - AddPreSaveBusinessObject and RemovePreSaveBusinessObject methods added to BusinessLayer
In the instance that the need arises where the order of the business objects save needs to be set, the AddPreSaveBusinessObject method can be used. This allows business objects to be dependent upon other business objects and rely on the primary/foreign key relationhships that are established. ListView now supports UI data interaction including related business objects, child form dialog, and related command or toolstrip buttons.
The ListView has been dramatically expanded to have native logic for tasks that are common recoded. There are now many new properties (detailed below) and events that allow a more dynamic child display interaction with much less code. By simply setting the UI interaction properties of the ListView, the ListView will dynamically manage the toolstrip buttons (or any other type of control) for the Add, Edit, and Delete as well as any security keys that may also be associated with those objects. Additionally, a ChildFormDialog can be attached to the ListView which will then by dynamically shown to the end-user on an Add or Edit dynamically with no additional code. Finally, the ListView will now allow the instance of the business object of which it represents to be attached and the current index (or row position) of the business object to be dynamically updated. New Properties: AddObject AddObjectSecurityKey EditObject EditObjectSecurityKey DeleteObject DeleteObjectSecurityKey DeleteMessageKey AutoNavigateToSelectedRecord HandleAddAction HandleDeleteAction HandleEditAction New Events: ChildFormResults Wizard control default colors modified when using a Windows based color theme on Vista
Some of the colors pulled from the OS when using a Windows based theme looked a little dark when running on a Vista OS. This issue has been corrected. BusinessLayer now has an UndoByFilter method
In the circumstance that you are dealing with a grandchild many-to-many environment and you need to undo the changes for the grandchild without effecting the other records that have been modified on that same grandchild business object, you can use the UndoByFilter method. This allows a business object to undo only those records that meet the criteria of the filter. If a filter is already applied on the business object it will be ignored and left intact once the Undo operation has been completed. BrokenRule constructors made public
The BrokenRule constructors have been made public instead of internal (friend) allowing a new broken rule to be created through an external assembly. Embedded localization languages file not always located.
A change has been made within the framework regarding how the Message_Languages.xml file is located in an embedded environment. This file was previously not always located unless stored externally. RenderAsSolidBackground property added to a WizardPage
A wizard page now supports the RenderAsSolidBackground property like the other themed container controls. New SyntaxEditor control now replaces the ColorizedTextbox
A new control has been created that allows a legitimate syntax editing environment exist. This control replaces the ColorizedTextbox which was never really designed for editing but viewing and had many limitations as it relates to text size and performance. The SyntaxEditor is designed to allow for much larger text environments while maintaining the keyword colorizations dynamically. (Note: There will be a number of additional features added to this control prior to the 1.6.6 release). New SyntaxEditorLineNumbers control which shows line numbers for a SyntaxEditor control.
This control can be used in conjunction with the SyntaxEditor control and displays the line numbers currently visible within the SyntaxEditor. Database Deployment Toolkit SQL editors revamped to use the new SyntaxEditor controls
When dealing with the SQL code for a stored procedure, view, or user-defined function, it was difficult to actually use the text area as an editor, especially on larger queries and commands. The DDT has been updated to use the new SyntaxEditor controls so that it is much easier to work with this data within the editors. DDT code windows now remember their previous sizes and positions
The code windows within the DDT (stored procedures, views, and user-defined functions) now remember their positions and sizes from the previous entry. CustomPattern added to the Regex options for a Keyword within the SyntaxEditor
The SyntaxEditor already had 3 pattern types that included MatchBetween, MatchTextToEOL, and MatchExact that came across from the ColorizedTextbox control. However, a new option has been added called CustomPattern which allows literally any Regex expression to be supplied allowing the syntax coloring to support any complicated or intricate colorizations. AccessDataSourceItem would not automatically return the primary key value
When inserting a new record and the PrimarykeyIsAutoIncrementing property was set to True on the BO, the saved primary key value would not be returned for an AccessDataSourceItem. This issue has now been resolved. GetTypeFromReferencedAssemblies method changed to ignore loader exceptions
Under certain conditions when the referenced assemblies were being reflected, an assembly reference that was not needed in one environment may be hit, though it is not used, and throw an exception since that assembly could not be found in the GAC or on the machine. This change will prevent that error. Database Deployment Toolkit now supports category for stored procedures
When dealing with a large database and many stored procedures, it can become difficult to locate a single sproc in the list. A category can now be assigned to a sproc so that like sprocs can be grouped together making it easier to locate a specific sproc. BrowseDialog now has a ReturnSelectedRecordOnly property
When the ReturnSelectedRecordOnly property is set to True, the selected record within the browse results will be the only record copied into the BusinessObjectToPopulate when returned from the BrowseDialog. BuildDataTableFromEnum improperly created a top most value for the value type
When using a combo box or manually calling teh BuildDataTableFromEnum method in the MicroFour.StrataFrame.Tools.Common shared class and a top most value was supplied, the value type that was set as the top most value was, at times, coming in as a string or invalid type. This would result in an ArgumentException (though it may be snuffed) which in turn could result in a very slow UI response to any other other that is bound to the same data source. To resolve this issue, the TopMostValue is attempted to be parsed as an integer. If so, it is then added to the value as an enum type of that value, even if the enum in question doesn't actually have that value. This results in much faster performance and resolves the ArgumentExceptions. Database Deployment Toolkit now has a default prefix option for each table
A default prefix can now be supplied for each table which will auto-populate any new field created with this value making it easier to create new structures. For example, if a prefix of "pre_" were supplied then a new field, when created, would automatically appear as "pre_" with the caret position after the "_" ready for the rest of the field name to be supplied. Pre and Post deployment scripts now available within the Database Deployment Toolkit
A new feature has been added to the Database Deployment Toolkit which allows scripts to be created and executed before and after a profile is deployed to a server. This allows any strange or out of the ordinary deployment actions to be taken. For example, if the need existed to convert DateTime fields to a BigInt on a pre-existing database, and still maintain the data within the fields, a Pre-Deployment script could be created to convert the DateTime fields to BigInt (ticks would be stored) fields prior to the database updating the structures which would circumvent data loss and/or an error. ConnectionManager now allows the data folder that stores the connection files to be specified
A new property has been added to the ConnectionManager class called ConnectionDataFolder. By setting the ConnectionDataFolder prior to calling the SetConnections() method, the folder location to which the AppKeys.dat and Connections.dat will be stored can be specified. This allows environments with extremely tight security restrictions to supply the folder when the common application data folder has been restricted from general use. New Solution Preference added to determine if field names will appear in alphabetical or natural order.
With the release of 1.6.5 a change was made to the display of bindable business object fields to appear in alphabetical order. However, there were some developers who preferred to view their field names in a natural order. A new preference was added to the Solution Preferences so that this can be specified on a per solution basis and developers of both preference types can view the fields in their desired order.
Note: For those developers who have a license, you can get the source code for this build in the My Account are of the website.
|
By Trent L. Taylor - 4/30/2008
The next installment. Here is a list of some of the changes made between the last beta post and this one. All of the previous post details plus:- PrimaryKeyIsAutoIncremented and PrimaryKeyIsUpdatable properties have been updated with the Overridable tag
The PrimaryKeyIsUpdatable and PrimaryKeyIsAutoIncremented properties can now be overwriiten through inheritance as the Overridable tag has been assigned to the properties making it easier to class this type of logic. Action added to the event arguments in the ChildFormResults event for a ListView
An action property has been added to the ListViewChildFormResultsEventArgs for the ChildFormResults event of a ListView so that it can be determine which action invoked the ChildFormDilaog to appear in the first place. Issue with the transactional key being saved off in Save and SaveByForm
When saving on a transaction a key is generated that combines the data source key and the key of the transaction so that the transaction can be retrieved during the save. However, the transaction key was not being used as the key part but rather a transactional boolean. This caused some strange side-effects in regards to the BO thinking that a save had already occurred and not accurately depicting the dirty state of the BO. This issue has now been resolved. Under certain conditions, the CurrentRowIndex could fall outside of the legal indexes
There were certain conditions and even sequences that could cause the CurrentRowIndex of a business object to fall outside of legal indexes within the business object. This generally had to do with an Undo of a new child or grandchild record or certain filter and sort conditions when the editing state was being changed in the mix as well. To circumvent this error from happening, the CurrentRowIndex now takes the following logic in these scenarios: • CurrentRowIndex > BO Count: CurrentRowIndex get set to the last visible record in the BO. • CurrentRowIndex < 0 when there are records in the BO: The CurrentRowIndex gets set to the first visible record in the BO. • CurrentRowIndex >= 0 when there are no visible records in the BO: The CurrentRowIndex gets set to a -1 which indicates empty or no records. SecurityDialog produced an error at run-time when a permission was double-clicked
If a permission was double-clicked at run-time an error would appear indicating that the permission editor could not be created. This issue has been resolved. QueryNotifications improperly passing over Connection String on SqlDependency
When registering a BO to receive query notifications the connection string of the command was not assigned prior to the query notification being assigned to the dependency, thus the SqlDependency was never started. This issue has been resolved. DateTimePicker caret creation error on certain Windows environments
Within certain Windows environments, the DateTimePicker would produce an error when showing a "cleared" state and had focus. This was most commonly noticed when pressing teh Delete key while within the control to clear out the value. The caret creation has been changed to be compatible with these environments. ListView automanaged Add object now checks to see if a ParentBusinessObject has records
The Add button now checks to see if the ParentBusinessObject property of the BusinessObject has been set. If so, it then checks to see if there are any records. If not, then the Add button will be disabled. When deploying to a pre-existing database, default contraints may be created incorrectly
In a scenario where the DDT is deploying to a database that existing before the DDT was used for deployment, an issue could occur where the default contraints are not properly created and try to use the name of the column name. A workaround has been implemented within the DDT that will prevent this from happening.
More to come
|
By Trent L. Taylor - 5/30/2008
- SyntaxEditor keyword collections can now be exported and imported
The SyntaxEditor now supports the ability to export and import the keywords collections at design-time making it much easier to re-use and update a custom syntax. SyntaxEditor rendering performance improvements
There have been some changes made to improve rendering performance to prevent jumping and slow colorization on certain machines and processors. Under certain conditions, the colorization would be very jumpy and slow while typing. This was generally due to the processor or OS environment. SyntaxEditor text paste changed to strip pre-formatted text
When pasting text into the Syntax Editor, any pre-formatted RTF formatting is now stripped and then properly colorized according keyword rules. New Application Theme Editor now available!
A new tool has been introduced that allows custom application themes to be created visually instead of through code. Once the desired view has been setup for the theme, the source will then be automatically generated for VB.NET or C#. This custom theme can then be loaded into an application. This tool also makes it possible to have a graphics department to create the theme and colors without having any programming knowledge. Simply change the property and see how it affects the overall appearance in the Theme Viewer window real-time. Syntax Editor now has an AllowTab property that determines if tabs can be entered within the control
The SyntaxEditor now has an AllowTab property that determines if tabs are accepted within the control. By default this property is True. Through this same change, the AcceptTabs property of the control has been made obselete and ReadOnly. So if this property is serialized within a designer file, an error could occur. To remove the error, simply remove the line of code in the designer file that sets the AcceptTabs property. SyntaxEditor now has a CharsPerTab property
The SyntaxEditor now has a CharsPerTab property that determines how many characters, on average, would consume the width of a single tab. This property defaults to 4. SyntaxEditor now has a PadFromPreviousLine property
The SyntaxEditor now has a pad from previous line property that pads a new line with any tabs or white space from the previous line. Setting this value back to false will always sends the character position back to the beginning of the line. This property defaults to True. SyntaxEditor now has a SyntaxLanguage property that allows a pre-defined language to be used
The SyntaxEditor now has 3 pre-defined languages that can be used by simply setting the SyntaxLanguage property. The pre-defined languages are SQL Server, VB.NET, and C#. Obviously custom languages can still be defined by using the Custom SyntaxLanguage option on this property (default). BO Mapper has been changed to use the SyntaxEditor control
The BO mapper has been changed to use the SyntaxEditor control for a more fluid and useful syntax editing environment. Additionally, the custom syntax has been placed on a separate page tab so there is more room to work when dealing with the custom syntax. Added functionality to ThemedDetailWindow to make all items within the window be exposed as bindable properties
The ThemedDetailWindow now emits propertys by the key name for each item created within the collection. This allows the value of the collection to be bound using a BBS or standard .NET data binding versus manually setting each item in code. Changed the exception thrown by a business object when accessing the CurrentRow property when the business object is empty to indicate the name of the table that is throwing the exception
The exception message now shows the [schema].[table] of the business object that is throwing the exception. DeleteMarkOnly property added to the ListView
A property called DeleteMarkOnly has been added to the ListView so that the developer can determine whether the delete (when handled by the ListView) will just mark the record as deleted and still require another save to update the database, or to immediately delete the record from the BO as well as the database. A new class called Win32Window is now available that provides a IWin32Window implementation wrapper
There are times that a dialog needs to be shown and the owner of that child dialog or windows needs to be forced. There is an overload for ShowDialog that allows an IWin32Window to be passed defining the owner of the dialog. Using this class as a wrapper, this can be easily done: Dim f as New Form() f.ShowDialog(New MicroFour.StrataFrame.Tools.Win32Window(MyParent.Handle)) Added property to ThemedDetailWindow to allow the LineColor to be set independently of the PrimaryGradientColor
The ThemeDetailWindow now has a separate LineColor property that allows the line color to be independently set. Added property to the DetailWindowItem class to allow the description shadow to be toggled (DescriptionShadow)
At times the shadow for a description may need to be omitted. A property has been added that allows the description of the ThemedDetailWindow to be specified on a per line item basis. DDT now remembers the last state of the "Show Auto-Generated Stored Procedures"
The "Show Auto-Generated Stored Procedures" state is now remembered between sessions so that it doesn't always have to be turned off to see only the custom sprocs. DDT Stored Procedures now sorts by category, by priority, by name
The default sorting of the stored procedures has been changed to sort by category, by priorty, by name making it easier to find a specific sproc when there are a lot of them. DDT gets a face-lift
Over the next several updates there will continue to be a number of UI changes to the DDT that will better accomodate some future enhancements that are coming down the pike. So there have been some considerable aesthetic changes made that will continue to change over the next several builds. ListView now supports automated column sorting
Four new properties have been added to the ListView that allows the list to be automatically sorted by column. When sorting is turned on, the default direction, column, and whether or not automatic column sort inversion will take place can be defined through the property sheet. The four new properties are: AutoColumnSort AutoInvertSortOrder DefaultSortDirection DefaultSortColumn Note: For the sort direction to be automatically inverted, the HeaderStyle must be set to Clickable. ListView now has a Sort overload to forcibly sort the list
A Sort method overload has been added to the ListView that allows a list to be sorted by column and direction without the need to create a custom ListSorter. This method can be used regardless of the AutoColumnSort state. PauseSorting and RestoreSorting methods added to the ListView
Two new methods have been added to the ListView called PauseSorting and RestoreSorting. These methods allow the sorting to be forcibly stopped while the developer manually manipulates a ListView (i.e. move index positions, etc) and then restore the sorting once the process has been completed. PanelManagerPage designer changed to prevent accidental dragging
A common issue with the PanelManager was when attempting to draw or resize the manager. The designer of the pages within the panel manager also allowed the dragging of the page, which could sometimes cause the page to be dragged outside of the panel manager page which caused a number of other issues. Additionally, when the panel page was selected, it show the sizing elements which actually did no good since it was docked within the panel manager. This too has been addressed with this fix. The ThemedDetailWindow has a new AutoAdjustContolHeight property
The ThemedDetailWindow now has a property called AutoAdjustContolHeight that will automatically adjust the height of the control if any item within the control auto-sizes itself to accomodate a multi-line value. For example, it an item has a value that contains carriage returns, that row is automatically sized. The ThemedDetailWindow will now automatically adjust the height of the control as well if the AutoAdjustContolHeight property is set to True. ThemedDetailWindow now supports a UseAlternateThemeColors option
The ThemedDetailWindow now has a UseAlternateThemeColors property that renders the control with a different appearance than the default rendering appearance. The alternate appearance renders without a gradient within the description area and produces a more "flat" appearance. ThemedDetailWindow now supports a watermark image
A ThemedDetailWindow now supports the ability to have a watermark image render on the control. There are three new properties WatermarkImage, WatermarkLocation, and WatermarkOpacity. The Navigate() method on the BusinessLayer would potentially return a True value if the Navigating event was cancelled
The Navigate() method on the BusinessLayer will now always return a False if the Navigating event was cancelled. A BrowseDialog search field populating with a Enum Value did not always respect an Initial Value
The BrowseDialog has been changed to store the value within a combo box differently to respect enums. This will only affect enum population. Additionally, the initial value now properly pulls the enum value when set. Previously this was hit and miss depending on the enum value and some other environmental circumstances. The Database Deployment Toolkit would not allow a table with the same name but different schema to be saved
The unique table criteria has been changed when verifying a unique table name by now include both the name and schema. Previously the table name was the only validation check which prevented a table of the same name but different schema from being created. DDT now supports the ability to modify a table structure without updating the object history
The ability to modify a table structure without creating object history items is now available. Since this feature should be used VERY sparingly, it is only available through a key + mouse combination on the right list panel only (not the Treeview on the left). The reason that this may be necessary is when copying a table and renaming or removing a lot of fields for a table that has never been deployed. In this case, you may not want the object history to be updated since the structure has never been deployed. To modify a table structure with updating the object history, press the Ctrl button and then right-click the table within the right list. The Modify Structure will then appear with a "(No Object History)" at the end. When the table structure form appears, this will also be shown in the header of the dialog. NOTE: This should never be done for structures that have already been deployed in the field and will need to be updated! The Font of a ListView can now be set through the RowPopulatingEventArgs (RowPopulating event)
The RowPopulatingEventArgs now has a Font property that allows the Font to be set for an individual list item through the RowPopulating event (i.e. e.Font = New Font(...)). BrowseDialog search fields now have an IgnoreInitialValueIfNotVisible property
To create the most flexbile of environments, an additional flag has been added to a BrowseDialog search fields that provides the ability to ignore a search field's initial value if it is not visible. Previously, if there were a value specified, it would be included within the search regardless of the search field's visiblity within the browse. By adding this flag, it allows an initial search value to be specified and used, yet ignored if it is not visible (not being used within the search criteria). New application theme - Cool Breeze
A new application theme has been added to the framework called Cool Breeze. This is a spin-off of the BlueSkies theme, however, the Cool Breeze theme is softer and follows a more consistent color palette. Toolstrips, mouse-overs, etc. are much softer (especially when using an alternate theme properties style of rendering). ThemedContainer rendering modified to improve performance and on-screen interaction
There were a number of issues with the ThemedContainer while rendering. At certain times, the Title would render improperly or possible not at all depending on a number of circumstances. This issue has been resolved. Additionally, the overall rendering of the ThemedContainer has been refactored to improve performance and reduce the footprint which also improved the scrolling effects if this option was being implemented. The refactoring of the rendering addressed a number of other rendering issues as well.
|
By Trent L. Taylor - 6/2/2008
There are only a few changes here. They apply most to the Enterprise Server. There were two bugs that have been resolved (FillMultipleDataTables and checking in with the MicroFour activation server). If you need the ES server files, I have attached the ES server files as well (they will need to be updated as if you are going to load this build and are using an ES server).This build also includes: - Czech language support
- Version has been changed to 1.6.5.2
|
By Trent L. Taylor - 6/23/2008
Here is the next set of changes and updates for the 1.6.6 build.- EnterpriseDataSourceItem would not fully support the FillMultipleDataTables method
The EnterpriseDataSourceItem has been changed to fully support the new FillMultipleDataTables method from the BusinessLayer. Enterprise Server may fail if the MicroFour activation server was not available
Under certain conditions, and if the MicroFour activation server were down or inaccessible due to an internet connection on the server side, an error would occur causing the server to throw an exception. This issue has been resolved to no longer fail if the MicroFour activation server is not available or accessible. New localization language added - Czech
A new pre-plumbed localization language has been added to the framework (Czech). DataLayer did not properly respect schema name when using the auto-generated stored procedures
If the stored procedure names were not supplied and expected to be in the standard format, the table schema was not used as part of the INSERT, UPDATE, or DELETE and would throw an exception indicating the sproc could not be found. This has been resolved and now properly supplies the schema name. BusinessLayer now has the ability to take a snapshot of current contents and restore it at a later time
The BusinessLayer now has two new methods: SaveCurrentDataTableToSnapshot and RestoreCurrentDataTableSnapshot. When saving a snapshot, the BO saves the current contents of the CurrentDataTable, including column and row states. The BO can then be changed or modified, but if the scenario arises where the BO should be restore back to the snapshot and ignore any changes since that point, then the RestoreCurrentDataTableSnapshot can be called. This is a good way to deal with child tables and ChildFormDialogs when cancelling out as the Undo will not always give you exactly what you may need (i.e. remove a record with an Added row state, etc.). ListView now has an AutoSnapshotBusinessObject property that saves the contents of the BusinessObject before an Add or Edit
By default, the ListView now has the new AutoSnapshotBusinessObject property set to True, which when handling the Add or Edit actions, will automatically take a snapshot of the business object assigned to the BusinessObject property. This allows the RestoreCurrentDataTableSnapshot if necessary in the ChildFormResults event versus using an Undo. This could be done manually as well, this just saves a few steps in this process. ListView now has a PerformEditActionOnDoubleClick property
If the HandleEditAction property is set to True which indicates that the ListView will manage the edit action and the PerformEditActionOnDoubleClick property is set to True as well, then when a list item is double-clicked, the Edit action will be automatically performed. BusinessLayer SaveCurrentDataTableToSnapshot now supports a key for an unlimited number of snapshots.
The SaveCurrentDataTableToSnapshot now allows as many snapshots as necessary to be created by supplying a key. This allows many different states of the same business object to be saved. ListView now has an AutoSnapshotKey property that allows a key to be specified if using the AutoSnapshotBusinessObject feature
The ListView now supports the new BusinessLayer SaveCurrentDataTableToSnapshot key parameter with the AutoSnapshotKey property. The value supplied here will be passed over to the SaveCurrentDataTableToSnapshot method. Database Deployment Toolkit now supports Triggers
The DDT now has the ability to create and deploy triggers. The triggers can be defined on a per table basis. The DDT packages will need to be rebuilt once the update is loaded with this new feature (1.6.6 beta) as the DatabaseMigrator class now expects the triggers to exists. If this step is omitted, an error will occur (which would be a friendly reminder to rebuild the package file :-) ). Database Deployment Toolkit now shows the schema name along with the table name for relationships
When defining a relationship, the foreign key table drop down now shows the schema name along with the table name so that when two tables of the same name but different schemas exists within a database, they can be easily identified. ListView now has a BeforeChildFormExecuted event
The ListView now has a BeforeChildFormExecuted event that gets raised immediately before the child form dialog is show via an Add or Edit. In the case of an Add, the new record has already been created. In the case of an Edit and the BO is being autonativated via the ListView, the record will be correctly positioned. This event is a good place to load additional business objects with data or perform some type of other logic before the dialog is shown. ListView now has a VerifyRulesBeforeAutoNavigate property
The ListView now has a VerifyRulesBeforeAutoNavigate property that will prevent the selected list view item from changing if there are broken rules on the current row. This works around the edges of the ListView so the SelectedIndexChanged event will fire more than once, but ultimately will land back on the item in question. Additionally, the AutoNavigateToSelectedRecord property must be set to True and the BusinessObject property must have a valid BO instance. SecurityBasics now has the ability to force registry settings to HKEY_CURRENT_USER
Some of the Security dialogs use the standard SF properties to save off the form positions, locations, etc. However, this gets uses at run-time as well and in highly-restricted environments the HKEY_LOCAL_MACHINE key cannot be accessed. To get around this, the SecurityBasics class now has a ForceCurrentUserOnRegistrySettings property which redirects the registry settings to the HKEY_CURRENT_USER key for these security dialogs.
|
By Trent L. Taylor - 7/2/2008
Getting closer, but there are some big ticket items on this update. Examples will follow within the next few days, but multiple foreign key relationship management is now supported...as well as a surprise item which is a custom Business Binding Source which will wrap a specific BO without the need to manually drop on a BBS. Additionally, there is a new Custom BBS template that can be used to create this custom BBS class as well as a reporting business object that inherits from a particular BO type for adding report specific properties, etc. To try out this new template, click Add a new item and select the SF Customer Business Binding Source template.- Package file import did not properly import table with same name but different schemas
In the event that a package has two table names of the same name but different schemas, the import would not include both tables and would not properly import all of the profile information. This issue has been resolved. Dictionary key not present error may occur when manually adding a DateTime field to the CurrentDataTable and adding a new row
There was an issue when a date time column that was not expected within the CurrentDataTable existed and a new record was added. A 'key was not present in the given dictionary' exception would be thrown. This has been changed to accept a default value so if the key is not found an exception will not be thrown. New localization language added - Dutch
A new pre-plumbed localization language has been added to the framework (Dutch). - Added the RegisterForeignKey and UnregisterForeignKey methods to the BusinessLayer class to allow a business object to have multiple "parents" through foreign key management
StrataFrame has always provided the ability to have a single parent relationship which would then manage the child BO foreign keys automatically. However, for BOs that had more than a single foreign key that needed to be automatically managed, this had to be done manually. A BO can now register a child BO and foreign key which will then automatically manage that foreign key when a new child is added and a parent PK is assigned (i.e. if the parent was a new record). Also, like the standard relationship management, the save order is properly enforced in the event a child is saved before a parent and the parent is a new record. The only difference is that this declaration must happen within code versus a design-time editor, which makes sense because the instances of the objects must be defined versus the types. MyParentBo.RegisterForeignKey(MyChildBO,"MyChildForiegnKeyField") Added test to the DataRow.AcceptChanges() call within the DataLayer.UpdateDataTableThread() method to prevent rows that are inadvertantly Detached from causing the save process to crash
Very, very rare...practically impossible to reproduce, but fixed nonetheless. - New Generic BusinessBindingSource class allows easy creation of BBS wrapper for reports or standard .NET data binding use
Due to the nature of binding to standard .NET reporting tools such as grids and reporting environments, a very easy to implement class has been created which extends a business binding source for a specific business object type. A generic implementation allows the BusinessBindingSource to be inherited and a specific BO type to be assigned to that BBS class. The BBS class will then dynamically create the BO and manage the exposed properties. This creates a very easy way to create data sources that wrap business objects for any type of .NET data binding including reports, grids, 3rd party controls, etc. without having to manually create and attach a business binding source component. Public Class CustomersBBS Inherits MicroFour.StrataFrame.Business.BusinessBindingSource(Of CustomersBO) End Class - New Template Created that supports the new Custom Business Binding Source Class
A new template has been added that allows a custom business binding source for a specific business object to be created. Additionally, this same template has support for reporting and allows a reporting BO to be created which inherits from a source business object. This is generally a good idea for reports so that custom and aggregate properties are added to the report specific BO instead of the original BO. Additionally, a namespace can be assigned to the BO and/or the custom BBS that gets created through this template so each report BO and BBS can appear in a unique namespace. Each of these segments is an option so a BO doesn't have to be created or a namespace assigned if the need doesn't exist. If a custom BBS is the only item that needs to be created then that alone can be selected and added to the project. Within this template dialog, a combo will allow the desired business object to be selected for which the custom BBS and/or reporting BO will represent. In conjunction with the new generic BBS, this feature takes a process that could have taken hours before and turns it into a minute or less implementation.
|
By Trent L. Taylor - 7/23/2008
Here is another installment of the 1.6.6 beta:- Cool Breeze added as a template theme in the ApplicationThemeEditor
When creating a new Application Theme, the Cool Breeze theme can now be selected as a template theme. DatabaseMigrator class now has a 1 hour timeout when moving a table from one file group to another
When a table is being moved from one file group to another a timeout may occur if the table is very large. Since the default timeout of a command is 30 seconds, if a large table were being moved, the timeout could execute causing an error. This has been extended to 1 hours to ensure that there is plenty of time to migrate a table from one file group to another if in fact a table is ever moved in this manner. If the fields of a view could not be evaluated by the DDT, a view index could not be added for a field.
If a view query could not be evaluated by the DDT to determine the fields that will be included in the view, then a view index could not be added for those fields. The field can now be typed into the combobox versus being forced to select from the drop-down. AddBusinessObject and RemoveBusinessObject on the BaseForm are now Overridable
The AddBusinessObject and RemoveBusinessObject methods are now overridable on the BaseForm class. This allows additional add and remove logic to be implemented through inheritance.
There were also some other minor changes to the installation and the embedded localization logic.
|
By Trent L. Taylor - 7/24/2008
And yet another - Changed WBBS to properly support 3rd party web grids that support proprietary paging.
The 3rd party grids store off a collection of items rather than rendering the grid as the collection is enumerated. The base business object enumerator returns the same business object reference instead of a separate business object reference per record. I added an overload to the GetEnumerable() method (EditorBrowsable(Never)) that will use a BBS as the enumerable object returned, which returns a separate instance of the business object type with each record pointed to a different record.
|
By Dustin Taylor - 7/29/2008
The latest: - ExtensibilityBasics GetPageType threw NullReference if there was not an active page
When opening a project, a null reference exception would sometimes be thrown if no page was active when the project was first opened (this was found on a web project.) This has been resolved.
|
By Trent L. Taylor - 8/1/2008
- DDT Database Import was failing to bring in selected tables
A bug was accidentally introduced on the import within the 1.6.6 build fixing another bug in regards to schemas. A check was not taking the schema into account which would prevent any selected tables from being imported. This issue has been resolved. Localization export may throw expection during export under certain conditions
Under certain conditions, the Localization Export to XML may fail due to a filter being set. This issue has been resolved.
|
By Trent L. Taylor - 8/12/2008
- The MDDeployMain populated the SQL Server combo on the wrong thread
In most environments, the cross-thread exception would not be thrown, however, the MDDeployDialog has been updated to ensure that the combo is populated on the UI thread versus on a background thread to ensure a cross-thread violation does not occur. DDT Database Import Wizard not including indexes
This was the same issue as the tables in a previous fix. This was accidentally introduced when schemas were added as part of the criteria on the import. This issue has now been resolved.
|
By Trent L. Taylor - 8/27/2008
- BrowseDialog may throw error if no search fields are visible
If a BrowseDialog has no search fields visible an error may be thrown when trying to set the control positions since there are no controls to position. A test has been added to prevent the error from being thrown if no search fields are visible. SyntaxEditor now has PauseSyntaxColorization and ResumeSyntaxColorization methods
The ability to prevent the syntax editor from colorizing altogether and then restart the colorization process has now been added through these two methods. SyntaxEditor now supports RichTextToolstrip and can act as an RTF editor
The SyntaxEditor can now be used to both colorize syntax while acting as a full fledged RTF control including support for the RichTextToolstrip control. In order to act as a standard RTF control, the PreventStandardRTFTextFormatting property must be set to False. SyntaxEditor control now has a PreventStandardRTFTextFormatting property
A property called PreventStandardRTFTextFormatting has been added to the SyntaxEditor which will allow the formatting of the text through standard RTF properties such as the SelectionFont, etc. By default, the SyntaxEditor control will strip this type of formatting to ensure that the editor font is consistent. RichTextToolstrip now allows individual buttons to be shown or hidden
The RTF toolstrip now supports the ability to individually show or hide certain action items within the toolstrip. For example, the bold button can be hidden or prevent the end-user from changing the font, etc. Issue with the CurrentRowIndex being incorrectly position after a table refill
When a Fill method was called, the CurrentRowIndex was incorrectly position on the second record (if one existed) instead of the first. This was actually introduced at the end of April 2008 during the 1.6.6 beta as a result of fixing another bug. The _CurrentRowIndex is actually a property and not a private which takes into account Shared DataTable access. A fix was previously introduced (in April) to prevent the _CurrentRowIndex from being an illegal value when the BO actually had records within it which caused other issues in regards to a Save or Undo in certain conditions. The bottom line is that both issues are now correctly fixed.
*(There are several other minor fixes in this build as well)
|
By StrataFrame Team - 9/15/2008
Fixed issue with concurrency detection throwing exceptions when encountering NULL values.DOWNLOAD THE OFFICIAL 1.6.6 RELEASE IN THE MY ACCOUNT AREA.
|
|