Record Type Object

Appian Records allow you to bring together your internal and external data sources and see your business information from a number of different views and perspectives. This may include searchable record lists, read-only grids, summary views, charts, and reports. These views allow your users to interact with and take action on the record data in the context of the information you are viewing. Appian Records are designed to power your application and it all starts with the record type object.

This page provides detailed design information about the record type object, its configuration options, and how to reference it in an expression or interface. See Create A Record Type for how-to information on creating a new record type object.

In order to use new record type object components, features, or functions, you must create a new record type using the latest Appian version or update your existing record type objects to the latest Appian version.

See Updating the Record type for more information.

Properties

The Properties menu (located in the gear icon) allows you to modify the name and description of the record type.

Field Description
Singular Record Type Name The name of the record type that is displayed in the Appian Designer. For example, Prospective, Customer, or Support Ticket.
Plural Record Type Name The name of the record type in plural form. Visible to end users in Tempo under the Records tab. For example, Prospectives, Customers, or Support Tickets.
Description The description of the record type shown both in Tempo under the Records tab and in Appian Designer. For example, "Prospective customers bringing new business", "Current customers of the business", or "Issues reported by customers".
Tempo Display Determines when a record type will display on the Tempo Records tab. Record types do not display by default.
Icon An icon associated with the record type shown in Tempo under the Records tab. The Appian Record icon is used by default.
Icon Color The color of the icon associated with the Record Type. You can provide a hex code or Appian expression to define icon color. Icon is Accent by default.

Electing to not display a record type does not prevent users from viewing the record list or views in Tempo.

Data Model and Source

Using data modeling concepts and a guided experience, the record type object makes it easy for you to bring in the data that you need to create an application that simplifies and streamlines your business processes.

Create a Record Data Model

As you move through the guided experience, you'll be able to answer questions that help you define a set of records from your data source, including:

  • Where does the data live?
  • Who is the target audience?
  • What specific data do you want to display?
  • Do you need to sync the data within Appian?
  • What actions can be taken on the data?

The Configure Data Source dialog displays four card options that allow you to select the right data source for your record type based on where your source data lives. You can choose a database, a process model, a Salesforce object, or other web service.

Create a Record Data Source Options

The following sections provide guidance for which data source option to select based on where your source data lives and describes the fields for each data source type.

Database

Select Database as the data source for your record type if your data lives in a relational database and you plan to access it through a data store entity (DSE). You'll also select this option if your data source is a database table and you want to sync your sources data in Appian. The fields for this source type depend on whether or not you choose to sync your data with Appian.

For record types with a data store entity as the data source, the CDT that connects to the DSE must have a primary key. For record types that are syncing data from a database table, that table must have a defined primary key column.

When your data source is a data store entity, you'll need the following:

Field Description
Data Type The source of the record data. Select Database when the source of your record data is a data store entity (DSE) or a DSE that points to a database view.
Data Store The name of the data store selected as the source for the record type.
Entity The name of the entity that maps to the data store selected for the record type. This field is only shown for entity-backed record type only. Note that each row in the data store entity is a record.

See the Records Tutorial for detailed guidance on configuring a record type that uses a data store entity as the data source.

When your data source is a database table, you'll need the following:

Field Description
Type The source of the record data. Select Database when the source of your record data is a synced or non-synced database table. See Data sync for more information.
Table The name of the database table selected as the source of the record type.
Sync Schedule The setting toggle for Sync Schedule. Valid values: on or off. This setting is only shown if Sync in Appian is selected for the record type.

You can only enable sync for record types that use a database table or a Salesforce object as the data source.

Process model

Select Process Model when you want to use the running processes of a process model as the source of your record type.

Field Description
Source The source of the record data. For process-backed record types, select Process.
Process Model The source process model. For process-backed record types only. Each active (unarchived) process instance is a record.

See the Process Modeling Tutorial for detailed guidance on configuring a record type that uses a data store entity as the data source.

Salesforce object

Select Salesforce when you want to use a Salesforce object as the source of your record type. You can either select an existing Salesforce connected system or configure a new one, if none exist.

When your data source is a Salesforce object, you'll need the following:

Field Description
Name The name given to the Salesforce object.
Description The description for the Salesforce object.
Authentication The Salesforce OAuth authentication flow used to authenticate and grant Appian access to Salesforce data.
Instance URL The URL used for authorization. It is used to configure your integration object and when executing your operations.
Client ID Appian's consumer key or API key issued by Salesforce. In the Salesforce Setup portal, navigate to App Manager, and then find your App and select View. The Client Id will be listed on this page as "Consumer Key".
Client Secret The client password that allows Appian to access Salesforce. In the Salesforce Setup portal, navigate to App Manager, and then find your App and select View. The Client Secret will be listed on this page as "Consumer Secret".
Username The username used to sign into the provided Salesforce instance.
Password The password used to sign into the provided Salesforce instance.
Security Token The user security token that is automatically-generated by Salesforce. In the Salesforce personal settings for the user, select Reset My Security Token to generate a new security token. When authorizing, this security token will be appended to the password.
TEST CONNECTION Uses the provided configuration information to connect to the target system. Returns success or error with details.

