# ViewRecord

## Overview

A `ViewRecord` represents a row in a `ViewFoundSet`, with functionality tailored to handle specific record-related operations. Key properties include `exception`, which provides information on the last exception that occurred for the record, and `foundset`, which references the parent foundset. The `recordMarkers` property facilitates validation by retaining markers for issues until a record is successfully saved or manually cleared.

The `ViewRecord` object includes methods for examining and managing record state. For instance, `getChangedData` retrieves unsaved changes in a dataset format, while `hasChangedData` and `isEditing` determine whether the record has pending modifications. The `createMarkers` method allows manual creation of validation markers. Other methods, like `revertChanges`, undo unsaved modifications, and `getPKs` fetch the primary key values of a record. Additionally, `isRelatedFoundSetLoaded` verifies if a related foundset is already initialized without triggering its load.

For more information on managing records within the context of view foundsets, refer to the [View foundset](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/viewfoundset) section of the documentation.

## **Extends**

[JSBaseSQLRecord](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/jsbasesqlrecord)

## Properties Summarized

| Type                                                                                                     | Name                            | Summary                                                                                                                                                                                    |
| -------------------------------------------------------------------------------------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [Exception](https://github.com/Servoy/gitbook/blob/master/reference/servoycore/dev-api/exception.md)     | [exception](#exception)         | Returns last occurred exception on this record (or null).                                                                                                                                  |
| [JSFoundSet](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/jsfoundset)           | [foundset](#foundset)           | Returns parent foundset of the record.                                                                                                                                                     |
| [JSRecordMarkers](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/jsrecordmarkers) | [recordMarkers](#recordmarkers) | Returns the validation object if there where validation failures for this record Can be set to null again if you checked the problems, will also be set to null when a save was succesful. |

## Methods Summarized

| Type                                                                                                     | Name                                                                           | Summary                                                                                                                       |
| -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- |
| [JSRecordMarkers](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/jsrecordmarkers) | [createMarkers()](#createmarkers)                                              | Creates and returns a new validation object for this record, which allows for markers to be used outside the validation flow. |
| [JSDataSet](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/jsdataset)             | [getChangedData()](#getchangeddata)                                            | Returns a JSDataSet with outstanding (not saved) changed data of this record.                                                 |
| [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string)                             | [getDataSource()](#getdatasource)                                              | Returns the records datasource string.                                                                                        |
| [Array](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/array)                               | [getPKs()](#getpks)                                                            | Returns an array with the primary key values of the record.                                                                   |
| [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean)                           | [hasChangedData()](#haschangeddata)                                            | Returns true if the current record has outstanding/changed data.                                                              |
| [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean)                           | [isEditing()](#isediting)                                                      | Returns true or false if the record has changes or not.                                                                       |
| [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean)                           | [isNew()](#isnew)                                                              | Returns true if the current record is a new record or false otherwise.                                                        |
| [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean)                           | [isRelatedFoundSetLoaded(relationName)](#isrelatedfoundsetloaded-relationname) | Returns true or false if the related foundset is already loaded.                                                              |
| void                                                                                                     | [revertChanges()](#revertchanges)                                              | Reverts the in memory outstanding (not saved) changes of the record.                                                          |

## Properties Detailed

### exception

Returns last occurred exception on this record (or null).

**Type**\
[Exception](https://github.com/Servoy/gitbook/blob/master/reference/servoycore/dev-api/exception.md) The occurred exception.

**Sample**

```js
var exception = record.exception;
```

### foundset

Returns parent foundset of the record.

**Type**\
[JSFoundSet](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/jsfoundset) The parent foundset of the record.

**Sample**

```js
var parent = record.foundset;
```

### recordMarkers

Returns the validation object if there where validation failures for this record Can be set to null again if you checked the problems, will also be set to null when a save was succesful.

**Type**\
[JSRecordMarkers](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/jsrecordmarkers) The last validtion object if the record was not validated.

**Sample**

```js
var recordMarkers = record.recordMarkers;
```

## Methods Detailed

### createMarkers()

Creates and returns a new validation object for this record, which allows for markers to be used outside the validation flow.\
Will overwrite the current markers if present.\
Can be set to null again if you checked the problems, will also be set to null when a save was successful.

**Returns:** [JSRecordMarkers](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/jsrecordmarkers) A new validation object.

**Sample**

```js
var recordMarkers = record.createMarkers();
```

### getChangedData()

Returns a JSDataSet with outstanding (not saved) changed data of this record.\
column1 is the column name, colum2 is the old data and column3 is the new data.

NOTE: To return an array of records with outstanding changed data, see the function foundset.getEditedRecords().

**Returns:** [JSDataSet](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/jsdataset) a JSDataSet with the changed data of this record.

**Sample**

```js
/** @type {JSDataSet} */
var dataset = record.getChangedData()
for( var i = 1 ; i <= dataset.getMaxRowIndex() ; i++ )
{
	application.output(dataset.getValue(i,1) +' '+ dataset.getValue(i,2) +' '+ dataset.getValue(i,3));
}
```

### getDataSource()

Returns the records datasource string.

**Returns:** [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) The datasource string of this record.

**Sample**

```js
var ds = record.getDataSource();
```

### getPKs()

Returns an array with the primary key values of the record.

**Returns:** [Array](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/array) an Array with the pk values.

**Sample**

```js
var pks = foundset.getSelectedRecord().getPKs() // also foundset.getRecord can be used
```

### hasChangedData()

Returns true if the current record has outstanding/changed data.

**Returns:** [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean) true if the current record has outstanding/changed data.

**Sample**

```js
var hasChanged = record.hasChangedData();
```

### isEditing()

Returns true or false if the record has changes or not.

As opposed to isEditing() of regular records, this method actually returns whether there are unsaved changes\
on this record, since there is no edit mode for view records.

**Returns:** [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean) true if unsaved changes are detected.

### isNew()

Returns true if the current record is a new record or false otherwise. New record means not saved to database.\
Because this record is part of a view foundset, this method will always return false.

**Returns:** [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean) true if the current record is a new record, false otherwise;

**Sample**

```js
var isNew = viewFoundset.getSelectedRecord().isNew();
```

### isRelatedFoundSetLoaded(relationName)

Returns true or false if the related foundset is already loaded. Will not load the related foundset.

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **relationName** name of the relation to check for

**Returns:** [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean) true if related foundset is loaded.

**Sample**

```js
var isLoaded = viewfoundset.getSelectedRecord().isRelatedFoundSetLoaded(relationName)
```

### revertChanges()

Reverts the in memory outstanding (not saved) changes of the record.

**Returns:** void

**Sample**

```js
var record= foundset.getSelectedRecord();
record.revertChanges();
```

***
