Application Schema for Mobileforce Applications
Data Table Schema for Mobileforce Applications
- Updated on Feb 2, 2026
- Published on Jun 17, 2023
- 3 minute(s) read
- TL
- MS
Every Mobileforce application relies on a database with specific tables that represent the data, layout, and presentation of the application. These tables are standard tables (share across all applications) as well as custom tables (custom to a specific application). Together these tables are referred to as EasyCLM (for Customer Lifecycle Management), an enhancement to typical CRM (for Customer Relationship Management) tables (such as Accounts, Opportunities, Leads, and Contacts)
EasyCLM Tables
EasyCLM Tables include a set of standard tables and fields as well as custom objects, fields, and labels. The design/schema of EasyCLM Tables can be found in easyclm_v{xxx}.sql where {xxx} refers to the latest version. EasyCLM Tables are automatically generated from this design/schema.
EasyCLM Tables include Primary Keys, and Foreign Key Constraints. Sometimes, EasyCLM Tables can also have references to other tables and those other tables are called "Related Tables".
The design of EasyCLM Table extensions ensures backward compatibility.
Standard Tables
Some EasyCLM Tables are standard tables: such as Account, Contact, Opportunity, and User. These tables are typically found in almost all CRMs, and when Mobileforce applications integrate with an external CRM, then these tables are mapped 1-1 to the corresponding CRM tables. Standard tables are found in all Mobileforce application instances
Custom Tables
As the name implies, custom tables are created for specific needs of individual applications. These tables are created using CustomField, CustomLabel, CustomObject, and CustomSchemaAttribute. For example, CustomField table keeps all the Custom Fields that have been added to the various tables.
As a convention, custom fields in Mobileforce EasyCLM end with the name "__c"
FSM Related Tables
Some EasyCLM Tables are explicitly intended for use by the Field Service Management (FSM) Application. Examples of such tables include: Appointment, Inventory, ServiceTask, Office, etc.
CPQ Related Tables
Some EasyCLM Tables are explicitly intended for use by the Configure, Price, Quote (CPQ) Application Examples of such tables include: MFCPQPriceBook, MFCPQProduct, MFCPQQuote etc. Note that any table name that starts with MFCPQ is intended for use exclusively by the Mobileforce CPQ product.
History Recording Tables
Some EasyCLM Tables are intended to keep track of the history of usage of other tables. For instance, the Appointment table has an associated AppointmentHistory table and InstalledItem has an associated InstalledItemHistory table which keeps track of the history of Appointment (Creation and Usage).. Similarly InstalledItem table has a corresponding InstalledItemHistory table and WorkOrder table has a corresponding WorkOrderHistory Table.
Accessing the schema for a specific application
Every Mobileforce application is created within the context of an account. Thus, to access the schema for this application, use the URL
Code snippet
https://apps.mobileforcesoftware.com/adapters/easyclm/schema.php?account=**account**&app=**application**
Regenerating the Schema
If the application CLM Table structure are changed, the EasyCLM Table schema needs to be re-generated. To do this, just invoke this url:
Code snippet
https://apps.mobileforcesoftware.com/adapters/easyclm/schema.php?account=**account**&app=**application**&flush=1
Finally, note that applications which access the "stage" instance of Mobileforce code (i.e., not the production instance) must use the &flush=1
EasyCLM Table Schema can also be re-generated using the Mobileforce Manager. See the screenshot below, where the easyCLM schema can be deleted. Then, once a table is accessed again, the schema will automatically be regenerated by the Mobileforce application.
Adding Buttons to Datatable Screens
Datatable screens support the addition of action buttons using a Prop Key. Here's how you add action buttons
Code snippet
<prop key="action-button-name">Button Name|list-table_name|true|javascript:actionAjax('url',0);</prop>
The -name in the prop key name provides a unique key name.
The list- indicates that it is the list layout of the table for which you need the button. Other layouts that are supported are “read-” and “update-”
table_name is the datatable name where you need an action button.
For example, the following is a "Product Update" Button
Code snippet
<prop key="action-button-update">Product Update|list-table_name|true|javascript:actionAjax('https://apps.mobileforcesoftware.com/path/phpcode.php?[[]]',0);</prop>
Another example:
Code snippet
<prop acl="!role" key="action-button-cpq-list-SpecificTable">View Related CPQ Quotes|update-SpecialTable|true|javascript:webScreen('https://[FM_HOST]/action.php?path=Home%3Bcpq-NewQuote&action=list_cpq&s=[s]&id=fld(id);windowtop=1')</prop>
Yet another example
Code snippet
<prop key="action-button-newquote">New Quote|read-Opportunity|!empty(fld(amount))|javascript:webScreen('https://urlpath.mobileforcesoftware.com/path.php?s=[s]&opportunity-id=[id]&dist=0&env=&email=some@email.com');</prop>