You can enable sync for record types that use a Salesforce object as the data source, though this does not change any of the required configurations above. See Data sync for more information.

Other web service

Select Other Web Service when you want to leverage an expression, integration, or web service as the source of your record type. This selection allows you to call an integration to pull in the data that backs your record type.

Field Description
Type The source type of the record data. For record types that use an expression, integration or other web service as the data source, select Other Web Service.
Data Type The custom data type (CDT) that corresponds to the record type.
Record Data Source The Record Data Source expression that calls the integration for your record and returns a DataSubset for the record list view. The data parameter of this DataSubset should contain an array of dictionaries that map to the selected data type. Note that this is not the record data that is used to fetch the data for a single record, for which you must configure the Data (Dictionary) field for the Single Record Source.
Paging Info The rule input of the Record Data Source expression that passes the paging and sorting configuration of the record list. The selected rule input must be of type PagingInfo.
Search Text The rule input of the Record Data Source expression that passes the search query string that runs against the record list. The selected rule input must be of type Text.
Data (Dictionary) The Single Record Source expression that calls an integration and returns a dictionary that maps to the selected Data Type. This integration will be used to fetch the data for a record when rendering a record view, launching a related action, or using a!recordLink() to define a record link.
Record Identifier The rule input that corresponds to the record identifier (ID) for the Single Record Source expression. The value of this unique identifier is used to return the data for a single record.

Record data source

The RECORD DATA SOURCE configuration section is where you'll configure the data for your record type. This section allows you to configure the integration that pulls in your external data source, the expression rule that calls your integration, and the rule inputs that define your paging, searching, and filtering parameters.

wizard rds connected system create

Single record source

The SINGLE RECORD SOURCE configuration section is where you'll configure the data for a single record view. This section allows you to configure an integration that pulls in the data for a single record, the expression rule that calls in the integration, and the rule input that defines the record identifier for the record view that returns when the integration is called.

wizard srs integration create

Testing service-backed record types

After configuring the expression rules that call the integrations for your record type, you can use the Test Record Source box to verify that the data results returned for your Record Data Source expression and Single Record Data expression are correct. Simply select the view for the source expression you want to verify and click the TEST button.

record type test pane

The results of your record data source expression will be cast to the data type you selected for your record type, and displayed in a grid.

record type test pane source view

Although this view may look similar to the record list view you configured, it is not the same. Rather than showing your configured columns, the Test Record Source view will show you all of the fields on the data type that correspond to the record type. These record type fields can be used as inputs when configuring your record list. Note that in the record list you must use fv!row to reference the record fields values, not rv!.

You can also use this view to evaluate your rule inputs for paging, searching, and filtering. The rule inputs for these parameters apply to your record list view so you'll want to ensure they're working as expected.

When you select Single Record Source view, you will see the expression output cast to your selected data type. This displays all of the fields and values available for a single record. You can also choose how you want these record fields and values displayed in the view.

record type test pane single record

The Test Record Source pane displays the first 100 records of the DataSubset only.

See the Service-Backed Record Tutorial for detailed guidance on configuring the record data source and single record source. This tutorial also demonstrates how to use the Test Record Source pane to verify your record type views.

See the Appian 20.1 documentation for more information about service-backed record types, formerly called expression-backed record types, created with Appian 20.1 or earlier.

Default filters

With default filters, the developer can control which records appear in the record list and views by applying filters to the source data. When a record is filtered out by a default filter, it does not show up in the record list, it is not returned in queries on that record type, and users may not access its views.

Developers can add default filters either By field or using an Expression.

Default filters are not applicable for service-backed record types. Instead, you can use the expression rule for the record data source to conditionally filter out records.

By field

Developers can apply multiple default filters to a record type. All filters are joined by an AND union.

record default filters

Expression

Developers can also specify more complex default filters on the record type using an expression containing a list of a!queryFilter() or a!queryLogicalExpression().

/record default filters expression

These filters do not control access to the underlying data sources.

The following sample expression returns cases that are either assigned to the logged in user, or are not assigned to the "Global Users" group but are either Urgent or High priority:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*
(Assigned to User OR (NOT Assigned to "Global Users" AND (priority="Urgent" OR priority="High")))
*/
if(isusermemberofgroup(loggedInUser(),cons!CASE_GROUP_GLOBAL_VIEWERS),
  {},
  a!queryLogicalExpression(
    operator: "OR",
    logicalExpressions: {
      a!queryLogicalExpression(
        operator: "AND",
        filters: a!queryFilter(
          field: "userName", 
          operator: "=", 
          value: loggedInUser())
      ),
      a!queryLogicalExpression(
        operator: "AND",
        logicalExpressions: {
          a!queryLogicalExpression(
            operator: "AND",
            filters: a!queryFilter(
              field: "userName", 
              operator: "<>", 
              value: cons!CASE_ADMIN_DB_KEY_1)
          ),
          a!queryLogicalExpression(
            operator: "OR",
            filters: {
              a!queryFilter(field: "priority", operator: "=", value: "Urgent"),
              a!queryFilter(field: "priority", operator: "=", value: "High")
            }
          )
        } 
      )
    }
  )
)   

User filters

