abstract class %ZEN.DataModel.ObjectDataModel
extends %ZEN.DataModel.DataModel
This class is used to implement the Model portion of the Zen
Model-View-Controller mechanism.
An ObjectDataModel is specific type of DataModel that
contains a set of named values (properties).
The properties of an ObjectDataModel can either be formally defined within
the ObjectDataModel class, or they can be "virtual" properties - properties
defined at run-time.
When an ObjectDataModel is displayed using a %ZEN.Component.dynaForm, the
properties will be displayed in the following default ways:
parameter DOMAIN;
Localization domain.
DataModel classes that wish to support localization must provide a value for this
within subclasses.
parameter DYNAMICPROPERTIES = 1;
If true (the default), then this dataModel class supports dynamic properties:
that is, you can reference arbitrary property names within the data model object.
Any such properties that are not formally defined will refer to a location within the
private property, %data using the dynamic dispatch mechanism.
Set this to false to disable this feature.
property %source
as %RegisteredObject(POPORDER=-1,XMLPROJECTION="NONE") [ Transient ];
If needed, this transient property is used to hold a copy of the source
object used by this model.
classmethod %CreateModelInstance(pID As %String, pConcurrency As %Integer = -1, Output pSC As %Status = $$$OK)
as %RegisteredObject
Create an instance of this DataModel object.
Subclasses may override this for special behavior.
The default implementation returns the DataModel itself as the source
object (this allows for simple DataModel classes that have no actual
source object).
classmethod %DeleteModel(pID As %String)
as %Status
Delete a given DataModel instance.
This is implemented by the subclasses of this class by providing implementations
of the %OnDeleteModel and %OnDeleteSource methods.
classmethod %GetJSValidationCode()
as %String
Internal method.
This generated method contructs client-side JS validation code
for the properties within this provider.
The client-side code is returned as a string that is converted to
JS function at run-time.
final classmethod %GetPropertyInfo(Output pInfo As %String, pExtended As %Boolean = 0, pModelId As %String = "", pContainer As %String = "")
as %Status
Return an array, subscripted by property name, describing the properties within this DataModel.
These are returned as an array of the form:
pInfo(name) = seqno
If pExtended is true (1), then the array will include
additional nodes for each property. This information is used to
create dynamic forms for this model.
Applications should not change this method. To modify the information
returned by this method, override the %OnGetPropertyInfo
callback method.
abstract method %OnCopyDataFromModel(ByRef pData)
as %Status
If defined, this callback method is invoked just as this DataModel object
is about to copy its values into a dataController.
pData is an array containing the values that will be provided to the
controller, subscripted by property name.
abstract method %OnCopyDataToModel(ByRef pData)
as %Status
If defined, this callback method is invoked just before the dataController
copies its values into the properties of this DataModel object.
pData is an array containing the values provided by the
controller, subscripted by property name.
classmethod %OnDeleteModel(pID As %String)
as %Status
This callback method is invoked when the DataModel is deleted.
This is implemented by the subclasses of this class.
classmethod %OnDeleteSource(pID As %String)
as %Status
This callback method is called when the DataModel is deleted. If
implemented, it is responsible for making the appropriate deletes
against the data source.
abstract classmethod %OnGetPropertyInfo(pIndex As %Integer, ByRef pInfo As %String, pExtended As %Boolean = 0, pModelId As %String = "", pContainer As %String = "")
as %Status
This callback method, if present, is called by the %GetPropertyInfo
method. This gives subclasses the opportunity to add additional property
descriptions to the DataModel.
pIndex is the index number that should be used to add the next
property to the list.
pInfo is a multidimensional array containing information about the
properties of this data model.
If pExtended is true, then complete information about the properties
should be returned; if false, then only property names need be returned (applications
can simply ignore this).
pModelId is the id value of the current Data Model instance. This is provided
for cases where the contents of a dynamic form may vary by instance of the Data Model object.
method %OnLoadModel(pSource As %RegisteredObject)
as %Status
This callback method does the actual work of loading values from the source object.
method %OnNewSource(Output pSC As %Status = $$$OK)
as %RegisteredObject
This callback method is invoked when a new instance of DataModel is required.
If implemented, it returns a new instance of the data source object
used by the DataModel.
The default implementation returns the DataModel itself as the source
object (this allows for simple DataModel classes that have no actual
source object).
method %OnOpenSource(pID As %String, pConcurrency As %Integer = -1, Output pSC As %Status = $$$OK)
as %RegisteredObject
This callback method is invoked when a DataModel is loaded into memory.
If implemented, it loads an instance of the data source object
used by the DataModel.
The default implementation returns the DataModel itself as the source
object (this allows for simple DataModel classes that have no actual
source object).
method %OnSaveSource(pSource As %RegisteredObject)
as %Status
This callback method is called when the DataModel is saved. If
implemented, it is responsible for saving changes to the data source.
method %OnStoreModel(pSource As %RegisteredObject)
as %Status
This callback method does the actual work of copying values
from the DataModel to the data source.
The default implementation is an expression method.
method %OnSubmit(pSubmit As %ZEN.Submit)
as %Status
If defined, this callback is called when a form connected to this
DataModel is submitted.
The contents of this DataModel will be filled in from the submitted values
before this callback is invoked.
The default implementation is to store the submitted values back to the model.
final classmethod %OpenModel(pID As %String, pConcurrency As %Integer = -1, Output pSC As %Status = $$$OK)
as %RegisteredObject
Open and return an instance of this DataModel object (given an id value pID and
fill in its property values.
The actual loading of the properties is carried out by the %OnLoadModel method.
The property values can come from an independent
data source object or may be local to this data model object.
If pID is "", then a new instance of data model object should
be created.
pConcurrency is an optional concurrency flag that can be used in cases
where the data source is a persistent object.
On return, pSC contains a status code indicating success of failure.
final method %SaveModel()
as %Status
Save the values currently within this DataModel object back to a data source.
Before saving, the values of the properties will be validated (as specified
by the property definitions).
The actual save operation works as follows:
The %OnStoreModel callback is invoked. This copies the
properties of this model back to the data source object (if there is an
independent data source).
The %OnSaveSource callback is invoked. This causes the independent
data source object to be saved.
Returns a status code indicating success or failure.
classmethod %SubmitHandler(pSubmit As %ZEN.Submit)
as %Status
Internal method.
If a form connected to this DataModel is submitted, this method handles the
server-side processing of the submit.