# BundleProjectCustomField

Represents a custom field in a project that stores a predefined set of values.

Extends [ProjectCustomField](v1-ProjectCustomField.html).

## Properties

| Name | Type | Description |
| --- | --- | --- |
| becomesRemoved |  Boolean  | Read-only.  When `true`, the entity is removed in the current transaction. Otherwise, `false`. This property can become `true` only in on-change rules when the rule is triggered on the removal of an issue or an article. In the rule code, the `runOn` rule property must contain the `removal` parameter set to `true`.             Available since 2017.4.37915      ```JAVASCRIPT runOn: {removal: true} ```    |
| defaultValues |  [Set](v1-Set.html).<[Field](v1-Field.html)>  | Read-only.  The values that are used as the default for this field.             Available since 2020.5    |
| extensionProperties |  Object  |  The object containing extension properties for this entity and their values. Extension properties are custom properties that might be added to core YouTrack entities by an app. For details about extension properties, see [Extension Properties](apps-extension-properties.html).             Available since 2024.3      ```JAVASCRIPT const entities = require('@jetbrains/youtrack-scripting-api/entities');  exports.rule = entities.Issue.action({     command: 'test',     action: function (ctx) {         const printValues = () => {             return 'stringProp:' + ctx.issue.extensionProperties.stringProp + ';'                 + 'integerProp:' + ctx.issue.extensionProperties.integerProp + ';'                 + 'booleanProp:' + ctx.issue.extensionProperties.booleanProp + ';'                 + 'issueProp:' + ctx.issue.extensionProperties.issueProp?.id + ';'                 + 'issuesProp:' + ctx.issue.extensionProperties.issuesProp?.first()?.id + ';'         }         ctx.issue.addComment(printValues());     } }); ```    |
| isNew |  Boolean  | Read-only.  When `true`, the entity is created in the current transaction. Otherwise, `false`.             Available since 2018.2.42351    |
| localizedName |  String  | Read-only.  The localized name of the field.   |
| name |  String  | Read-only.  The name of the field.   |
| nullValueText |  String  | Read-only.  The text that is displayed for this field when it is empty.   |
| typeName |  String  | Read-only.  The data type assigned to values stored in the custom field.     Field types that include a cardinality suffix use `[*]` for multiple values and `[1]` for a single value, for example, `version[*]` or `user[1]`.    |
| values |  [Set](v1-Set.html).<[Field](v1-Field.html)>  | Read-only.  The list of available values for the custom field.   |
| valuesCondition |  [FieldBasedBundleValuesCondition](v1-FieldBasedBundleValuesCondition.html)  | Read-only.  The condition that determines which values are possible for this field based on the condition field value. If not setthere are no value-based conditions for this field, all values are possible.             Available since 2025.3    |

## Methods

### findByExtensionProperties

```JAVASCRIPT
static findByExtensionProperties(extensionPropertiesQuery)
```

Searches for BundleProjectCustomField entities with extension properties that match the specified query.

Available since 2024.3.43260

Parameters
: | Name | Type | Description |
: | --- | --- | --- |
: | extensionPropertiesQuery |  Object  |  The extension properties query, defined as a set of key-value pairs representing properties and their corresponding values.                     |

Return Value
: | Type | Description |
: | --- | --- |
: |  [Set](v1-Set.html).<[BundleProjectCustomField]()>  |  The set of BundleProjectCustomField entities that contain the specified extension properties.                 |

Example
: ```JAVASCRIPT
: {
: property1: "value1",
: property2: "value2"
: }
: ```

### becomes

```JAVASCRIPT
becomes(fieldName, expected)
```

Checks whether a field is set to an expected value in the current transaction.

Parameters
: | Name | Type | Description |
: | --- | --- | --- |
: | fieldName |  string  |  The name of the field to check.                     |
: | expected |  string  |  The expected value.                     |

Return Value
: | Type | Description |
: | --- | --- |
: |  boolean  |  If the field is set to the expected value, returns `true`.                 |

### becomesInvisibleInIssue

```JAVASCRIPT
becomesInvisibleInIssue(issue)
```

Checks if the changes that are applied in the current transaction remove the condition to show the custom field.

Available since 2018.2.42312

Parameters
: | Name | Type | Description |
: | --- | --- | --- |
: | issue |  [Issue](v1-Issue.html)  |  The issue for which the condition for showing the field is checked.                     |

Return Value
: | Type | Description |
: | --- | --- |
: |  Boolean  |  When `true`, the condition for showing the field is removed in the current transaction.                 |

### becomesVisibleInIssue

```JAVASCRIPT
becomesVisibleInIssue(issue)
```