User filters offer the ability to filter subsets of record data by selecting options in a list or using a date range style filter. All record types allow you to create user filters. For most record types, you can use an expression or walk through a guided experience to create the user filters. Service-backed record types are the only exception; they use a guided experience only.

List style user filters can have one or more filter options. For example, a filter named Region might contain five options:

  • Africa
  • Asia and Pacific
  • Europe and Middle East
  • North America
  • South America

Depending on the filter configuration, users can select one or more of the filter options to view records that meet the filter criteria. Filters that are configured to support the selection of multiple options will return all records that match at least one of the selected options. When there are more than 11 filter options, the filter includes a search box to help users find filter options.

You can also add date range filters, which allow precise record filtering between two dates or an open-ended range where only a start date or end date is provided.

When multiple user filters are present on the record list, users can select filter options for each of the defined user filters. The records returned are based on the records that meet the criteria of all the user filters combined.

For example, a record list may have both a Status and Hire Date filter. The Status filter has the "New" and "In Progress" options selected. The Hire Date filter has a date range of "1/1/2008 - 12/31/2014" selected. The records returned will be the records that have a status of "New" OR "In Progress" AND fall between "1/1/2008 - 12/31/2014".

Once users select any filter options, they can also save their selections by choosing Set as default from the filters menu. These saved filter values will apply by default whenever they load the record list. The user filter preview gives you real-time feedback on the filters you build.

User filters for service-backed record types are configured differently than user filters for other record types. To learn more, see User Filters for Service-Backed Record Types.

Guided user filters

List filters

List-style user filters allow you to create a filter with fixed options.

The following properties are configured for a guided-list user filter.

Field Description
Filter Name Name displayed to developers in the User Filters list when editing the record type.
Filter Field The field of the record type to filter by.
Filter Label Expression that defines the name of the user filter displayed to end users. For example, ="Location" displays as Location.
Filter Visibility Determines whether the filter is visible to the user at runtime. Default is Always.
Set default option Enables developers to configure an expression that determines which, if any, filter option is applied when a record list first loads. This value should match the label of the intended default filter option.
Users can select multiple options Enables developers to configure the filter as a single select or multiple select drop-down. Default is true.

The following properties are configured for a guided-user filter list option.

Field Description
Option Label Expression that defines the name of the filter option displayed to end users. For example, ="North America" displays as North America.
Operator The comparison operator to filter with.
Value An expression that returns the value(s) for the = and <> operators or the lower bound for the between operator.
Value 2 An expression that returns the upper bound value for the between operator. This field only appears on the form if you selected between as the value for the Operator field.

Date range filters

Field Description
Filter Name Name displayed to developers in the User Filters list when editing the record type.
Filter Field The field of the record type to filter by.
Default From Determines which, if any, starting date is applied when a record list first loads.
Default To Determines which, if any, ending date is applied when a record list first loads.
Filter Visibility Determines whether the filter is visible to the user at runtime. Default is Always.

Expression-based user filters

The following properties are configured for an expression-based user filter.

Field Description
Filter Name Name displayed to developers in the User Filters list when editing the record type.
Filter Expression The expression for the user filter. Configured with a!recordFilterDateRange for dates or a!recordFilterList and a!recordFilterListOption for other types of data.

User filters for service-backed record types

The following properties are configured to define user filters for record types that use a web service as the data source, including record types that use Salesforce as the data source.

Field Description
Filter Name Name displayed to developers in the User Filters list when editing the record type.
Filter Label Expression that defines the name of the user filter displayed to end users. For example, ="Location" displays as Location.
Rule Input Name of the rule input from the Record Data Source Expression to which the selected value(s) for this filter is passed
Filter Visibility Determines whether the filter is visible to the user at runtime. Default is Always.
Choices The expression for the user filter. Configured with a!recordFilterChoices.
Users can select multiple choices Enables developers to configure the filter as a single select or multiple select drop-down. Default is true.
Default Choice Enables developers to configure an expression that determines which, if any, filter choice is applied when a record list first loads. This value should match the label of the intended default filter choice.

If your record type uses a web service as the data source, use the rv! domain followed by either record or identifier when you want to reference field value or a record's ID in the record type. See Record Variables for more information.

Data sync

When you create a record type, you can enable data sync to cache your source data for a record type in Appian for faster queries and better performance. This performance boost is especially advantageous for record types that have external data sources. You can enable sync on record types that have sources of their data in database tables or Salesforce Objects.

You should only enable sync for your record type if:

  • Your source data changes infrequently and it doesn't need to be updated in Appian more than once a day.
  • Your source has one primary key field.
  • Your source data does not exceed, nor is expected to exceed, 50,000 rows.
  • You do not need to use more than 100 columns of the source data.
  • Your source data has no text columns that contain one thousand or more characters on average.

When you create a new record type and select the source of your data, you have the option to enable sync by selecting the Sync in Appian checkbox.

screenshot of the Configure Data Source set up and Sync in Appian checkbox

After you have created your record type and enabled sync, you can make further edits and configurations on the Data Model page.

Sync schedule

With sync enabled on the record type, you have the option to create a schedule so that your data will sync once a day at the same time without a manual trigger. For quicker syncs, record types using Salesforce should have syncs scheduled outside of peak traffic or working hours.

