Advanced Database Row Field SIL Integration

The data structure used to hold both the Advanced Row Field and the Advanced Table Field is a bi-dimensional string array. In SIL terms it is expressed like this:

string[][] fieldVal;

The particularities for the Advanced Row Field are:

  • the array’s first dimension size is equal to the number of values that the field stores (1 for Simple select, Autocomplete and Generic field or N - number of selected values - for Multiselect);

  • the array’s second dimension size is equal to the number of columns that are configured for the field.

Advanced Database Row Field can be used in SIL scripts to both read and write values into issues.

Let’s take the following Advanced Row Field as example:

Get the field value

Given the field above, the following SIL code would be used to obtain the fields value for the issue with key ‘key’:

string[][] fieldVal = %key%.customfield_10300; return fieldVal;

Result - 10|ES|Spain|1492-10-12|30103.51|Madrid|true

The formatting (pipe delimited) of these results tell us that the returned value is an array. Using a pipe delimited string is a shortcut for reading and writing values to an array. SIL will automatically convert the string to an array.

If we run the same script for an Autocomplete Advanced Row Field (configured with id and name as columns):

Result - 10|Spain

If we run the same script for a Multiselect Advanced Row Field (configured with id and name as columns), having multiple values already selected:

Result - 2|Germany|3|France

Get the value of a field’s column

To retrieve a specific Advanced Row Field’s value for a issue and column we can use an array like below. In this example we will retrieve the country name:

string[][] fieldVal = %key%.customfield_10300; return fieldVal[0][2];

Result - Spain

The ‘name’ column is at position 2 of the array and not position 3 because when counting the positions within an array you must always start with 0.

Similarly, to retrieve the country’s capital, we use the following:

Result - Madrid

For an Autocomplete Advanced Row Field (configured with id and name as columns) we can only retrieve columns with index 0 (id) or 1 (name):

Result - 10

Result - Spain

For a Multiselect Advanced Row Field (configured with id and name as columns) we can only retrieve columns with index 0 (id) or 1 (name), but we can extract them from each of the values the multiselect holds (notice the first index):

Result - Germany

Result - France

Set the field value

The Advanced Row Field value should be set using a bi-dimensional string array:

The same syntax is valid for an Autocomplete Advanced Row Field (configured with id and name as columns):

If you need to set multiple values to a Multiselect Advanced Row Field (configured with id and name as columns), here is an example: