Commandment 4: Do Not Touch Blackbaud Product Development Tables or Specs
Tables
Let’s start with tables, which in the Infinity world are created by authoring TableSpecs. The first step to write an application on the Infinityplatform is to define a data model. A data model defines the structure of tables and the relationships between tables. Within Infinity, the data model is created with TableSpecs and CodeTableSpecs. An Infinity application consists of individual features (data forms, data lists, record operations, search lists, batch, business processes, etc.) that interact with the data within tables defined by the data model.
Generally speaking, customizations to the Infinity platform are additive. We can add a new table. We can add a new feature, such as a data form. We cannot alter an existing table that ships with the product. We cannot alter an existing data form that ships with the product. We cannot take a TableSpec that ships with the product, add a few columns to the TableSpec and then reload the spec. We cannot go to SQL Server Management Studio and modify the table by adding a few columns. We can use TableSpecs and CodeTableSpecs to create custom tables; but, we cannot alter tables that ship with the product.
But, what if I need to add a few columns of data to extend the CONSTITUENT table? Can’t I simply add the custom columns to the CONSTITUENT table? The answer is no, you may not add columns to tables created by Blackbaud. But, there are alternatives…
While you cannot add new columns to the existing table, you may create a new table containing the new columns and then create a one-to-one foreign key relationship between the out-of-the-box table and your new custom table. The PrimaryKeyAsForeignKeyTablename attribute within the top-level TableSpec XML element can be used to indicate that the primary key will also be a foreign key and specify the name of the foreign table. The PrimaryKeyAsForeignKeyTablename attribute is typically used with a one-to-one relationship to the table being extended, such as CONSTITUENT. For more information, see Data Model Definition Overview and Table Specs.
Features
The Infinity platform allows developers to load XML catalog items, commonly referred to as "specs," into the platform. After you load specs into the system, they are typically referred to as "features." When a catalog item is loaded, a row is added to the appropriate catalog item table that contains the XML definition of that spec. For example, it you load a TableSpec, a row is added to the TABLECATALOG table. If you load a QueryViewSpec a row is added to the QUERYVIEWCATALOG table.
Custom specs that you create with the Blackbaud Infinity SDK can be loaded multiple times. Developers can load a spec, then change the XML of the spec and reload it to update the version that in the database. This provides nearly unlimited extensibility. However, a software developer may not reload a spec created by Blackbaud Product Development that was created to build a feature that ships with the product because these out-of-the-box features may not be modified. You may copy a feature and change the appropriate globally unique identifiers that identify the feature within the Infinity catalog item table. For details. see Commandment 1: Do Not Reuse GUIDs.
FAQ
Tables that ship with the product
Question: How can I tell if a table ships with the product?
Answer: The table name within the database is not prefixed with USR_, which denotes a custom table that does not ship "out of the box" from Blackbaud. USR_ is the prefix that is used by Blackbaud Professional Services, third-party developers, and our customers to ensure there are no future naming conflicts with tables that ship with the product. For more information on prefixing custom SQL Object, see Commandment 5: Prefix Custom SQL Objects.
Exceptions
Question: Are there any exceptions to the rules?
Answer: Yes. You may alter the existing pages and tasks that ship with the product through configuration on the Shell Design page and Page Designer. For more information, see Pages and Advanced Configuration: Page Designer Overview.
Custom or shipped with product
Question: How can I tell if a feature is a custom feature or one that ships with the product?
Answer: Use a "Go To" action or the appropriate feature search task to view the metadata for feature. Look for the Author value within the summary section of the feature metadata page.
Data form extensions
Question: Don't data form extensions and data form add-ins break this commandment?
Answer: In short, no. Both of these mechanisms allow you to add new functionality to out-of-the-box data forms, but they do not alter the existing Data Form Specs. For more information, see Data Form Extension and Data Form Add-In.