In your record type, you can schedule a sync from the Data Sync page by clicking Edit under Sync Schedule. From here, you can toggle on Scheduled Sync, can configure a time and set the timezone for the sync to occur. The properties menu of the Data Model page, also allows you to edit your sync schedule.

Sync history

From the Sync History section in Data Sync, you can view the details for all of the record type's syncs, including the times of the syncs and any errors that may have occurred.

Error messages will provide information on the cause of the error or possible solutions. For more information on problems with your sync and fixing sync errors, see Monitoring View and Troubleshooting Syncs.

When checking the time of your scheduled sync, you may notice that it didn't occur at the exact time at which you scheduled it. There are a variety of possible causes:

  • Multiple processes: If you have multiple record types scheduled to sync at the same time, not all of them can occur at exactly the scheduled time. For example, if multiple record types are set to sync at 3:00 AM, one of the scheduled syncs may not complete until 3:02 or 3:10 AM. If you have other processes that have significant resource use scheduled to occur at this time, this may also cause your syncs to complete later than expected.

  • Failed & re-trying: It is possible that something caused your sync to fail. In most cases, the system will try again twice before ultimately failing or successfully completing the sync. This means that a completed sync that had to retry multiple times could be a few minutes behind schedule.

  • Check your timezone: Make sure that you selected the right timezone when you set up your scheduled sync. If not, you can change this by editing the sync schedule settings in Data Sync.

  • Daylight savings time: If your timezone or region observes daylight savings and your sync is scheduled for one of the hours in which daylight savings time changes, your sync may not run when the time changes. To avoid this, choose a time after 2 AM.

Record list

The record list is a responsive display of all of the records for a given record type and any filters configured for the record type. You can configure a grid-style record list or a feed-style record list that users with the appropriate access level can view.

Grid-Style record list

A grid-style record list organizes and displays your record data in tabular view. From the List page, you can use the Edit Record List dialog to configure columns of record data for a grid-style record list. When you make the record list available from an interface, site, or Tempo, end users can search and filter records, sort through grid columns, and page through the grid display. They can also search across all record fields used in a grid row for records that match a specific search query.

The following properties can be configured for the grid-style record list:

Field Description
Columns The data columns to show in the grid. Details about column configurations are described in the table below.
Empty Grid Message The value that displays when there are no records due to security, search, or applied filters.
Rows to Display per Page The maximum number of records visible to users at a given time. Users can use the paging controls to see more data.
Initial Sort Field The record field on which to sort when the record list first loads. Configure multiple initial sorts to create a list of sorts to apply to the record list when it first loads.
Secondary Sort Field The record field on which to sort after a user manually sorts a column. Configure multiple secondary sorts to create a list of sorts to apply to the record list after a user manually sorts a column.
Spacing Determines the spacing within grid cells. Valid values: STANDARD (default), DENSE.
Border Style Determines the style of the grid border. Valid values: STANDARD (default), LIGHT.
Shade Alternate Rows Determines whether alternate rows are shaded. Valid values: true (default), false.
Row Header Index of the column to be used as the row header. Screen readers will announce the value in each row header when navigating to other cells within that row. Used only for accessibility; produces no visible change.
Accessibility Text Additional text to be announced by screen readers. Used only for accessibility; produces no visible change.

The following properties can be configured for each column in the grid-style record list:

Field Description
Label The label that appears as the column header.
Sort Field The record field on which to sort when a user sorts this column. If no value is selected, the column is not sortable.
Help Tooltip The tooltip that appears in the column header.
Display Value The value to display in the column cell. The value can be text, images, links, rich text, a!tagField(), a!buttonArrayLayout(), a!recordActionField(), or a!progressBarField(). It is evaluated once for each row. You can reference the data from the source using fv!row and fields within the source using fv!row[recordType!MyRecord.fields.fieldName]. Use fv!identifier to reference the identifier of the row . You can also use Display Options to select a template that allows you to format the column data.
Visibility Determines whether the column is displayed on the interface.
Alignment Alignment of the column heading. Valid values are Start (default), Center, and End.
Width Column width. Valid values are Auto (default), Icon, Icon plus, Narrow, Narrow plus, Medium, Medium plus, Wide and a range of 1X - 10X.

When you choose the grid-style layout to configure your record list, a column is auto-generated for the first 50 fields in your source table. You can add, delete, or reconfigure the grid columns to display the record data you want to end users to see.

Appian configures a default sort on the record list using the primary key field and applies a deterministic sort on the record data, which ensures the record data is returned in the same order each time the sort parameters are applied.

See Create a record list for more information.

Using the record list in an interface

After building a grid-style record list, you can easily pull the record data into an interface using the read-only grid component with your record type as the data source. This eliminates the need to duplicate and configure your record list across different interface views, which translates into a faster and better design experience.

When configuring a read-only grid from Design mode, you have the option to use a record type as the data source. This allows your read-only grid to inherit the record list features you configured on the record type.

With the record type as the data source, the grid will also smartly query the record data you need based on the configuration of the grid. From the component configuration panel, you can pick features that allow you to match your grid to your record list or you can quickly and easily customize your grid by selecting the record list features you want to include or exclude from the grid view.