Checks if the changes that are applied in the current transaction satisfy the condition to show the custom field.

Available since 2018.2.42312

Parameters
: | Name | Type | Description |
: | --- | --- | --- |
: | issue |  [Issue](v1-Issue.html)  |  The issue for which the condition for showing the field is checked.                     |

Return Value
: | Type | Description |
: | --- | --- |
: |  Boolean  |  When `true`, the condition for showing the field is met in the current transaction.                 |

### canBeReadBy

```JAVASCRIPT
canBeReadBy(fieldName, user)
```

Checks whether a user has permission to read the field.

Parameters
: | Name | Type | Description |
: | --- | --- | --- |
: | fieldName |  string  |  The name of the field.                     |
: | user |  [User](v1-User.html)  |  The user for whom the permission to read the field is checked.                     |

Return Value
: | Type | Description |
: | --- | --- |
: |  boolean  |  If the user can read the field, returns `true`.                 |

### canBeWrittenBy

```JAVASCRIPT
canBeWrittenBy(fieldName, user)
```

Checks whether a user has permission to update the field.

Parameters
: | Name | Type | Description |
: | --- | --- | --- |
: | fieldName |  string  |  The name of the field.                     |
: | user |  [User](v1-User.html)  |  The user for whom the permission to update the field is checked.                     |

Return Value
: | Type | Description |
: | --- | --- |
: |  boolean  |  If the user can update the field, returns `true`.                 |

### createValue

```JAVASCRIPT
createValue(name)
```

Adds a value to the set of values for the custom field. If a value with the specified name already exists in the set, an exception is thrown.

Available since 2018.2.45017

Parameters
: | Name | Type | Description |
: | --- | --- | --- |
: | name |  String  |  The name of the value that you want to add to the set.                     |

Return Value
: | Type | Description |
: | --- | --- |
: |  [Field](v1-Field.html)  |  The value that was added to the set.                 |

### findValueByName

```JAVASCRIPT
findValueByName(name)
```

Returns a value with the specified name in the set of values for a custom field.

Parameters
: | Name | Type | Description |
: | --- | --- | --- |
: | name |  String  |  The name of the field value to search for.                     |

Return Value
: | Type | Description |
: | --- | --- |
: |  [Field](v1-Field.html)  |  The value with the specified name in the set of values for the custom field.                 |

### findValueByOrdinal

```JAVASCRIPT
findValueByOrdinal(ordinal)
```

Returns a value that is assigned a specified position in the set of values for a custom field.

Parameters
: | Name | Type | Description |
: | --- | --- | --- |
: | ordinal |  Number  |  The position of the field value to search by.                     |

Return Value
: | Type | Description |
: | --- | --- |
: |  [Field](v1-Field.html)  |  The value that is assigned the specified position in the set of values for the custom field.                 |

### getBackgroundColor

```JAVASCRIPT
getBackgroundColor(issue)
```

Returns the background color that is used for this field value in the specified issue. Can return `null`, `"white"`, or a hex color presentation.

Parameters
: | Name | Type | Description |
: | --- | --- | --- |
: | issue |  [Issue](v1-Issue.html)  |  The issue for which the background color is returned.                     |

Return Value
: | Type | Description |
: | --- | --- |
: |  String  |  The background color that is used for this field value in the specified issue.                 |

### getForegroundColor

```JAVASCRIPT
getForegroundColor(issue)
```

Returns the foreground color that is used for this field value in the specified issue. Can return `null`, `"white"`, or a hex color presentation.

Parameters
: | Name | Type | Description |
: | --- | --- | --- |
: | issue |  [Issue](v1-Issue.html)  |  The issue for which the foreground color is returned.                     |

Return Value
: | Type | Description |
: | --- | --- |
: |  String  |  The foreground color that is used for this field value in the specified issue.                 |

### getPossibleValuesForIssue

```JAVASCRIPT
getPossibleValuesForIssue(issue)
```

The list of possible values for a custom field based on the value-based conditions in the project settings and the current value stored in the issue. If there are no value-based conditions in the project settings, returns the complete list of values for the custom field.

Available since 2025.3

Parameters
: | Name | Type | Description |
: | --- | --- | --- |
: | issue |  [Issue](v1-Issue.html)  |  The issue for which the value is checked.                     |

Return Value
: | Type | Description |
: | --- | --- |
: |  [Set](v1-Set.html).<[Field](v1-Field.html)>  |  The set of possible values for the custom field.                 |

### getValuePresentation

```JAVASCRIPT
getValuePresentation(issue)
```

Returns the string presentation of the value that is stored in this field in the specified issue.

