Post date: Jan 02, 2019 6:46:36 PM
The GenericObject class in QBO offers a SelectByTemplate method to enforce repeatability. Two recent changes were introduced that can have unexpected consequences for existing installations:
{Table}Template and {Table}TemplateID may be used as synonyms for Template and TemplateID
SelectByTemplate no longer calls Save when detecting a new instance of a class
Background
QBO has always supported the concept of templated repeatability as:
One generic object per parent
One active generic object per parent, and
Many generic objects per parent
For example, one can defined a DecisionTemplate called "Invoice Client" as one active per parent where calling
Decision/Save?Object=Organization&ObjectID=1&Template=Invoice Client
will result in:
If an existing Invoice Client workflow exists and is open, it will be "reused" (no new workflow is created),
If an existing Invoice Client workflow exists and is not open, a new Invoice Client workflow will be created, or
If no existing Invoice Client workflow exists, a new Invoice Client workflow will be created
However, the following method signatures did not abide by repeatability rules:
Decision/Save?Object=Organization&ObjectID=1&DecisionTemplate=Invoice Client
Decision/Save?Object=Organization&ObjectID=1&DecisionTemplateID=X
This exposed a bug in the ITemplate.CreateInstance pattern, where the {Table}TemplateID property was being set, instead of TemplateID, causing repeatability to be ignored when creating generic objects from workflows.
The fix for this now supports methods signature using {Table}Template or {Table}TemplateID, but in turn exposed another bug:
SetProperties?Object=Organization&ObjectID=1&DecisionTemplateID=X
triggers a Save call. Normally, this save call has no effective impact, because SelectByTemplate is almost always called from Save anyway. However, when adding a Message from the UI, Message/Merge is called, which in turn calls Message/SelectByTemplate, which triggered a Save on the Merge, even if a user never clicks Save.
Given the broad impact of removing the SelectByTemplate Save call, this change has been feature-switched:
qbo.Application.Properties.Settings.SelectByTemplateAutoSave = false
If this change results in undesirable behavior of a given installation, take the following steps:
From Design > Modules > Matrix > Settings, change the qbo.Application.Properties.Settings.SelectByTemplateAutoSave setting to true
Notify Quandis support of your specific use case so our architecture team can consider workarounds