The read-only grid will automatically take on the record list style and format. You can use this feature to maintain the same style between your record list and read-only grid or you can use the component configuration panel to modify the layout, styling, paging and sorting on your grid. These design options allow you to provide a consistent experience for your end-users when interacting with your interfaces.

See Read-Only Grid Component for more information.

Feed-Style record list

Another option is the feed-style record list, which displays all of the records for your record type in a vertical list. You can use a!listViewItem in an expression to configure a feed-style record list, with a default sort column and order. In the feed-style record list, only the first 100 records display in the record list. End users can search the record list across all of the record fields used in the a!listViewItem title parameter.

Show export to Excel button

Developers can allow record viewers to export filtered record lists to Excel. This setting displays as an Export to Excel button on a record list. Record viewers can click the button to download a copy of their filtered record lists in Excel. The exported file will show the record list's current sort for process-backed and service-backed record types.

Record types with sync enabled or that use an entity as the data source will only be sorted if the filtered number of rows does not exceed 1,000.

See Optimizing Export to Excel for additional information.

Record list action

Developers can allow record viewers to quickly launch an action from the record list by using the record list action. Currently, only one action can be configured per record type and any process model can be selected. A record list action can be configured to open in a dialog box, the same tab, or a new tab. After completing the record action, users return to the record list. When actions are configured to open in a dialog, any user filter values are remembered when returning to the record list.

A common use case is to add an action to create a new record. This allows users to leverage the record list search to ensure the record in question does not already exist. It also allows developers to use their 5 site pages more efficiently by combining record and action functionality

Record details

Developers can configure the title, headers, views, and related actions that are available for an individual record.

Title

Each record has a title that appears at the top of each record view, in record tags, and in the hover card for that record. For grid-style record lists, developers can configure a specific expression for the record title. For feed-style record lists, the record title comes from the title parameter in a!listViewItem.

Headers

The record header appears at the top of each record view as the background and contains the title, breadcrumbs, and related actions. By default, the record header style is "NONE". Developers can configure their backgrounds with a color or image.

Color headers can display one background color for all records in a record type, or many colors based on an expression or variables within the record.

You can also configure image backgrounds to display one image or multiple images. One image from a document or a URL can be used for all records in a record type. Similar to color headers, you can also configure image backgrounds to display different images based on variables within the record or using an expression.

Image headers display the record title, breadcrumbs, and related actions on top of the image in an overlay. You can customize the style, type, and position of the overlay.

See also: Create a Record Type

Views

A record view is an interface for users to view data for a specific record. You can create multiple views for a single record type (up to 20 additional record views). Users can access views for a single record by selecting the record from the record list. The Summary view displays by default. Tabs underneath the record header allow users to access all other views configured for the record.

The layout and data that display for each record is determined by the expressions used to define the Summary view and additional views configured as part of the record type.

See Record View Security for more information.

Related actions allow users to act on the record type within the context of a specific subset of record data. Process-backed records derive related actions from the process model's quick tasks. You can configure records of any source type to have related actions that start a process model. For example, within a customer record, there might be a related action to enter a new order for that customer or to update the customer information.

All related actions configured for a record type are available on the record's Related Actions view. You can configure related actions shortcuts, for relevant record views, to make specific related actions available to end users from the record views. You can also reference related actions in any interface with the record action component.

Referencing a record type and its properties

The following sections describe how to reference a record type and record fields in an expression and interface. We’ll also discuss how to bring in the record data and other features configured on the record type.

Record type object reference

The record type object reference allows you to directly reference an existing record type in your expression or interface using the recordType! domain. This domain prefix is a direct object reference that removes the need to create a constant to reference your record type, except in specific use cases. See When to use a constant for more information.

Record type object references also allow you to reference fields, filters, and actions configured on the record type for use in an expression, interface, record action component, or a read-only grid.

In addition to the sections below, see the following topics for more information:

Referencing a record type

You can use the recordType! domain to reference the record type in functions, such as a!queryRecordType() and urlforrecord(), and components, such as a!recordLink() or a!pickerFieldRecords(). For example, recordType! is used to reference the Engineering Team record in the a!queryRecordType() function.

/record type queryrecordtype function example

This expression queries the Engineering Team record and pulls in the data for the selection of record fields defined in the function. It also filters the results to show the teams that match isFeatureTeam and sorts the data so the results are ordered and grouped by the engineering team name.

Utilizing typeahead with the recordType! domain takes the guesswork out of remembering the exact name of the record type you want to reference in your expression or function. After entering the recordType! domain in a function or expression, typeahead suggests a selection of existing record types and allows you to select and reference the one you want. If you find that you are unable to reference a specific record type, make sure that you have access to it.

See urlforrecord(), Record Link, Record Picker Component, and Record type security for more information.

The record type object reference combined with (.) dot notation allows you to directly access properties of the record type like fields, actions, and filters in your functions or expressions. You can easily reference these same properties within a read-only grid that uses a record type as the data source using the recordType! domain. We’ll discuss how to reference each record property in the subsequent sections.

Referencing record fields and field values