Parameters
: | Name | Type | Description |
: | --- | --- | --- |
: | issue |  [Issue](v1-Issue.html)  |  The issue for which the value presentation is returned.                     |

Return Value
: | Type | Description |
: | --- | --- |
: |  String  |  The string presentation of the value.                 |

### is

```JAVASCRIPT
is(fieldName, expected)
```

Checks whether a field is equal to an expected value.

Available since 2019.2.55603

Parameters
: | Name | Type | Description |
: | --- | --- | --- |
: | fieldName |  string  |  The name of the field to check.                     |
: | expected |  string  |  The expected value.                     |

Return Value
: | Type | Description |
: | --- | --- |
: |  boolean  |  If the field is equal to the expected value, returns `true`.                 |

### isChanged

```JAVASCRIPT
isChanged(fieldName)
```

Checks whether the value of a field is changed in the current transaction.

Parameters
: | Name | Type | Description |
: | --- | --- | --- |
: | fieldName |  string  |  The name of the field to check.                     |

Return Value
: | Type | Description |
: | --- | --- |
: |  boolean  |  If the value of the field is changed in the current transaction, returns `true`.                 |

### isValuePermittedInIssue

```JAVASCRIPT
isValuePermittedInIssue(issue, value)
```

Checks if a specified value is allowed in the issue.

Available since 2025.2

Parameters
: | Name | Type | Description |
: | --- | --- | --- |
: | issue |  [Issue](v1-Issue.html)  |  The issue for which the value is checked.                     |
: | value |  [Field](v1-Field.html)  |  The value to check.                     |

Return Value
: | Type | Description |
: | --- | --- |
: |  Boolean  |  If the conditions for using the specified value in the issue have been met, returns `true`.                 |

### isVisibleInIssue

```JAVASCRIPT
isVisibleInIssue(issue)
```

Checks if a field is visible in the issue.

Available since 2018.2.42312

Parameters
: | Name | Type | Description |
: | --- | --- | --- |
: | issue |  [Issue](v1-Issue.html)  |  The issue for which the condition for showing the field is checked.                     |

Return Value
: | Type | Description |
: | --- | --- |
: |  Boolean  |  When `true`, the condition for showing the custom field in the issue has been met. It can also mean that the field is not shown on a conditional basis and is always visible.                 |

Example
: ```JAVASCRIPT
: // The following example checks the issue to see whether a conditional field with the name "Related Activity"
: // is currently visible, meaning that the conditions for showing the field have been met.
: // If so, the value for the field is set to "Attendance"
:
: action: function (ctx) {
: if (ctx.RelatedActivity.isVisibleInIssue(ctx.issue)) {
: ctx.issue.fields.RelatedActivity.add(ctx.RelatedActivity.Attendance);
: }
: },
: requirements: {
: RelatedActivity: {
: name: 'Related Activity',
: type: entities.EnumField.fieldType,
: multi: true,
: Attendance: {}
: }
: }
: ```

### oldValue

```JAVASCRIPT
oldValue(fieldName)
```

Returns the previous value of a single-value field before an update was applied. If the field is not changed in the transaction, returns `null`.

Parameters
: | Name | Type | Description |
: | --- | --- | --- |
: | fieldName |  string  |  The name of the field.                     |

Return Value
: | Type | Description |
: | --- | --- |
: |  Object  |  If the field is changed in the current transaction, the previous value of the field. Otherwise, `null`.                 |

### required

```JAVASCRIPT
required(fieldName, message)
```

Asserts that a value is set for a field. If a value for the required field is not set, the specified message is displayed in the user interface.

Parameters
: | Name | Type | Description |
: | --- | --- | --- |
: | fieldName |  string  |  The name of the field to check.                     |
: | message |  string  |  The message that is displayed to the user that describes the field requirement.                     |

### was

```JAVASCRIPT
was(fieldName, expected)
```

Checks whether a field was equal to an expected value prior to the current transaction.

Available since 2019.2.55603

Parameters
: | Name | Type | Description |
: | --- | --- | --- |
: | fieldName |  string  |  The name of the field to check.                     |
: | expected |  string  |  The expected value.                     |

Return Value
: | Type | Description |
: | --- | --- |
: |  boolean  |  If the field was equal to the expected value, returns `true`.                 |

## See also

[ProjectCustomField](v1-ProjectCustomField.html) [Set](v1-Set.html) [Field](v1-Field.html) [Extension Properties](apps-extension-properties.html) [FieldBasedBundleValuesCondition](v1-FieldBasedBundleValuesCondition.html) [Issue](v1-Issue.html)

