Backwards Compatibility Issues for Custom Tiles
Tile changes for Service Pack 4 attempt to maintain backwards compatibility, but some risk of backwards compatibility issues exist because the CONSTITUENTSUMMARYAVAILABLETILE or CONSTITUENTSUMMARYSELECTEDTILE tables were removed from the Blackbaud CRM database and replaced with insertable views. When it is necessary to remove tables from the Blackbaud CRM database, replacing them with insertable views is a useful strategy to preserve binary compatibility. However, some compatibility issues can still arise from this method.
Most users who created custom tiles in Blackbaud CRM Service Pack 3 or prior should be able to upgrade to Service Pack 4 without making any changes to their tiles, but the following backwards compatibility issues could become problems if SQL queries were made against the CONSTITUENTSUMMARYAVAILABLETILE or CONSTITUENTSUMMARYSELECTEDTILE tables.
Queries of Users Who Display No Tiles
Under the old table design, users who configured their constituent summary to hide all tiles were assigned dummy rows in the available tiles table. In the new table design, they are assigned entries in the APPUSERSUMMARYTILECONTEXT table but are not assigned any rows in the new the SELECTEDSUMMARYTILE table.
The tile selection preferences of users are migrated to the new table structure in Service Pack 4, but the dummy rows in the available tiles table are not migrated because that data is no longer useful. Therefore, any queries that rely on those dummy rows will no longer function properly, and you will need to be rewrite them to use the new table structure.
Non-ANSI Update and Delete Statements
SQL UPDATE and DELETE statements that include FROM clauses that reference the CONSTITUENTSUMMARYAVAILABLETILE or CONSTITUENTSUMMARYSELECTEDTILE tables will no longer work. SQL Server supports this syntax for tables even though it is not ANSI-standard SQL, but it does not support the syntax for insertable views. If you wrote queries that reference the old tables with this syntax, you need to rewrite them.
-
You can update the query to reference the new tables.
-
You can update the query either to use either an ANSI-standard UPDATE statement that does not include a FROM clause or to use a MERGE statement.
CreateChildCollectionFunction in SQL Function Spec
If you created a custom SQL function spec that uses the CreateChildCollectionFunction element and includes the CONSTITUENTSUMMARYAVAILABLETILE or CONSTITUENTSUMMARYSELECTEDTILE table in the BaseTableName attribute, then you need to rewrite the update function manually (maintaining the current name and removing the element from the spec).
To speed up the process, you can get the text of the generated procedures with SQL Server Management Studio and add appropriate specs to your catalog.
The affected procedures are named USP_*_UPDATEFROMXML and need to be written manually.
You need to rewrite the UPDATE statement by following the "Non ANSI update and delete statements" instructions.
LinqToSql Relationships
When using LinqToSql to query data, the relationships between the upgraded tables and other tables in the database will no longer be generated automatically.
If you maintain the LinqToSql classes manually, then you can add a primary key to each one of the upgraded tables and then add the relationships manually.
If you use BBSolder, you can use the View tag for the upgraded tables. This tag was extended to allow for explicit relationship declaration between views and tables.
Database Exceptions May Have Different Text
If you compare the text of exceptions thrown by SQL Server (and not by specific calls to "raiserror"), the comparisons may fail as the names of the tables used for storage changed.
In particular, ExpectedDBExceptions tags in specs may no longer catch the specific exceptions related to the CONSTITUENTSUMMARYAVAILABLETILE or CONSTITUENTSUMMARYSELECTEDTILE tables.
Audit Tables
It is no longer possible to use auditing on the CONSTITUENTSUMMARYAVAILABLETILE and CONSTITUENTSUMMARYSELECTEDTILE tables. Their audit tables and rows in those tables still exist, but they will no longer be updated with new information. Going forward, please use the audit tables for the AVAILABLESUMMARYTILE and SELECTEDSUMMARYTILE tables for your auditing needs.