You can use the recordType! domain and . dot notation to reference a record field in an expression or interface. Simply append . dot notation to the record type object reference to autosuggest the fields property on the record type. You can then index into a specific record field, which is auto suggested from a list of available record fields. Note that record fields cannot be referenced using a constant.

This example demonstrates how to reference the firstName field in the Employee record. Since record type object references and record type field references are specific to each environment, this example does not evaluate in your Test Rules interface. Use it only as a reference.

  1. In an expression rule object, use the recordType! domain to reference a specific record type. For example, the record type reference shown refers to the Employee record.

    record type employee lozenge

  2. Use dot notation after recordType!<Record Type Name> to autosuggest the actions, fields, and filters properties configured on the record type.
  3. Select fields to access the hierarchical menu of record fields on the Employee record.

/record type employee fields lozenge autosuggest

  1. Select a record field key from the fields dropdown to append to the fields property. For example, the reference shown refers to the first name field of the Employee record.

    /record type employee fields lozenge firstname

When you highlight a record key from the dropdown, Appian automatically provides additional information about the record field key, including:

  • Full record type field reference
  • Field name
  • Field data type

Note that when using a record type field reference, Appian will automatically shorten the reference to improve the readability of your expressions. To display the full reference, simply hover over it.

Referencing record values in the record type

To reference record values within the record type object itself, use the record values rv! domain prefix. The rv! domain allows you to reference a record’s ID or a value within a record field.

In the record type object, you’ll use rv! to reference record field values when you configure any of the following:

  • A view definition expression
  • An expression for the record title on a record view
  • A view’s action visibility expression
  • A feed-style list expression

To reference a record value in the record type object, use the rv! domain followed by either record or identifier. When you want to return the ID for a specific row in the record and pass it into an interface or process, use rv!identifier. When you want to pass a reference to the record itself into a record view, use rv!record with a field reference wrapped in bracket notation, rv!record[recordType!<record type name>.fields.<field name>].

You will also use it to access the value of a record field in an expression, like an expression you might use to define the record title for a record view. For example, we can use rv!record to configure the Record Title for the Employee summary view. The example shown displays the rv!record with a record type field reference to reference the firstName field in the Employee record.

/grid howto/record type field reference rv example

When using field references in the record type object, you can also begin to type the fieldName after recordType!<record type name>.fields. and autosuggest will provide a list of record type field names that match your entry.

For process-backed records, you can use rv!record with a record type field reference wrapped in bracket notation to point to a process or a specific process-model property. For example, rv!record[recordType!Record.fields.pp.initiator] will return the initiator of a process.

See Domain Prefixes for more information on the rv! domain.

Referencing a record action

After configuring a record list action or related action for a record type, you can use the recordType! domain to reference the record action in an interface or expression. Again, you’ll simply append . dot notation to the record type object reference to autosuggest the actions property on the record type. Autosuggest will display a list of available record actions that are available for you to reference.

Note that record actions cannot be referenced using a constant.

The example shown demonstrates how to reference the updateEmployee action configured on the Employee record. Since record type object references and action properties on the record type are specific to each environment, this example will not evaluate in your environment. Use it only as a reference.

  1. In an expression rule object, use the recordType! domain to reference a specific record type. For example, this record type reference refers to the Employee record.

    record type employee lozenge

  2. Use dot notation after recordType!<Record Type Name> to autosuggest actions, fields, and filters.
  3. Select actions to access the hierarchical menu of actions configured on the Employee record.

/record type employee actions menu

  1. Select a record action key from the actions menu to append to the actions property. The example shown references the updateEmployee record action configured on the Employee record.

    /record type employee actions lozenge update

When you highlight a record key from the dropdown, Appian automatically provides additional information about the record action key, including:

  • Full record type action reference
  • Action description
  • Record type name
  • Action name
  • Process model that supports the record action
  • Action context
  • Visibility setting

Note that when using a record type action reference, Appian will automatically shorten the reference to improve the readability of your expressions. To display the full reference, simply hover over it.

See also: Record Action Component

Referencing a user filter

After configuring a user filter on a record type, you can use the recordType! domain to reference the user filter in an interface or expression. Append . dot notation to the record type object reference to autosuggest the filters property on the record type. Autosuggest will display a list of available user filters for you to reference.

The example shown demonstrates how to reference the Department user filter configured on the Employee record. Since record type object references and filter properties on the record type are specific to each environment, this example does not evaluate in your Test Rules interface. Use it only as a reference.

  1. In an expression rule, use the recordType! domain to reference a specific record type. For example, this record type reference refers to the Employee record.

    record type employee lozenge

  2. Use dot notation after the recordType!<Record Type Name> to autosuggest actions, fields, and filters configured on the record type.
  3. Select filters to access the hierarchical menu of user filters configured on the Employee record.

    record type employee lozenge filters

  4. Select a user filter key from the filters dropdown to append to the filters property. This example references the Department filter configured on the Employee record.

    record type employee lozenge department filter

Note that when using a record type action reference, Appian will automatically shorten the reference to improve the readability of your expressions. To display the full reference, simply hover over it.

Referencing process properties

