Data Policies
Designer > Objects > {object} > Data Policies
Data policies model your business rules and enable automation of processes around data records. They let you define a series of checks and validations, automatically update dependent data, send emails, and carry out many other tasks. For example, when a Prospect is converted to an Account, you could automatically send emails to related Contacts to say thanks or congratulations.
About Data Policies
A data policy lets you make things happen automatically in a variety of circumstances. Data policies have a variety of attributes that determine how and when they execute, how many things they do, and what kinds of things they do:
- Activation Type
- The way in which the data policy is initiated. There are two activation types: Action-Based (somebody did something) and Calendar-Based (an alarm went off).
- Triggering Criteria
- When a data policy is activated, the triggering criteria is checked to see if the policy should "fire" (execute). By default, a policy always executes. But by specifying different criteria, you can cause the policy to execute only under certain conditions--for example, based on data in the record, who the current user is, or what role they play.
- Data Policy Actions
- The things the data policy does when it executes. Multiple data policy actions can be defined for any given data policy.
Action Based Data Policies
An action-based data policy:
- Can be triggered by one or more events.
- Can be conditioned to fire only when certain conditions are met.
- Can be invoked before or after a record is applied to the database.
- Can be invoked before or after batch updates.
- Activation Sequence
- An action-based data policy can be set to execute either before or after the triggering event. For example:
- Before adding or updating – Validate the incoming data, accept it or reject it by throwing an exception
- After adding or updating – Update Related Objects
- Triggering Action
- One or more events can be chosen to trigger a data policy.
- Examples of Action Based Data Policies
- In a sales department, the local sales representative automatically receives an email notification when a prospective client requests information from the organization's web site. The data policy is triggered by the addition of a new record (prospect), choosing the email recipient based on the territory.
- In a manufacturing operation, the parts department wants to know if the inventory on a popular part is low. The data policy is triggered by an update to the quantity of units in inventory.
- When adding new records, validate the address/phone/email fields before allowing the records to be added to the database
- When importing records (leads file from a tradeshow, for example), verify that the record is not a duplicate of any already existing person/company
Learn more: Build an Action Based Data Policy
Calendar Based Data Policies
Calendar based data policy actions are triggered on a schedule, defined by the following parameters:
- Start Date and Time
- Non Repeating or Repeating (Daily, Weekly, Monthly, Yearly)
- End Date or Never-ending
Examples
- Drip Campaigns use Calendar-based data policies. These policies detect values and conditions of the data fields and based on them, execute a combination of actions including: sending an email, assigning a task, updating the record content, delivering a Send Outbound message to an external system, or running Java code.
- In a front-desk reservation system, set the criteria to verify that the check-in date must be in the future (after Today) and that the check-out date follows the check-in date
- In a doggy daycare system, check that the pet owner's account has enough pre-paid credits for that week's care
Learn more:
About Policy Triggering Criteria
To see if a data policy should be triggered, tests are run on its Triggering Criteria. There are three kinds of criteria you can specify, alone or in combination:
- Date Criteria
- Trigger the policy when one of the standard date fields in the record (date created, date modified, or date of change in workflow state) or when one of the custom date fields defined in the object is within a specified date range:
- Within the current, next, or previous week, month, or day.
- Within a specified calendar year or calendar quarter.
- Within a specified Financial Period.
- Field Criteria
- Trigger the policy when one or more fields compare successfully against specified values. (For example, order_total > $5,000.)
- Formula-based Criteria
- Create a formula-expression from a combination of object fields and User fields, where the user is the person performing the action on the record.
Considerations
- If no criteria are specified, the criteria resolves to TRUE. (The actions associated with the Data Policy are always performed.)
- If a combination of criteria is specified, all of them must return true for the Data Policy to fire.
- Formula-based Criteria are Expressions, which must resolve to TRUE or FALSE
- If the Expression described by the criteria is FALSE, the associated actions are not applied. If TRUE, the Data Policy is executed, and any associated Actions are invoked.
Field and Formula Triggers
In these examples of criteria expressions, note that the Field Display Type and Formula Function are used together to create a Logical result for the Policy Triggering Criteria.
These examples are presented as questions, because the result must be Logical: YES/NO or TRUE/FALSE.
Example Expression Is the submitted date more than seven days before the departure date? - DATECOMP(departure_date, submit_date) > 7
- Note that the Field Display Type is DATE for both arguments
Is the inventory count less than 25? - Inventory_Count < 25
- In this example, the Field Display Type for Inventory_Count is NUMBER
Is the inventory value missing? - Inventory_Count = BLANK
- The test for an empty numeric or date field is BLANK.
Is a text field empty? - state = ''
- The test for an empty string is two single quotes (''), not the double-quote character (").
- Learn more: Filter Expressions in Reports and Data Policies
Triggering Criteria in Action Based Data Policies
This list describes the action triggers, and eligible objects:
- Note: Data policies can be created for all objects, except Products and Price Books
Trigger Triggered when... Eligible Objects Add Adding a new record All Update Updating an existing record All Delete Deleting an existing record All Ownership Change Changing a record's owner All, except Tasks/Appointments Workflow State Change Changing a record's workflow state All Import Batch During a batch import All Import Record During a record import All, except Tasks/Appointments Signed This event occurs when a record is signed using a Digital Signature All Unsigned This event occurs when a signature is invalidated. It also occurs when a user clicks Verify Signature on an invalid signature. All Merge When converting a Prospect to an Account with the Merge option Prospects and Accounts Only Convert to Account When converting a Prospect to an Account without the Merge option Prospects Only When Due When a Task or Appointment becomes due Tasks/Appointments Only
Triggering Criteria in Calendar Based Data Policies
Calendar Based Data Policies offer additional date-driven triggers that don't depend on any particular action.
About Data Policy Actions
Things to know:
- Multiple data policy actions can be specified for a data policy
- Several types of data policy actions can be executed
- They can be invoked in any order (or reordered as needed)
- In a Calendar Based Data Policy, all of the following actions are available
- In an Action Based Data Policy, the Activation Sequence determines which actions are available
Actions Description Activation Sequence Before Triggering Actions (Pre)
Activation Sequence After Triggering Actions (Post)
Create Task Create a task and assign it to selected users (Record Owner, Supervisor of Record Owner, Specific User, System Administration) Send Email Send an email message based on roles; optionally, send the message to an individual email address Change Record Owner Change the record owner, reassigning the record and effectively managing data flow Add Record Select an object to add a record to, and choose whether or not to execute data policies triggered by the addition. Update Record Update the record; change the value of any field, using any formula you define.
In addition to fields in the current record, you can specify fields in Lookup-target records using "dot notation". For example, a data policy action for an Order record could update a field in a related Customer record: related_to_Customer.email_address. (In the GUI, Lookup fields appear with a ">" after the name. Clicking one opens a new list box opens that displays fields from the target object.)
Learn more: Updating a Field in a Related Record during a Data Policy "Update Record" Action- Important:
- This action does not generate record update events (in order to prevent infinite recursions).
Send Outbound Message With this data policy action, REST messages can be sent to a valid end point Post Item to Relay Feed Post a message to a Relay Feed. (All existing feeds are available.) Assign Follower in Relay Assign a user as a follower of a record (Available if Relay is enabled for the object.) Remove Follower in Relay Remove a user as a follower of a record (Available if Relay is enabled for the object.) Invoke Java Method Invoke a method in a Java class Execute Java Code Execute a custom data policy action by writing Java code and making calls to the Java API
Add a Data Policy
- Click Designer > Objects > {object}
- Click the Data Policies tab
- Click the [New Policy] button
- Enter the following information:
- Name
- Policy name
- Enabled
- Check the Enabled checkbox icon to enable the policy
- Select the Activation Trigger:
- Follow the instructions in sections below to build an action-based or calendar-based data policy.
Build an Action Based Data Policy
- Complete the steps to Add a Data Policy.
- Fill in the information described below.
- Click [Save]
- Policy Information
- Activation Sequence
- Choose whether to invoke the policy before or after the triggering actions occur, depending on what goals the data policy needs to achieve:
Writes (adds, updates, deletes) Before Triggering Actions Validate data before committing the action to the database. For example: Prevent the addition of duplicate records, or verify that an essential field is not empty. After Triggering Actions Take some action based on the data in the record. For example: Send an email when a count exceeds some threshhold.
- Triggering Action(s)
- Choose to invoke the data policy when any of these activities are applied to a record in the current object. Learn more: Available Triggers and Eligible Objects
- Add activates the policy when a record is added
- Update activates the policy when a record is updated
- Delete activates the policy when a record is deleted
- Ownership Change activates the policy when a record changes ownership (not available in Tasks/Appointments)
- Workflow State Change activates the policy when the workflow state changes
- Import Batch activates the policy during a batch import
- Import Record activates the policy when a record is imported
- Merge activates the policy when the Merge option is selected while Converting Prospect to Accounts
- Convert to Account activates the policy when converting Prospect to Accounts
- When Due activates the policy when a Task or Appointment becomes due (on End Date) (only available in Tasks/Appointments)
- Run As
- Executes an action using the permissions of the specified User, (not the User creating the data policy, or the User who causes the data policy to fire); Choose a User with the required Data Access Permissions to carry the actions defined in the policy.
- Date Criteria (optional)
- Select a field (Date Completed/Date Created/Date Modified/Due Date)
- Select an operator to specify a range of dates
- Optionally, add additional date criteria
- Field Criteria (optional)
- Specify fields and values to check for.
- Combine field checks into logical expressions using AND, OR, and parentheses
- Formula-Based Criteria (optional)
- Specify Filter Expressions:
- Select fields, operators, and functions.
- Type literal values in single quotes to complete the expression.
- Specify Filter Expressions:
Note:
- When building a formula, click the [Check Syntax] button to validate the expression.
- Remember that Policy Triggering Criteria expressions must resolve to a Logical type.
Build a Calendar Based Data Policy
- Complete the steps to Add a Data Policy.
- Fill in the information described below.
- Click [Save]
- Policy Settings
- Activation Date
- The date to start the actions
- Activation Time
- The time to start the actions
- Repeating Frequency
- Select a Repeating Frequency option to schedule repetitions.
- Run As
- Executes an action using the permissions of the specified User, (not the User creating the data policy, or the User who causes the data policy to fire); Choose a User with the required Data Access Permissions to carry the actions defined in the policy.
- Date Criteria (optional)
- Select a field (Date Completed/Date Created/Date Modified/Due Date)
- Select an operator to specify a range of dates
- Optionally, add additional date criteria
- Field Criteria (optional)
- Specify fields and values to check for.
- Combine field checks into logical expressions using AND, OR, and parentheses
- Formula-Based Criteria (optional)
- Specify Filter Expressions:
- Select fields, operators, and functions.
- Type literal values in single quotes to complete the expression.
- Specify Filter Expressions:
Note:
- When building a formula, click the [Check Syntax] button to validate the expression.
- Remember that Policy Triggering Criteria expressions must resolve to a Logical type.
Add Actions to a Data Policy
To specify the actions that occur when the Data Policy is executed:
- Click Designer > Objects > {object}
- Click the Data Policies tab
- Select an existing Data Policy or click [New Policy] to create a new one.
Note: When you create a new policy, you specify its triggering criteria, but it has no actions until you take the steps that follow. - Click the [New Action] button to add a new action
- Select one of the actions below:
- Click [Save].
- Optionally, add additional actions, or [Reorder] the actions
Create Task
To create a Task, complete the following fields:
- Action Name
- Name of the action
- Assigned To
- Select one of the following:
- Record Owner
- Supervisor of Record Owner
- Specific User
- System Administrator
- Subject
- Subject of the Task
- Days from trigger for when task is due
- Automatically make this task due for a specified number of days after the policy is triggered; '0' will use the Trigger Date as the Due Date
- Do not notify
- Turn off the notification message that would otherwise go out to the owner of the task.
- Description
- Task description
Send Email
To send an email message, complete the following fields:
- From
- Sender, choose from: Record Owner, Record Owner Supervisor, or a Specific User (opens a lookup window to Users)
- To
- Recipent(s), choose from: Record Owner, Record Owner Supervisor, Specific Email Addresses (opens a lookup window to Users and Contacts), System Administrator, Primary Contact, or other Related to options
- Cc
- Email address of person(s) who should be copied
- Bcc
- Email address of person(s) who should be blind-copied (these email addresses are hidden from all recipients, and are visible only to the sender)
- Subject
- Subject of the email message
- Editor Type
- Select a type of editor
- Learn More: Send Email
- Description
- Description of the message
Change Record Owner
Assign the record to a new owner.
Update Record
Change a field in the record (status, date, description, etc.)
- Considerations
- Data policies are executed after field validations occur. That sequence assures that the data policy is acting on valid data. (But it also means the data policy has the ability to put invalid data into the current record, since that data will not be validated.)
- Data policies are executed after formula-fields are evaluated. So if data in the current record is modified by the data policy, any relevant formula-field calculations need to be carried out by the data policy, since they will not occur automatically.
Send Outbound Message
In a Data Policy, it is possible to Send an Outbound Message via REST.
- Considerations
- The services which support HTTP POST requests can be accessed and the response HTTP status code is logged into the Debug Log
- For a pre-trigger action-based policy, the only available action is Invoke Java Method
- If the Delete triggering action is chosen, the only available action is Invoke Java Method
- To change a post-trigger policy to a pre-trigger policy, all actions associated with post-trigger policy must be deleted, since none of them are possible for a pre-trigger action
Note:
- Pre-trigger = Before Triggering Actions
- Post-trigger = After Triggering Actions
Post Item to Relay Feed
Use Relay to post a message.
Assign follower in Relay
Add a follower to a Relay feed.
Remove Follower in Relay
Remove a follower from a feed.
Invoke Method
Select a method to execute from an existing Java class.
Learn more: Invoke a Java Method From a Data Policy
- Considerations
- When modifying a different record (possibly in a different object), that modification will cause any relevant data policies to fire for that record, as well.
Execute Java Code
Give the action a name, and enter the Java code to execute.
Click [Select Java API] button to automatically enter code from a list of APIs for the platform.
Learn more:
Writing Java Code for a Data Policy
When an action-based data policy fires, a single record is processed. When a calendar-based data policy fires, multiple records may be processed.
In the latter case, the conditions defined by the data policy decide which rows will be processed. The Java code is invoked for each record that matches.
In both cases, the code needs to be written to operate on a single record.
Accessing the Incoming Parameters
To access the incoming parameters:
- When you Invoke a Java Method you declare the Parameters object as an argument in the method signature.
- When you Execute Java Code, the standard requestParams object is available. The requestParams object is an instance of Parameters. You don't have to declare it. You just use it, along with the other Java API Support Classes and Objects.
Tip: During updates, you can also use the getPriorParams method in the Parameters object to access the record's previous values.
Accessing and Updating Record Data
For most Data Policy triggers, record data is available as key/value pairs in the incoming Parameters object. Field names (not display labels) are the keys, and field contents are the values.
So if the Parameters object is named requestParams, the code to access and/or update the record data typically looks like this (in this case, to access String data):
String data = requestParams.get("field_name"); ... requestParams.put("field_name", data);
There are only a few exceptions to that rule:
- For a Data Policy action triggered by a Batch Import, record data is not available.
- For a Data Policy action triggered by the display of a single record (On View), the Parameters object contains a copy of the record data, so you can modify the view of the record without changing the underlying data. Assuming that the Parameters object is named requestParams, the code to access that data looks like this:
import com.platform.api.*; ... HashMap record = (HashMap) requestParams.getObject(CONSTANTS.RECORD.RESULT);
- For a Data Policy action triggered by the display of multiple records (List View), the Parameters object contains a list of records. You process that list using code like this:
import com.platform.api.*; ... ArrayList<HashMap> recordList = (ArrayList) requestParams.getObject(CONSTANTS.SEARCH.SEARCH_RESULTS); if (recordList != null && recordList.size() > 0) { for (HashMap record : recordList) { ... } }
In the latter two cases, once you have a record, you access and update field variables using code like this:
String data = record.get("field_name"); ... record.put("field_name", data);
Accessing Other Parameters
In addition to the record's field names and values, the following key/value pairs are included in the Parameters:
- policy_action
- This parameter contains one of the constants defined in the CONSTANTS.POLICY.ACTION class, to specify the trigger action that activated the data policy. (The "triggering action" is some event that occurred in the platform. The code you are writing, on the other hand, defines that "data policy action" that will be carried out, as a result.)
- action_event_sequence
- This parameter contains one of the constants defined in the CONSTANTS.POLICY.ACTIVATION class, to specify whether the data policy action is carried out before or after the triggering action.
- data_policy_id
- The ID of the data policy being executed.
- data_policy_action_id
- The ID of the data policy Action being executed.
- That value can be used to write re-usable classes or code that can handle a variety of conditions and data policies.
Edit a Data Policy
- Click Designer > Objects > {object}
- Click the Data Policies tab
- Click the Data Policy Name link
- Click the [Edit] button
- Make changes to the fields
- Click the [Save] button
Edit an Action
- Click Designer > Objects > {object}
- Click the Data Policies tab
- Click the Data Policy Name link
- Click the Action Name link
- Click the [Edit] button
Reorder Actions
- Click Designer > Objects > {object}
- Click the Data Policies tab
- Click the Data Policy Name link
- Click the [Reorder Actions] button
- Select an action in the list and click the up or down arrow buttons
- Click [Save]
Delete an Action
- Click Designer > Objects > {object}
- Click the Data Policies tab
- Click the Data Policy Name link
- Click the Action Name link
- Click the [Delete] button
Delete a Data Policy
- Click Designer > Objects > {object}
- Click the Data Policies tab
- Click the Data Policy Name link
- Click the [Delete] button
Invoke a Java Method From a Data Policy
Invoking a Java method, lets you use the Java APIs to interact with the platform, and do anything else that you can accomplish using Java code.
Method Signature
You can select any method defined in a Java class, as long as it has the required signature:
- public void someMethod(com.platform.api.Parameters requestParams);
- Considerations
-
- The method can be either a static class method or an instance method. An instance of the object is created before making the call.
- The method must be public, return void, and take a single Parameters argument.
Example: Validate Incoming Data
In addition to the rudimentary data validation that is part of every Custom Object, Data Policies give you the capacity for more sophisticated validation.
In this example, the data policy action ensures that the credit number is in the proper format to begin with. (Exactly 16 digits, with no characters or spaces.) The policy action is designed for the Orders object in the Sample Order Processing System, which has field named credit_card_number.
This is an important technique for more sophisticated validations. In this case, for example, a credit card number is too big to use a numeric field, while normal validation mechanisms are limited to simple field comparisons. The solution is to use a data policy to parse the data, and throw an exception in the event of an error.
This code throws an exception if the format isn't valid. The exception will abort the transaction before it is committed. If it were activated in after the triggering event ("post-trigger") then the transaction would have to be rolled back. So it is better practice to configure the data policy so it is activated before the triggering event is carried out.
public void validate_order(Parameters requestParams) throws Exception { // Functions.debug("Validating order"); String errMsg = "Invalid credit card number format. Needs 16 digits."; String ccn = (String) requestParams.get(ccn_field); if ((null != ccn) && (ccn.length() != 16)) { throw new Exception(errMsg); } for (int i=0; i<=15; i++) { char c = ccn.charAt(i); if (c < '0' || c > '9') { throw new Exception(errMsg); } } // Format validated return; }
Additional Examples
For many more examples of data policies that execute java code, see Java Code Data Policy Examples.
About Data Policies in Workflows
When a record is processed through a Workflow, it is associated with a workflow state, or condition. If that workflow state contains a data policy, the data policy is executed on the record. This combination of workflow plus data policy can be used to automate record processing when a user clicks an Action button on a record.
Data Policies can be used with Workflows in two ways:
- Calendar Based Data Policies
- Can be used to automatically initiate a new workflow or move the record into a new workflow state.
- Usage Examples:
- If a request is waiting in IT Manager inbox for more than three days (the Last Workflow State Change Date field available in every object has not changed), then send a reminder email.
- If a request is waiting in the Supervisor inbox for more than two days, use the Java API to move the request to the IT Manager inbox
- Action Based Data Policies
- When a record arrives in a state that has data policy linked to it, that policy is executed
- Usage Examples:
- Send additional email notifications when record arrives in certain state
- Throw errors if some specific requirements are not met
About Data Policies in Tasks and Appointments
Data policies can be added to Tasks and Appointments to carry out Data Policy Actions when the Task or Appointment is due.
Learn more:
Using a Data Policy to Send a Message
Send a Message to an Email Account
- Create a Data Policy Criteria which will trigger an action.
- Create a Data Policy Action to Send an Email.
- For the To: field select Specific Email Addresses.
Send a Message to a Mobile Phone
SMS is the protocol for sending text messages to mobile devices. Read about it at: http://en.wikipedia.org/wiki/SMS.
This article covers information about how you can use SMS text messaging to send information out. It can be used with any email function within the platform.
Using Data Policies with SMS
Want to be alerted on your mobile phone whenever you have new data or updates within the platform? It's easy using our Data Policies to send an SMS message to mobile phones for you or your team.
- Create a Data Policy Criteria which will trigger an action.
- Create a Data Policy Action to Send an Email.
- For the To: field select Specific Email Addresses.
- In the select Specific Email Addresses field, type in the SMS-email address. (see table below)
- Type the message you want to send to the phone. You can also embed template variables related to that record. For example: $account.name.
Below are the most popular carriers and their formats and their character limits for messages. Just replace 5551234567 with your own number.
Carrier | Email Format | Limit |
---|---|---|
AT&T | 5551234567@txt.att.net | 160 |
Verizon Wireless | 5551234567@vtext.com | 140 |
T-Mobile USA | 5551234567@tmomail.net | 160 |
Metro PCS | 5551234567@mymetropcs.com | 120 |
Sprint PCS | 5551234567@messaging.sprintpcs.com | 160 |
Alltell | 5551234567@message.alltel.com | 116 |
For a complete list of carriers and their formats you can go to: http://www.livejournal.com/tools/textmessage.bml?mode=details