# Seaside Component Model

A ***Seaside component*** is a programmable component that can be called from the **BPM Web Application** to perform a customized operation.\
\
Usually each task in [Bizagi Modeler](http://www.bizagi.com/en/products/bpm-suite/modeler) ® is an **Orbeon Form** but it is also possible to use a ***Seaside component***. The ***Seaside component*** provides a programmable way to perform very specialized behavior that can not be achieved with a Form.\
\
To create a ***Seaside component*** there are various choices that must be taken.\
If the domain object needs indexes for its instance variables then it must be a a subclass of ***BpmSeasideIntegrationObject.*** If indexes are not needed some protocol methods can be left empty (they will be invoked but no action will be taken).

This subclass is the domain class that will perform the specialized behavior and it will be used by the Web class that is the interface for this behavior. The subclass must comply with the following protocol:\
&#x20;**Class Side**

**classOf:** ***fieldName***\
This method must answer the GemStone/S type of the field named \[fieldName]. The possible types are:

* AppFieldStringValue
* AppFieldDateValue
* AppFieldTimeValue
* AppFieldTimeStampValue
* AppFieldNumberValue
* AppFieldBooelanValue

**getObjectName**\
This method answer aString with the name of the component. The name must be unique in the BPM Process<br>

**searchFields**\
This method must answer anArray which is a sub set of the fields of the receiver. These fields are going to be used for fast/indexed search.\
\
**summaryFields**\
This method must answer anArray which is a sub set of the fields of the receiver. These fields are going to be displayed in the Web App as description of a task.\
\
**Instance Side**

**fieldValueAt:** ***fieldName***\
Asnwer a GemStone/S object that represent the value of field named \[fieldName].\
\
**getAllFields**\
This method must answer aCollection with all field's names.\
\
&#x20;Create a subclass of ***WASeasideBpmIntegration***\
&#x20;This subclass render the Web page which is the interface class for the domain class.\
&#x20;The component must comply with the following protocol:\
&#x20;**Class Side**

**defaultModel**\
This method must answer an instance of the domain class.

The default installation script will install the following ***Seaside Component***:\
&#x20;Domain class: ***BpmSeasideTempObject***\
&#x20;Web class: ***WASeasideBpmIntegrationTestForm***\
&#x20;Both classes have the required methods and other methods as an example of a ***Seaside component***.