Process properties can be referenced in process-backed records. The following sections list the process and process model properties available to the record type.

To reference a process property, use the process property prefix (pp.) in front of the reference. This must still be from within the record field (rv!) domain: (rv!record[recordType!<record type>.fields.pp.<reference>]).

All process properties in the table can be referenced this way. For example, to reference the process Start Time, use rv!record[recordType!Record.fields.pp.startTime].

Process Property Reference Type Description
ID id Integer System-assigned ID for the process. Process IDs are unique within an Appian instance. They are not reused, and can be used to reference the process throughout the application.
Name name Text Name of the underlying process model.
Priority priority Text The value set as the process priority. Note: this is a descriptive property. It is available to designers to use how they see fit, but the property itself does not affect how Appian handles the process.
Initiator initiator User The user who started this process.
Designer designer User Owner of the underlying process model. If there are multiple process administrators, the user who last updated the process model becomes the owner.
Start Time startTime Date/Time Time the process was started.
Deadline deadline Date/Time The date/time value set as deadline. Note: this is a descriptive property. It is available to designers to use how they see fit, but the property itself does not affect how Appian handles the process.
Time Zone timeZone Text Time zone context used by the process. This value may differ from the configured process model time zone, such as when the designer selects the option to override the configured process model time zone with the process initiator's time zone. See also: Time Zone Context

Referencing process model properties

Process model properties can be referenced in process-backed records.

To reference a process model property, use the process property prefix (pm.) in front of the reference. This must still be from within the record field (rv!) domain: (rv!record[recordType!<record type>.fields.pm.<reference>]).

All process properties in the table can be referenced this way. For example, to reference the process model Time Zone, use rv!record[recordType!Record.fields.pm.timeZone].

Process Model Property Reference Type Description
ID id Integer System-assigned ID for the process model. Not to be confused with the UUID.
Name name Text Name of the process model.
Description description Text Description of the process model.
Version version Text Version of the process model.
Creator creator User Creator of the process model.
Time Zone timeZone Text Time zone the process model was created in.
UUID uuid Text Unique identifier for the process model application object.

See also: Configuring Process Security

When to use a constant

There are specific use cases that still require you to use a constant to indirectly reference a record type. For example, when using the Report Builder to create basic grids and charts from record type data, you must first save the record type as a constant and use the constant to select the record type in the Report Builder. You must also use a constant or expression rule to reference a record type in an existing process model.

See Use the Report Builder and Working with Data in Process for more information.

Referencing record data in an interface

You can quickly and easily reference record data in your interface using a read-only grid that uses a record type as the data source. This allows you to not only bring the record list view into the interface but you can use a!recordData and a!queryRecordType to pass the record data into your interface. In addition, using fv!row with bracket notation allows you to easily pass the record field values into the grid in your interface.

See Read-Only Grid Component and a!queryRecordTypefor more information.

Record data type

All record type objects have their own unique data type, which is specific to each record type and automatically generated when the record type is created. The record data type allows you to easily access the data associated with a specific record type and use field references to call the record data into your expressions and interfaces.

For interfaces connected to a record type, such as record views, you can pull in record data by using the record data type as a rule input in your interface. When you add the interface as a view for your record type, simply pull the record data into the rule input using rv!record. If your interface only needs to reference a record type, but not pull in record data, you can use your record type as a rule input. For examples of how to use record data types as rule inputs in interfaces and views, see Create a Record View.

Any configuration changes that you make to your record type are automatically captured by the record data type so your record data and fields always stay current. This reduces the need to duplicate any configuration changes that you make to the record type object across multiple objects that use the record data.

Casting record data

You can cast the record data type to a dictionary, a map, a CDT, or string. The record data type supports casting in both directions as long as the fields you want to cast are present in the record type.

See Casting Record Data and cast() Function for more information.

Using a record type constructor

By employing a similar method used to create values of a customer data type with a type constructor, you can use a record type constructor to create a single record in your expression. The record type constructor allows you to map each value to a particular field reference in the record type.

In the example below, we used the record type constructor to construct an Employee record by using the record type field reference as the key followed by a : colon and its corresponding data value on the right.

/Record Type Constructor Example

After entering the record data, you can click TEST RULE to view the data output.

Record type security

Users must have at least Viewer permissions to a record type to access it in Tempo or on a site. Additionally, for Tempo, the record type must be configured to display in the Records tab.

The security role map of a record type controls which users can see or modify it and its properties. By default, only the record type creator and system administrators have access to the record type. See Editing Object Security to modify a record type's security.

The following table outlines the actions that can be completed for each permission level in a record type's security role map:

Actions Administrator Editor Viewer
View record type in Tempo Yes Yes Yes
View record type definition Yes Yes Yes
View the security Yes Yes Yes
Update record type definition Yes Yes No
Update the security Yes No No
Delete the record type Yes No No

Note: Preventing users from being able to view a record type does not secure the record type's underlying data source. Users may still be able to view the underlying data in other areas of Appian.

Record security

Individual record security is based on the security of the underlying source. Users must have at least Viewer permissions to the record’s source to view the record in the record list or to view its record views.

For example, applying a default filter to hide a specific group of processes will stop those records from generating, but the process data might still be visible in a process report or process dashboard.

