|
|
 |
Table of Contents
Commons Core Library ChangeLog
- Added new getBooleanValue() method to the Value interface that can automatically do type conversion of a Value object into a boolean primitive.
- Added new isConditionalExpressionTrue() and evaluateExpression() methods to the ValueContext interface. These two methods evaluate a JSTL-style expression (implemented by Jexl library) in the current value context and make the "environment" available to the expression by passing in a "vc" ValueContext variable. The reason these are useful in the ValueContext is that the expression context and expression instance may be cached and reused per user (thread-safe) if required.
- Added experimental support for BSF scripting. Currently only dynamic value sources are scriptable (see Sampler app's forms-input.xml source for information) but support will be added for field and report conditionals, execution scripts for dialog actions, validations, and other useful places. This commit puts in the infrastructure and future commits will add further functionality.
- In TextUtils, added a check to see if the first character in the generated identifier is a valid Java start character; if it's not, a _ is prepended so that something like "04_abc" (which is a compiler error) becomes "_04Abc" (which is a valid java identifier).
- Added new reset() method to the ValidationContext interface that allows resetting the validation context to its initial state (valid with no errors). Useful if there is a need to clear the context.
- Added a new ESCAPE_HTML flag to the <column> tag so that if it is a GeneralColumn and flag is set, then any HTML provided as part of the column data will be escaped automatically. Usage: >column ... escape-html="yes"/>.
Commons 7.1.0 : Minor bug fix, enhancements, and code roll-up
- In TextValueValidationRule, optimized the regular expression handling so that a pattern is created, cached, and reused by a matcher instead of being recreated for each call to isValid(). Also added better error messages when text validation fails. API CHANGE: if you use the regular expression validation you should no longer prefix or suffix the reg-ex with '/'. For example, if you used /[A-z]*/ in the past, now you should just use [A-z]* without the '/' at the beginning and end. If you now include '/' as part of the expression, it will be considered a requirement in the pattern.
- Added new validation, TimeZoneValidationRule , for timezones using the TimeZone class. Also added validation class called InternetHostnameValidationRule for validating internet hostnames and IPs.
- The MultipleUriAddressableFileLocators cache was storing the locator instead of the resource. Bug fixed so that the cache now stores the resource; this was causing a ClassCastException if the cache was in use (but no error if the cache was ignored).
- Added new DelimitedValuesParser class useful for parsing comma-separated values (CSV) input.
- Modified PresentationValue so that it returns an empty list of items when the text value is null or is an empty string.
- Added overriden method getSpecification() since ConcatenateValueSource by itself does not have a VS specifcation defined. This was throwing a NPE in QueryParameter.
- Added ability for InputSourceLocator to track ending line number and starting/ending columns for tags. This allows extraction of source code from XML source files for presenting to the user or to use in development tools like Console.
- Allowed template processor to become a template consumer. This allows templates like to be defined in xml and then later used like .
- Added nullity check that was preventing the Project DTD from being generated after store procedures were added.
- Moved the redirect value source to be auto registered (was previously in sparx.xml but it shouldn't have been there).
- Improved support for error pages with additional features in <navigation-tree>'s and <page>'s <error-page> tag.
- Changed the delimiter of the ListValueSourceCommand from comma [,] to pipe [|] so that embedded value sources in the command will work properly. Before this change, only value sources that didn't contain commas in their specs were allowed.
- Changed the rule for DialogContext Beans generation so that only <dialog> tags that have the <dialog ... generate-dcb="yes"/> attribute will generate dialog context beans.
- Added new attribute called allow-execute-with-cancel-button to the <dialog> tag which allows execution of the dialog even when the Cancel button is pressed. Currently it is up to the developer to check for it and do the appropriate action in the execution listeners.
Axiom Data Service ChangeLog
- In com/netspective/axiom/conf/schema.xml, changed the Lookup_Result_Type and Record_Status tables to be table-types. This will break any code that depends on either one of those tables. This change was made so that by default, the schema.xml only defines data-types and table-types and not physical tables. To create the physical tables if your app depends upon it, code should be added that instantiates the table-types like so: <table name="Lookup_Result_Type" type="Lookup_Result_Type"/> <table name="Record_Status" type="RecordStatus"/>
- In com/netspective/axiom/conf/schema.xml, added future-date, past-date, future-time, past-time, future-stamp, past-stamp, date-of-birth, date-of-death, age, ssn, stock-symbol, time-zone, internet-hostname, and internet-ip-address data-types. Also made minor changes to Relationship_Map table-type.
- Added check to see if parameters in were defined, and if they weren't we call special code to just execute the SP and return NULL. Prior to this change the StoredProcedure class always expected parameters (which was not always true).
- Added new isPlaceBindComments() method into the DatabasePolicy interface. Now, the default when generating SQL such as insert, update where the bind parameters are generated there are no comments like /* 1 */ telling which bind parameter goes with which column. To turn that on, the SQL policy must specify setPlaceBindComments(true) in the constructor. Required for MS Access Database Policy.
- Added check for override params in method Query.createExceptionMessage(ConnectionContext cc, Object[] overrideParams). If the overrride parameter is null the String literal "NULL' is appended to the text exception message for the given bind parameter.
- Added two new flags called insert-managed-by-dbms and update-managed-by-dbms to the tag. These flags are used to indicate that a column's insert and update values are managed ONLY by the dbms so no values should be passed for the column if these flags are set during inserts/updates.
- Added new methods for setting data source information from a list, string array, or map in the Driver Manager Connection Provider.
- Console no longer shows NPE on DataSources page when no data sources are defined.
- Refactored the AnsiDatabasePolicy so that the DDL generator and the DDL formats are delegated to separate classes and their parameters may be specified via XDM. For example, now when defining the database policy programmers can override one or more of the DDL format attributes by creating a or specify an alternate DDL generator by using the .
<project>
....
<database-policy class="com.netspective.axiom.policy.SqlServerDatabasePolicy">
<ddl-formats>
<create-table-clause-format>create table tableSpace.${table.name}</create-table-clause-format>
</ddl-formats>
</database-policy>
Axiom 7.1.0 : Major enhancements and code roll-up
- Added new starts-with-ignore-case and ends-with-ignore-case SQL comparisons.
- Added capability for DAL import XML files to import CSV delimited text entries. Introduced two new 'dal:csv' and 'dal:csv-file' attributes that perform the action. For example, in the 'initial-and-test-data.xml' you can now do the following: <dal xmlns:dal="..."> <table-name dal:csv="X,Y,Z"/> <table-name dal:csv-file="c:\X\data.csv"/> </dal> The first version (dal:csv) supports a single line of CSV and you may include as many as necessary. The second points to a file. In either version, all columns must be provided in the order they were defined in the Schema XML. Be sure to add the xmlns:dal="http://www.netspective.org/Framework/Axiom/DataAccessLayer" namespace in the tag and replace the table name. There is a complete example available in the nefs-sample-books WEB-INF/database/data/initial-and-test-data.xml file.
- Changed the behavior of the <sql-ddl><default> tag so that the contents of the default tag are no longer quoted, Instead, the content is treated as a SQL expression. Note: this will break existing code that depends upon the <sql-ddl><default> tag automatically generating quoted strings. Now, if quotes are needed in the contents of the <sql-ddl><default> they must be added manually.
- Added a minor enhancement to the stored procedure feature to support a new datatype, CHAR . Developers can utilize this new data type for stored procedure parameters using the following setting: sql-type="char" .
- Fixed problem in JndiConnectionProvider.getAvailableDatasources() that was causing an NPE when no datasources were defined. This caused a problem in the Console Metrics page for those projects that did not have datasources (like nefs-sampler).
- Fixed problem where overriding stored procedure parameters were not being used. The fix changes the existing StoredProcedure.execute(...) API with the introduction of two variables for the overrding parameters instead of just one. e.g. sp.execute(Context, int[] , Object[] , boolean).
- Modified the generated where expr generation in query definitions using the contains-ignore-case condition so that UPPER() method is used on both sides of the comparison check even where there is no explicit bind expression defined.
- Perform better type management by allowing improved numeric type conversions between numeric columns. Now, numeric types should be able to convert from double to float, float to double, short to long, long to short, etc assuming the numers are not out of bounds.
Axiom 7.0.6 : Minor bug fixes and enhancements
- Fixed problem where the 'query' value source was complaining and not setting certain result styles.
- Added ability to return an accessor based on Index instead of only a column since indexes could have more than one column.
- Added special check in Update DML SQL for auto-inc columns. Now, if an auto-inc column is being updated the database policy will be queried to see if it should be removed from the Update DML SQL statement.
- When generating the SQL to retrieve, insert, update or delete records, there is an option now to prefix the table names with the schema name. This useful when the tables are owned by a different user than the one specified in the data source for connectivity.
- When locating the JDBC driver class in , error message now shows the actual driver class and not the value source spec in case the class is not found.
- In SQL DDL generator, added check to see if column is required by app or dbms in order to generate the NOT NULL constraint. Before this change, only the isRequiredByDmbs() flag was checked.
- Removed some System.out debugging statements left in the stored procedure classes.
- Improved support for error pages with additional features in <navigation-tree>'s and <page>'s <error-page> tag.
- Changed the delimiter of the ListValueSourceCommand from comma [,] to pipe [|] so that embedded value sources in the command will work properly. Before this change, only value sources that didn't contain commas in their specs were allowed.
- Changed the rule for DialogContext Beans generation so that only <dialog> tags that have the <dialog ... generate-dcb="yes"/> attribute will generate dialog context beans.
- Added new attribute called allow-execute-with-cancel-button to the <dialog> tag which allows execution of the dialog even when the Cancel button is pressed. Currently it is up to the developer to check for it and do the appropriate action in the execution listeners.
Sparx Application Platform ChangeLog
- Upgraded to Freemarker 2.3 Final Release.
- Implemented new FileSystemBrowser navigation page to allow any navigation area to become a file system browser. Files may be shown in-place or served to the end user. This feature allows any navigation page to dynamically read files/folders and show them as links and allow users to download the files (securely if needed).
- Added a new feature so that a panel tag in the tag could specify a column index and value source that should be checked to see if a row is marked "active". This is useful when showing a detail row of a series of records in report and highlighting a particular report. To use the new feature, just use the selected-row-column-specifier, selected-row-column-value, and selected-row-compare-value-as-text attributes of the QueryReportPanel
- Added online help functionality for dialog fields and infrastructure for general online help features. At this time, a new "help" tag is supported in tags but that functionality will be extended later for dialogs, pages, reports, etc. To use this functionality, a tag (template processor) is created for any that requires it. Then, a "help" page is added to the navigation tree and can be handled by the "help" page handler like so: <page name="help" hidden="yes" title="Help" handle-header="false" handle-footer="false"> <body-handler handler="help"/> </page>
- Added custom rendering capability to tabular report panels. Now, instead of having to create or modify skins to do basic custom processing of a HTML tabular report panel, the programmer can supply a template processor do do the custom rendering. The following is an example of a query with a presentation tag. Note the addition of the optional tag. The data type can be: sql-result-set, tabular-data-source, formatted-matrix, raw-matrix, and query-result-set. The most common usage will be either formatted-matrix where a variable called 'data' is a List implementation with all the rows. The data supplied in this case will be formatted using the formatting rules. The other commonly used type will be raw-matrix where the query is run and the data is supplied as an Object matrix as-is (no formatting is done). This allows complete and better control. <query name="account-programs"> <sql>select ... where x = ?</sql> <params> <param value="request:account-id"/> </params> <presentation> <panel> <report> <column col-index="0" hidden="yes"/> <column col-index="1" redirect="x/y?z=${0}"/> <column col-index="2" heading="Comments"/> </report> <renderer data-type="formatted-matrix"> <body> <![CDATA[ <#list data as row> <tr> <td>${row[1]}</td> <td>${row[2]}</td> </tr> </#list> ]]> </body> </renderer> </panel> </presentation>
- Added ability for DatabaseLoginAuthenticator to allow the password query to obtain the user and org names as well. Before this change, the password query was expected to have only one column, e.g. "select password from user_table where user_id = ?". Now, optionally, the query may be "select password, userId, userName, orgId, orgName from user_table where user_id = ?". Every item after the password is optional and if provided will fill in the AuthenticatedUser object automatically.
- Created a new dialog and page for reverse engineering database schemas from existing databases. The new page is found under Console -> Database -> Schemas -> Reverse Engineer.
- Refactored database connection assignment functionality for the dialog action class handlers. (1) Now, the database connection assignment after instance variables (field values) are assigned. (2) The getDataSourceId() method that would provide a string data source id must be called String getDataSourceName() and is considered a value source spec (so programmers should escape ':' in the return value) (3) A new method getDataSourceInfo() may be provided which returns one of the following types: List, String[], or Map. If a List or String[] is provided, then the 1st item is the driver class, second item is the conn url, followed by user name, password. If a Map is provided then key/value pairs must be provided. The inputs must match the DriverManagerConnectionProvider.DataSourceInfo.setInfo(Map) requirements.
- In ActionDialogContext, Added new method to open a connection based on driver class and URL instead of just by a data source id.
- Changed the errorPage.handlePage() call to errorPage.handlePageBody() to prevent infinite loops in case error pages throw their own exceptions when the body-affects-navigation flag is set to true.
- Added experimental support for conditional table templates using <choose>, <when>, <otherwise>, and <if> blocks. They are used the same way they are in XSLT. Note that the <when>, <otherwise>, and <if> blocks may contain any number of table references or may contain nested choose/if blocks as well. This new feature is not well tested but should work for most advanced cases. The _conditional attribute in <table> tags remains unchanged. <on-add-data> .... <choose> <when test="expression"> <table ...> </when> <otherwise> <table ...> </otherwise> </when> .... <if test="expression"> <table ...> </if> </on-add-data>
- Added new method for for defining custom logic or action for execution of a dialog. This model is probably the best model for most types of customization because action classes may be written as standard Java beans with no reference to the Sparx framework packages. Inversion of Control (IoC) using Java reflection is used to analyze the bean and use setXXX() style calls to the action class to set the dialog's fields values in a type-safe manner. Then, once all the field values are set, a simple execute() method is called giving the action class a chance to perform some process. After execution, the action class can either delegate the next action processing back to the framework or provide a framework-independent way of providing the next action's URL (like through workflow analysis). See this tutorial for an example of how to use the new feature.
- Added feature that allows insertion template code for Schema Record Editors so that it will be able to handle insertion of multiple rows when there is a "_loop-column" attribute present. This new attribute signifies that multiple rows should be inserted based on the number of values assigned to the specified column. This is useful for cases where a select field returns multiple values.
- Updated the display of the state values in dialog debug code so that they show all the values when the field can contain multiple values (e.g SelectField). The displayed format in the Dialog Context Debug panel will be "[x, y, z]" for fields that can have multiple values. Normal fields will still display "x" as before.
- Changed the HTML generated for the Calendar popup in the DateTime field. The previous version had a '#' in the anchor (<a href='#' onclick="showCalendar(...)">). Because of the '#' in the href whenever the calendar was shown it was scrolling the screen to the top of the page, which was an undesirable effect. Now the generated popup uses a tag instead of the <a> tag and won't touch the active scroll location.
Sparx 7.1.0 : Major enhancements and code roll-up
- API CHANGE: if you use the regular expression validation (reg-expr attribute) in TextField, you should no longer prefix or suffix the reg-expr value with '/'. For example, where you used reg-expr="/[A-z]*/" in the past, now you must just use reg-expr="[A-z]*" without the '/' at the beginning and end. If you include '/' as part of the expression, it will be considered a requirement in the pattern.
- Made change to DateTimeField so that if the size or max-length attributes are provided they override the format pattern length. Before this change, even if a 'size' or 'max-length' was provided, they were not honored (it always used the length of the date/time format pattern).
- Upgraded the DHTML calendar JavaScript library from 0.9.2 to 0.9.6. The source of the library remains Mishoo DTHML Calendar . The older version at Sparx/resources/theme/common/calendar-0.9.2 is now no longer in the CVS repository and is replaced by the Sparx/resources/theme/common/jscalendar-0.9.6 directory. API CHANGE: If you have your own navigation skin, please be sure to update the reference to the new directory. For example, if you have a reference to theme.getResourceUrl("/calendar-0.9.2/calendar-win2k-1.css") it needs to change to theme.getResourceUrl("/jscalendar-0.9.6/calendar-win2k-1.css").
- Added new navigation page flag called hidden-unless-active that works just like the hidden flag which keeps a page from being clicked by a user. However, this one is different in that once a page is active then the menu item will appear and be clickable.
- Created a new GUI component called panel editor which contains children elements that are comprised of a content and a dialog for editing the content . The dialog is for adding, editing, and deleting information related to the content of the panel editor child element. Currently, the panel editor supports report type children elements whose content is a report. An example of a declaration of panel editor is shown below: <panel-editors package="X"> <panel-editor name="Y" require-request-param="Z"> <frame heading="Sample Panel Editor"/> <element type="report" name="X" pk-column-index="0"> <dialog> ... ... </dialog> <query> ... ... </query> </element> <element .../> </panel-editor> </panel-editors> As you can see, the panel editors are defined using a package similar to dialogs and queries. Each panel editor can have multiple child elements and each element will have their own content declaration (in this case, a query and a dialog). The dialog will be used to add, edit, and delete records related to the query. The dialog doesn't have to be defined inside the panel editor and can be referenced using the dialogRef attribute. The attribute pk-column-index is used to define which column from the query report should be used for edit and delete actions. A panel editor can be invoked using commands like: command="panel-editor,X.Y" . Panel editors are demonstrated in the nefs-sample-medigy sample app.
- Added a new field type called Section which is similar to the Composite field. The new field allows grouping of fields based on how you want to lay them out in the dialog. The main idea behind this field is to allow different layouts within the dialog without having to extend from existing field classes. Currently, this field is NOT SUPPORTED in the default dialog skin. A new skin named modern will be introduced later on that will support this new field type.
- Added a new attribute for the Select field called max-item-per-row to support grouping for checkboxes. By default, the value is 1 and all checkboxes are displayed in one column. When the value is set to 2, the checkboxes will be displayed in two columns.
- HtmlTabularReport interface now includes an extra method called addActions() and BasicHtmlTabularReport implements it. API CHANGE: All classes that directly implement the interface WILL BREAK until the new method is implemented.
- Fixed problem where the dialog's retain-param values were being saved as hidden fields with a value of "null" (4 char) instead of an empty string.
Sparx 7.0.21 : Minor bug fixes and enhancements
- Added a new rule that a field that is hidden on the client side should not have the required validation rule run (on the client side). The server side check remains the responsibility of the programmer but a sample is provided in the NEFS Sampler application's "Sample Conditionals" input dialog example to help show how the server side can be done by adding a second conditional tag. NOTE: this change was made to the dialog.js (JavaScript) file so be sure to update your local APP_ROOT/sparx folder (use the upgrade instructions found on this site).
- Added 'summary' and 'description' properties to Navigation Pages so that skins may use those attributes to provide simple help or descriptions about the usage of pages. See the NEFS Sampler's 'container' body type for how it can be put to use.
- Added new panel layout style called "two-columns-stacked" which displays child panels in two columns. The child panels in each column are stacked on top of one another without row alignment like in "two-columns" style.
- Corrected defect which was causing query definitions to remember the last input after done button was pressed. The symptoms were that even after the done button was pressed and new input criteria was added to the dialog only the previous query was being executed. Also put in a workaround which was causing IE to lose the Servlet Session ID by putting in a getSession() call at the top of the navigation controller's doGet() method.
- Renamed and changed the method hideHeading() to isHideHeading(HtmlValueContext vc) in HtmlPanelFrame. The name change was to follow bean naming scheme and the method signature change was to check for panel flags set in the panel context. This is an API change and skins that use this method to draw panel frames MUST be modified.
- Modified the way the panel frame checks to see if the heading should be displayed or not. Instead of relying only on the frame flag, HIDE_HEADING, it will also check the context specific panel flag, RENDERFLAG_HIDE_FRAME_HEADING.
- Modified the BasicHtmlPanelSkin to display the top border when the heading of the panel is not displayed.
Sparx 7.0.20 : Minor bug fixed and enhancements
- Fixed problem where the no/false option for the radio style of the BooleanField was not being set by a default XML setting.
- Added two new methods to the BooleanField's value object: isNeither() and allowNeither(). The latter method is to check whether or not if the current field configuration allows the display of the "neither" option. The former method is to check if the "neither" option is selected.
- The radio style for the BooleanField will default to false if no default value is specified because according to the HTML specs, one radio button MUST always be selected. If the "neither" option is available (by setting the none-text attribute), then the "neither" option will be the default value when no default value is specified in XML.
- In login-manager's login-attempts-listener class, implemented usage of the simple max attempts reached message in addition to providing a template body. This allows max attempts to be prevented with either a simple message or a more elaborate template.
- In send-mail dialog execute handler, the to/cc/bcc recipients now allow multiple comma-separated e-mail addresses to be entered.
- Added convenience method to access column values of each row of a grid in a GridField dialog context bean. The new convenience method allows row-number-based access to values.
- Modified the default dialog skin to only display the hint of a field if the corresponding input is displayed.
- Added createErrorPage(Class) method to NavigationTree/Page so that <error-page class="x.y.z"> may be defined through XML instead of only instantiated through Java. Prior to this change custom error pages could only be defined through Java (in a custom page constructor).
- Added new NavigationSqlErrorPage class that could be used to handle specific SQL error codes. Now the following would work: <error-page class="com.netspective.sparx.navigate.error.NavigationSqlErrorPage" sql-code="123"> or <error-page class="...NavigationSqlErrorPage" start-sql-code="123" end-sql-code="456">
- Add label for HTML form elements, column headers for data tables, and alt for auto generated images for the CFR Section 508 compliance requirements and enhanced accessibility.
- Fixed problem where large values in CurrencyField were being submitted with the exponential symbol (e.g 1.234E3). The solution was to use the DecimalFormat to force the format of the double value.
- Added a default empty constructor to StandardDialogSkin so that extending child classes can be registered using XDM.
- The 'hasValue' check in DialogFieldConditionalApplyFlag class was only checking for NULLs. It is more logical to check for zero length values (after stripping spaces). This way values being checked MUST contain an actual non-zero length string for the 'hasValue' check to return TRUE.
- Removed getSelectedItem() method from the SelectField's value object because this method was misleading and does not work for select fields that allow multiple selections. The best way to get values from a select field is to do a getTextValue() or getTextValues() on the state value object. NOTE : This breaks current code and you will need to MODIFY your code. For example: myDialogContext.getMySelectField().getSelectedChoice() MUST be changed to myDialogContext.getMySelectFieldState().getValue().getTextValue() or myDialogContext.getMySelectFieldState().getValue().getTextValues() based on the number of values you are expecting from the select field.
- Fixed problem where the HtmlPanelBanner class was using HtmlPanelActions to delegate action handling but had its own style (horiz/vertical) attribute and not passing the style over to the HtmlPanelActions. Now, the style is delegated and should work in horizontal or vertical mode.
- Fixed problem where overriding stored procedure parameters were not being used. The fix changes the existing StoredProcedure.execute(...) API with the introduction of two variables for the overrding parameters instead of just one. e.g. sp.execute(Context, int[] , Object[] , boolean).
- Fixed another bug associated with cases where duplicates were being checked for edit mode when the associated record being searched did not have a valid primary key (because it allows INSERT when primary key is not found).
- Fixed problem where a NPE is thrown when no named servlet request attribute exists for request: value source.
- Fixed bug for cases when primary key value is null in SchemaRecordEditor dialog. See http://www.netspective.com/community/viewtopic.php?p=203#203 for discussion of problem.
Sparx 7.0.11 : Minor bug fixes and enhancements
- Moved the makeStateChanges call from the NavigationContext into the NavigationControllerServlet so that makeStateChanges is called after all login and security checks are conducted.
- Ensure that dialogs and command panels do not eat exceptions. In order for to work, exceptions must be propogated.
- Cleaned up the has-permissions and lack-permissions conditon checks.
- Instead of setting the active login manager using BasicDbHttpServletValueContext REQATTRNAME_ACTIVE_LOGIN_MANAGER request attribute, now allowing the getActiveLoginManager() method to directly query the NavigationControllerServlet.
- Delegated the checking of whether a dialog is in auto execute mode to the dialog. This refactoring was necessary so that the dialog (and not the dialog context) could decide if it was currently in auto-execute mode.
- Removed overloaded setChoices(String[] choices) from SelectField.java and moved the functionality into the constructor and setItems() methods of SelectFieldChoicesValueSource.
- Added new "record-editor-added-row-pk" value source that allows access to recently added schema record editor row primary key values.
- Added a new user authentication and login simulation feature. Now, during testing and other phases programmers can "soft-code" a simulated user, org, roles, and other AuthenticatedUser functionality in the project XML file.
- Added check for authUser not being null before checking for permissions.
Sparx 7.0.8 : Third-party library upgrade
- Upgraded to freemarker 2.3 pre 15 that should fix the nasty MRU cache NPE.
- Required the NavigationTree to be supplied in the NavigationPath/Page constructor. This is necessary for the template tag to work properly (because it needs a valid namespace).
- Added new Radeox wiki parser and template processor. Now you can define a page like the following:
<page ...>
<body type="wiki" source-file="name-of-file-value-source"/>
<body type="wiki" source-value="value-source-with-content"/>
<body type="wiki">
snipSnap wiki content filters and macros
</body>
This allows treating the content of a page (or panel) as Wiki text instead of freemarker or other templating system.
- Added special validation in the SchemaRecordEditorDialog to make sure that when updating and inserting a record unique constrains are not violated. This additional validation takes into account unique columns and indexes so that if a combination of a set of columns need to be unique, that constraint is checked against the database before updating or inserting that row.
- Added new StandardTemplateNavigationSkin that allows freemarker-template based navigation skins. This allow non-java-based navigation skins to be created for content-heavy sites (as opposed to app-heavy sites).
Sparx 7.0.3 : Minor bug fixes and enhancements
- Fixed problem where tabbed panels did not remember their state across page views. Now cookies are being set properly so that minimized panels and tabbed panels do proper state management.
- Fixed problem where Console was logging out erroneously after a few page views on IE. It seems that IE has a limit to the number of cookies allowed and after too many cookies it starts removing older cookies (which kills JSESSIONID). Now, Sparx 7.0.3 has consolidated numerous cookies into a smaller number to help prevent against accidental removal of JSESSIONID. This problem was specific to IE and did not seem to affect Mozilla or Safari.
- In com.netspective.sparx.theme.basic BasicHtmlTabularReportPanelSkin , updated the code to check if the title attribute of the panel/report/actions/action tag is not null before rendering it. This title attribute is typically only used in selectable reports.
- Improved support for error pages with additional features in <navigation-tree>'s and <page>'s <error-page> tag.
- Changed the delimiter of the ListValueSourceCommand from comma [,] to pipe [|] so that embedded value sources in the command will work properly. Before this change, only value sources that didn't contain commas in their specs were allowed.
- Changed the rule for DialogContext Beans generation so that only <dialog> tags that have the <dialog ... generate-dcb="yes"/> attribute will generate dialog context beans.
- Added new attribute called allow-execute-with-cancel-button to the <dialog> tag which allows execution of the dialog even when the Cancel button is pressed. Currently it is up to the developer to check for it and do the appropriate action in the execution listeners.
|
|
|
|