The security of the record’s source is configured differently for the different source types:

  • For record types with a database table as the data source, see Security and Record Level Security for Entity Backed Records.

  • For record types with a process model as the data source, see Configuring Process Security.

  • For service-backed record types, both the list view and record view source expressions execute in the context of the user viewing the record list. Even if these source expressions are defined using rules, the security role map applied to those rules does not prevent any users from executing the rule by viewing the record list. Access to the underlying data must be controlled by the developer of the rule in its definition in conjunction with the access control mechanisms available from the provider of the data. For instance, if the rule retrieves data from an external data provider that requires credentials for authentication and authorization, the rule developer must build the retrieval and presentation of those credentials into the definition of the rule. For more information, see Expression Rule Security.

Record view security

Security for record views is a combination of the source security, record type security, and default filter configurations.

A user must be able to view a record in the record list to access the record. Anyone with access to the record will see the Summary view by default. If a user does not have access because of source security, record type security, or a default filter configuration, the user cannot access the record views even if given a direct URL.

Each additional record view also has its own security. This is based on the visibility expression defined for the view. Users may access additional record views by navigating in Tempo or by using a record link that is configured to go to a certain view. Record links respect record view visibility.

Note: Hiding data on a view does not secure the underlying data. It only determines what does not display on the view.

Security for starting related actions is based on the security of the underlying process model. Users can only start a related action if they can view the record and have Initiator permissions to the process model for the action. The same applies for quick tasks that appear as related actions for process-backed records. If the user does not have the permissions to complete the quick task, the link to the related action will not display under Relate Actions.

Updating the record type

/Record Type Blue Update Message

All legacy record type objects, created with Appian 20.2 and earlier, include the following update alert at the top page. You'll need to update your legacy record types in order to take advantage of any new features, functionality, or components included in the latest Appian release.

To update a legacy record type, open the record type object from the Appian Designer Object View and click Update Now at the top of the page. Appian will automatically update your record type to the latest version.

Be sure to export a copy of your record type from the Appian Design view before clicking Update Now.

After your record type successfully updates, the UI displays a green message banner to indicate that new record type features and functionally are available for use. Be sure to save your record type to capture all of these updates and any additional changes you made.

/Record Type Green Update Message

There may be other design objects, including interfaces and expression rules, that support or reference the updated record type. After saving the updated record type, you'll need to review and update these design objects to ensure they are correctly referencing the record type.

If you need to roll back the record type to the previous version, simply close the record type object without saving your changes. If you have already saved your record type, you can still revert back to the earlier version. Simply import the version you exported prior to updating the record type into your application and delete the updated version.

The Update Now feature does not convert legacy expression-backed records created before Appian 20.3 into updated service-backed records that have all of the new record features and functionalities. In order to access these new record features on your legacy expression-backed records, you must recreate them using the latest Appian version.

Troubleshooting Record Type Updates

In some instances, after updating your legacy record type, you may need to manually reconfigure part of your record list or manually update expressions that support your record type.

The guidance provided in this section will help you identify configuration settings in your record list or parameters in your expressions that you need to manually reconfigure following a record type update.

Message Banner

After updating your record type, you may encounter a yellow message banner in the UI, which indicates that one or more configuration issues were detected in the record list.

/Record Type Yellow Update Message

Go to the List page and click Edit List to review all of the parameter settings for your record list. Manually reconfigure the list so that all of the grid, column, and component parameters are mapped to the new setting options for the enhanced record list.

Resolving Record List Issues

The record list for a legacy record type may have component and parameter settings that did not convert to the new setting options when you updated the record type. Therefore, it is a best practice to review your record list and configuration settings, after updating your record type to the latest version.

If your record list met any of the following conditions prior to updating, you will need to manually reconfigure the parameter settings to ensure the list displays properly:

  • Uses rf! to define the align parameter of a column component.
  • Uses an expression rule to define the align parameter with one of the following values: LEFT and RIGHT.
  • Uses an expression rule to define the width parameter with the following values: DISTRIBUTE.
  • Uses an expression rule to define the default sorts parameter or sort field parameter that uses a string field reference.
  • Contains syntax errors that prevent the record list for displaying properly.

To manually reconfigured your record list, go to the List page and click Edit List . See Record list and Create a record list for more information.

Resolving Expression Rule Issues

After updating a legacy record type, you may also need to update the expression rules used within the record type object or in other objects that support the record type. Manually reconfigure any expression rules that support your record type, if any of the following conditions apply:

  • Defines an expression rule that applies query filters or sorts to the record data, such as an expression rule for user filters. To resolve this, update the expression rule by switching the "fieldAs" parameter to recordType!MyRecord.fields.fieldA.
  • Used in the record type object to define a queryFilter or sort, BUT the query filter or sort is not applied to the record data. To resolve this, update the expression rule by switching. recordType!MyRecord.fields.fieldAs to "fieldAs".
  • References rf! variables. To resolve this, reconfigure your expression rule within record titles, record views, and related actions to use. rv!identifier and rv!record to reference a record field in the record type.

See Record list and Create a record list for more information.

Open in Github

On This Page

FEEDBACK