Show / Hide Table of Contents

Class QuoteLineRow

One line in a QuoteAlternative. QuoteLines are mainly information copied from the Products provider. Products information is sometimes edited by the user before being included in the quote, so most information is duplicated from Product rather than referenced directly.
Row Object for table 'QuoteLine'. Row objects correspond directly to database tables, and one instance of a row object represents one row in the corresponding table in the database.

Inheritance
object
SqlCommand
PrivateSave
TableRowBase
QuoteLineRow
Implements
INestedPersist
ISoDataLookup
ISentryIgnorable
Inherited Members
TableRowBase._saveOwner
TableRowBase._sentries
TableRowBase._relatedNestedPersistMembers
TableRowBase._isSaving
TableRowBase._sqlType
TableRowBase.InternalSetValue(int, object)
TableRowBase.InternalSetValue(SoField, object)
TableRowBase.GetFieldValue(FieldInfo)
TableRowBase.GetKnownFields()
TableRowBase.IsGhostField(FieldInfo)
TableRowBase.RowLoad()
TableRowBase.RowLoadAsync(ITableRowLoadHandler, CancellationToken)
TableRowBase.OnLoaded(IdxBase)
TableRowBase.Load(IdxBase, SoDataReader)
TableRowBase.Load(SoDataReader, TableInfo)
TableRowBase.SetDefaultsAsync(CancellationToken)
TableRowBase.SetDefaultsAsync(DashboardTileDefinitionRow, string, CancellationToken)
TableRowBase.SetSaveOwner(INestedPersist)
TableRowBase.GetForeignKeyHelperAsync(CancellationToken)
TableRowBase.SaveAsync()
TableRowBase.DeleteAsync()
TableRowBase.Validate()
TableRowBase.SetDirty(int, object, object)
TableRowBase.OnPreIdUpdateAsync()
TableRowBase.OnPrimaryKeyRequestAsync(PKContainer)
TableRowBase.OnPrimaryKeyUpdateAsync(PKContainer)
TableRowBase.OnIdUpdateAsync()
TableRowBase.BeginIgnoreSentryCheck()
TableRowBase.EndIgnoreSentryCheck()
TableRowBase.GetRelatedNestedPersist()
TableRowBase.RowLoad(ITableRowLoadHandler)
TableRowBase.this[int]
TableRowBase.this[SoField]
TableRowBase.Sentries
TableRowBase.IsDeleted
TableRowBase.IsSaving
TableRowBase.SqlType
TableRowBase.IsSentryIgnored
TableRowBase.IsMarkedForDelete
TableRowBase.OnElementSaved
TableRowBase.OnElementIdUpdate
PrivateSave.GetTableInfos()
PrivateSave.CloneToBasicUpdatingQuery()
PrivateSave.SetTicketLogAction(TicketLogAction, string)
PrivateSave.DoNotWriteTraveltransactionLog
PrivateSave.OnUpdateField
SqlCommand.Origin
SqlCommand.AdditionalInfo
SqlCommand.AddIgnoreAutoSentryTableInfo(TableInfo)
SqlCommand.AddIgnoreAutoSentryTableInfo(IEnumerable<TableInfo>)
SqlCommand.RemoveIgnoreAutoSentryTableInfo(TableInfo)
SqlCommand.ClearIgnoreAutoSentryTableInfos()
SqlCommand.IsAutoSentryIgnoredOnTableInfo(TableInfo)
SqlCommand.GetPrivateSaves()
SqlCommand.GetInserts()
SqlCommand.GetUpdates()
SqlCommand.GetDeletes()
SqlCommand.GetSelect()
SqlCommand.AutoSentryIgnoredTables
object.Equals(object)
object.Equals(object, object)
object.ReferenceEquals(object, object)
object.GetHashCode()
object.GetType()
object.MemberwiseClone()
Namespace: SuperOffice.CRM.Rows
Assembly: SoDataBase.dll
Syntax
public class QuoteLineRow : TableRowBase, INestedPersist, ISoDataLookup, ISentryIgnorable
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

Constructors

QuoteLineRow(QuoteLineRowIdxBase)

Constructor for the class taking an index as argument. One line in a QuoteAlternative. QuoteLines are mainly information copied from the Products provider. Products information is sometimes edited by the user before being included in the quote, so most information is duplicated from Product rather than referenced directly.

Declaration
protected QuoteLineRow(QuoteLineRow.QuoteLineRowIdxBase idx)
Parameters
Type Name Description
QuoteLineRow.QuoteLineRowIdxBase idx

The index representing a SELECT command to the database.

Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

Fields

_currentCode

Current value, see property Code.

Declaration
protected string _currentCode
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentDeliveredQuantity

Current value, see property DeliveredQuantity.

Declaration
protected double _currentDeliveredQuantity
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentDescription

Current value, see property Description.

Declaration
protected string _currentDescription
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentDiscountAmount

Current value, see property DiscountAmount.

Declaration
protected double _currentDiscountAmount
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentDiscountPercent

Current value, see property DiscountPercent.

Declaration
protected double _currentDiscountPercent
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentERPDiscountAmount

Current value, see property ERPDiscountAmount.

Declaration
protected double _currentERPDiscountAmount
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentERPDiscountPercent

Current value, see property ERPDiscountPercent.

Declaration
protected double _currentERPDiscountPercent
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentERPProductKey

Current value, see property ERPProductKey.

Declaration
protected string _currentERPProductKey
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentERPQuoteLineKey

Current value, see property ERPQuoteLineKey.

Declaration
protected string _currentERPQuoteLineKey
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentEarningAmount

Current value, see property EarningAmount.

Declaration
protected double _currentEarningAmount
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentEarningPercent

Current value, see property EarningPercent.

Declaration
protected double _currentEarningPercent
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentExtraField1

Current value, see property ExtraField1.

Declaration
protected string _currentExtraField1
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentExtraField2

Current value, see property ExtraField2.

Declaration
protected string _currentExtraField2
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentExtraField3

Current value, see property ExtraField3.

Declaration
protected string _currentExtraField3
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentExtraField4

Current value, see property ExtraField4.

Declaration
protected string _currentExtraField4
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentExtraField5

Current value, see property ExtraField5.

Declaration
protected string _currentExtraField5
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentExtraInfo

Current value, see property ExtraInfo.

Declaration
protected string _currentExtraInfo
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentIsSubscription

Current value, see property IsSubscription.

Declaration
protected short _currentIsSubscription
Field Value
Type Description
short
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentItemNumber

Current value, see property ItemNumber.

Declaration
protected string _currentItemNumber
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentName

Current value, see property Name.

Declaration
protected string _currentName
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentPriceUnit

Current value, see property PriceUnit.

Declaration
protected string _currentPriceUnit
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentProductCategoryKey

Current value, see property ProductCategoryKey.

Declaration
protected string _currentProductCategoryKey
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentProductFamilyKey

Current value, see property ProductFamilyKey.

Declaration
protected string _currentProductFamilyKey
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentProductTypeKey

Current value, see property ProductTypeKey.

Declaration
protected string _currentProductTypeKey
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentQuantity

Current value, see property Quantity.

Declaration
protected double _currentQuantity
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentQuantityUnit

Current value, see property QuantityUnit.

Declaration
protected string _currentQuantityUnit
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentQuoteAlternativeId

Current value, see property QuoteAlternativeId.

Declaration
protected int _currentQuoteAlternativeId
Field Value
Type Description
int
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentQuoteLineId

Current value, see property QuoteLineId.

Declaration
protected int _currentQuoteLineId
Field Value
Type Description
int
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentRank

Current value, see property Rank.

Declaration
protected int _currentRank
Field Value
Type Description
int
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentReason

Current value, see property Reason.

Declaration
protected string _currentReason
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentRegistered

Current value, see property Registered.

Declaration
protected DateTime _currentRegistered
Field Value
Type Description
DateTime
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentRegisteredAssociateId

Current value, see property RegisteredAssociateId.

Declaration
protected int _currentRegisteredAssociateId
Field Value
Type Description
int
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentRights

Current value, see property Rights.

Declaration
protected string _currentRights
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentRule

Current value, see property Rule.

Declaration
protected string _currentRule
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentStatus

Current value, see property Status.

Declaration
protected QuoteStatus _currentStatus
Field Value
Type Description
QuoteStatus
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentSubscriptionQuantity

Current value, see property SubscriptionQuantity.

Declaration
protected double _currentSubscriptionQuantity
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentSubscriptionStart

Current value, see property SubscriptionStart.

Declaration
protected DateTime _currentSubscriptionStart
Field Value
Type Description
DateTime
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentSubscriptionUnit

Current value, see property SubscriptionUnit.

Declaration
protected string _currentSubscriptionUnit
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentSupplier

Current value, see property Supplier.

Declaration
protected string _currentSupplier
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentSupplierCode

Current value, see property SupplierCode.

Declaration
protected string _currentSupplierCode
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentTotalPrice

Current value, see property TotalPrice.

Declaration
protected double _currentTotalPrice
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentUnitCost

Current value, see property UnitCost.

Declaration
protected double _currentUnitCost
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentUnitListPrice

Current value, see property UnitListPrice.

Declaration
protected double _currentUnitListPrice
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentUnitMinimumPrice

Current value, see property UnitMinimumPrice.

Declaration
protected double _currentUnitMinimumPrice
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentUpdated

Current value, see property Updated.

Declaration
protected DateTime _currentUpdated
Field Value
Type Description
DateTime
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentUpdatedAssociateId

Current value, see property UpdatedAssociateId.

Declaration
protected int _currentUpdatedAssociateId
Field Value
Type Description
int
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentUpdatedCount

Current value, see property UpdatedCount.

Declaration
protected short _currentUpdatedCount
Field Value
Type Description
short
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentUrl

Current value, see property Url.

Declaration
protected string _currentUrl
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentUserValueOverride

Current value, see property UserValueOverride.

Declaration
protected ValueOverride _currentUserValueOverride
Field Value
Type Description
ValueOverride
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentVAT

Current value, see property VAT.

Declaration
protected double _currentVAT
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_currentVATInfo

Current value, see property VATInfo.

Declaration
protected string _currentVATInfo
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedCode

Persisted value, see property Code.

Declaration
protected string _persistedCode
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedDeliveredQuantity

Persisted value, see property DeliveredQuantity.

Declaration
protected double _persistedDeliveredQuantity
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedDescription

Persisted value, see property Description.

Declaration
protected string _persistedDescription
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedDiscountAmount

Persisted value, see property DiscountAmount.

Declaration
protected double _persistedDiscountAmount
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedDiscountPercent

Persisted value, see property DiscountPercent.

Declaration
protected double _persistedDiscountPercent
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedERPDiscountAmount

Persisted value, see property ERPDiscountAmount.

Declaration
protected double _persistedERPDiscountAmount
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedERPDiscountPercent

Persisted value, see property ERPDiscountPercent.

Declaration
protected double _persistedERPDiscountPercent
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedERPProductKey

Persisted value, see property ERPProductKey.

Declaration
protected string _persistedERPProductKey
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedERPQuoteLineKey

Persisted value, see property ERPQuoteLineKey.

Declaration
protected string _persistedERPQuoteLineKey
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedEarningAmount

Persisted value, see property EarningAmount.

Declaration
protected double _persistedEarningAmount
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedEarningPercent

Persisted value, see property EarningPercent.

Declaration
protected double _persistedEarningPercent
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedExtraField1

Persisted value, see property ExtraField1.

Declaration
protected string _persistedExtraField1
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedExtraField2

Persisted value, see property ExtraField2.

Declaration
protected string _persistedExtraField2
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedExtraField3

Persisted value, see property ExtraField3.

Declaration
protected string _persistedExtraField3
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedExtraField4

Persisted value, see property ExtraField4.

Declaration
protected string _persistedExtraField4
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedExtraField5

Persisted value, see property ExtraField5.

Declaration
protected string _persistedExtraField5
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedExtraInfo

Persisted value, see property ExtraInfo.

Declaration
protected string _persistedExtraInfo
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedIsSubscription

Persisted value, see property IsSubscription.

Declaration
protected short _persistedIsSubscription
Field Value
Type Description
short
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedItemNumber

Persisted value, see property ItemNumber.

Declaration
protected string _persistedItemNumber
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedName

Persisted value, see property Name.

Declaration
protected string _persistedName
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedPriceUnit

Persisted value, see property PriceUnit.

Declaration
protected string _persistedPriceUnit
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedProductCategoryKey

Persisted value, see property ProductCategoryKey.

Declaration
protected string _persistedProductCategoryKey
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedProductFamilyKey

Persisted value, see property ProductFamilyKey.

Declaration
protected string _persistedProductFamilyKey
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedProductTypeKey

Persisted value, see property ProductTypeKey.

Declaration
protected string _persistedProductTypeKey
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedQuantity

Persisted value, see property Quantity.

Declaration
protected double _persistedQuantity
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedQuantityUnit

Persisted value, see property QuantityUnit.

Declaration
protected string _persistedQuantityUnit
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedQuoteAlternativeId

Persisted value, see property QuoteAlternativeId.

Declaration
protected int _persistedQuoteAlternativeId
Field Value
Type Description
int
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedQuoteLineId

Persisted value, see property QuoteLineId.

Declaration
protected int _persistedQuoteLineId
Field Value
Type Description
int
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedRank

Persisted value, see property Rank.

Declaration
protected int _persistedRank
Field Value
Type Description
int
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedReason

Persisted value, see property Reason.

Declaration
protected string _persistedReason
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedRegistered

Persisted value, see property Registered.

Declaration
protected DateTime _persistedRegistered
Field Value
Type Description
DateTime
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedRegisteredAssociateId

Persisted value, see property RegisteredAssociateId.

Declaration
protected int _persistedRegisteredAssociateId
Field Value
Type Description
int
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedRights

Persisted value, see property Rights.

Declaration
protected string _persistedRights
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedRule

Persisted value, see property Rule.

Declaration
protected string _persistedRule
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedStatus

Persisted value, see property Status.

Declaration
protected QuoteStatus _persistedStatus
Field Value
Type Description
QuoteStatus
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedSubscriptionQuantity

Persisted value, see property SubscriptionQuantity.

Declaration
protected double _persistedSubscriptionQuantity
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedSubscriptionStart

Persisted value, see property SubscriptionStart.

Declaration
protected DateTime _persistedSubscriptionStart
Field Value
Type Description
DateTime
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedSubscriptionUnit

Persisted value, see property SubscriptionUnit.

Declaration
protected string _persistedSubscriptionUnit
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedSupplier

Persisted value, see property Supplier.

Declaration
protected string _persistedSupplier
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedSupplierCode

Persisted value, see property SupplierCode.

Declaration
protected string _persistedSupplierCode
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedTotalPrice

Persisted value, see property TotalPrice.

Declaration
protected double _persistedTotalPrice
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedUnitCost

Persisted value, see property UnitCost.

Declaration
protected double _persistedUnitCost
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedUnitListPrice

Persisted value, see property UnitListPrice.

Declaration
protected double _persistedUnitListPrice
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedUnitMinimumPrice

Persisted value, see property UnitMinimumPrice.

Declaration
protected double _persistedUnitMinimumPrice
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedUpdated

Persisted value, see property Updated.

Declaration
protected DateTime _persistedUpdated
Field Value
Type Description
DateTime
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedUpdatedAssociateId

Persisted value, see property UpdatedAssociateId.

Declaration
protected int _persistedUpdatedAssociateId
Field Value
Type Description
int
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedUpdatedCount

Persisted value, see property UpdatedCount.

Declaration
protected short _persistedUpdatedCount
Field Value
Type Description
short
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedUrl

Persisted value, see property Url.

Declaration
protected string _persistedUrl
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedUserValueOverride

Persisted value, see property UserValueOverride.

Declaration
protected ValueOverride _persistedUserValueOverride
Field Value
Type Description
ValueOverride
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedVAT

Persisted value, see property VAT.

Declaration
protected double _persistedVAT
Field Value
Type Description
double
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

_persistedVATInfo

Persisted value, see property VATInfo.

Declaration
protected string _persistedVATInfo
Field Value
Type Description
string
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

Properties

Code

.NET type: string. A value the salesmen use to quickly find the correct product. Is stored here if the user changes the value from the product in the pricelist, or just enters a QuoteLine without a product link.

Declaration
public virtual string Code { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[255].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

DeliveredQuantity

.NET type: double. How many units have been delivered - updated by ERP system.

Declaration
public virtual double DeliveredQuantity { get; set; }
Property Value
Type Description
double
Remarks

Original type in dictionary: Double.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (0.0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

Description

.NET type: string. A longer description for the product. Is stored here if the user changes the value from the product in the pricelist, or just enters a QuoteLine without a product link.

Declaration
public virtual string Description { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[2048].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

DiscountAmount

.NET type: double. The discount for the line, in whatever currency the sale is in. Both ‘DiscountPercent’ and ‘DiscountAmount’ shall be filled out, but the UserValueOverride field must be set to the field the user actually changed last. If this field is filled out by the user, it overrides any discount suggested by the connector. If the user has not filled this in, the system will copy the ERP discount amount to this field.

Declaration
public virtual double DiscountAmount { get; set; }
Property Value
Type Description
double
Remarks

Original type in dictionary: Double.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (0.0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

DiscountPercent

.NET type: double. The discount for the line, in percent. Both ‘DiscountPercent’ and ‘DiscountAmount’ shall be filled out, but the UserValueOverride field must be set to the field the user actually changed last. If this field is filled out by the user, it overrides any discount suggested by the connector. If the user has not filled this in, the system will copy the ERP discount amount to this field. The Percentage is given in integer form, i.e. ‘12%’ is represented as ‘12’.

Declaration
public virtual double DiscountPercent { get; set; }
Property Value
Type Description
double
Remarks

Original type in dictionary: Double.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (0.0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

ERPDiscountAmount

.NET type: double. The discount the system calculates based on customer / quantity / whatever. Can be overrided by the salesman in the field 'DiscountPercent' or 'DiscountAmount'. If UserValueOverride is set to ‘None’ then the value is copied to DiscountAmount. Both fields ERPDiscountPercent and ERPDiscountAmount will be filled out.

Declaration
public virtual double ERPDiscountAmount { get; set; }
Property Value
Type Description
double
Remarks

Original type in dictionary: Double.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (0.0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

ERPDiscountPercent

.NET type: double. The discount the system calculates based on customer / quantity / whatever. Can be overrided by the salesman in the field 'DiscountPercent' or 'DiscountAmount'. Both fields ERPDiscountPercent and ERPDiscountAmount will be filled out. If UserValueOverride is set to ‘None’ then the value is copied to DiscountPercent. The Percentage is given in integer form, i.e. ‘12%’ is represented as ‘12’.

Declaration
public virtual double ERPDiscountPercent { get; set; }
Property Value
Type Description
double
Remarks

Original type in dictionary: Double.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (0.0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

ERPProductKey

.NET type: string. Foreign key of product+pricelist this line is based on. Can be blank since the QuoteLine doesn’t have to be connected to a product.

Declaration
public virtual string ERPProductKey { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[255].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

ERPQuoteLineKey

.NET type: string. The foreign key to the quoteline in ERP system (if it has such a representation).

Declaration
public virtual string ERPQuoteLineKey { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[255].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

EarningAmount

.NET type: double. The earning, in whatever currency the sale is in. Both ‘EarningAmount and ‘EarningPercent shall be filled out, but the UserValueOverride field must be set to the field the user actually changed last.

Declaration
public virtual double EarningAmount { get; set; }
Property Value
Type Description
double
Remarks

Original type in dictionary: Double.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (0.0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

EarningPercent

.NET type: double. The earning, in percent. Both ‘EarningAmount and ‘EarningPercent shall be filled out, but the UserValueOverride field must be set to the field the user actually changed last. The Percentage is given in integer form, i.e. ‘12%’ is represented as ‘12’.

Declaration
public virtual double EarningPercent { get; set; }
Property Value
Type Description
double
Remarks

Original type in dictionary: Double.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (0.0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

ExtraField1

.NET type: string. This a simple field for adding information that the Connector can provide, and that the qoute document need to display.

Declaration
public virtual string ExtraField1 { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[1024].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

ExtraField2

.NET type: string. This a simple field for adding information that the Connector can provide, and that the qoute document need to display.

Declaration
public virtual string ExtraField2 { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[1024].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

ExtraField3

.NET type: string. This a simple field for adding information that the Connector can provide, and that the qoute document need to display.

Declaration
public virtual string ExtraField3 { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[1024].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

ExtraField4

.NET type: string. This a simple field for adding information that the Connector can provide, and that the qoute document need to display.

Declaration
public virtual string ExtraField4 { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[1024].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

ExtraField5

.NET type: string. This a simple field for adding information that the Connector can provide, and that the qoute document need to display.

Declaration
public virtual string ExtraField5 { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[1024].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

ExtraInfo

.NET type: string. Extra information, supplied by QuoteConnector, used by a future dynamic GUI extension

Declaration
public virtual string ExtraInfo { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: Clob.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

InnerFieldValuePairs

The values of all the fields in the row.
The first field is the primary key.
The index of the value corresponds to the name of the field returned from the Fields property.

Declaration
protected override ArgumentParameterCollection InnerFieldValuePairs { get; }
Property Value
Type Description
ArgumentParameterCollection
Overrides
PrivateSave.InnerFieldValuePairs
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

InnerPrimaryKey

The primary key needed to decide which specific row to alter with the current sql-command.

Declaration
protected override FieldInfo InnerPrimaryKey { get; }
Property Value
Type Description
FieldInfo
Overrides
PrivateSave.InnerPrimaryKey
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

InnerPrimaryKeyValue

The actual value the primary key must have.

Declaration
protected override Parameter InnerPrimaryKeyValue { get; }
Property Value
Type Description
Parameter
Overrides
PrivateSave.InnerPrimaryKeyValue
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

IsDirty

Is the row dirty, e.g. been modified since the last time it was saved to the database.

Declaration
public override bool IsDirty { get; }
Property Value
Type Description
bool
Overrides
TableRowBase.IsDirty
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

IsNew

Is this object new, meaning that it does not exist in the database.

Declaration
public override bool IsNew { get; }
Property Value
Type Description
bool
Overrides
TableRowBase.IsNew
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

IsSubscription

.NET type: short. Is this a subscription product, sold in repeating intervals/amounts?

Declaration
public virtual short IsSubscription { get; set; }
Property Value
Type Description
short
Remarks

Original type in dictionary: Bool.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value ((Int16)0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

this[string]

Get or set a value based on the name of the field.

Declaration
public override object this[string fieldName] { get; set; }
Parameters
Type Name Description
string fieldName

Name of the field in the database

Property Value
Type Description
object

Value of the field.

Overrides
TableRowBase.this[string]
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

Exceptions
Type Condition
ArgumentException

Thrown if the field is not known.

ItemNumber

.NET type: string. Norwegian: «Postnummer». Specific numbers from some hierarchy, for instance '1.4.3.2'. Is stored here if the user changes the value from the product in the pricelist, or just enters a QuoteLine without a product link.

Declaration
public virtual string ItemNumber { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[80].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

Name

.NET type: string. The name of the product. Is stored here if the user changes the value from the product in the pricelist, or just enters a QuoteLine without a product link.

Declaration
public virtual string Name { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[255].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

PriceUnit

.NET type: string. What is the unit (meter, ton, bushel, microsecond, gradus, τρυβλίον, 五合枡, دونم or whatever); read-only for lines that originate in defined products.

Declaration
public virtual string PriceUnit { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[80].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

ProductCategoryKey

.NET type: string. Either a List id to an id from a connector provided list, or, if the connection doesn't support lists, a text. Is stored here if the user changes the value from the product in the pricelist, or just enters a QuoteLine without a product link.

Declaration
public virtual string ProductCategoryKey { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[255].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

ProductFamilyKey

.NET type: string. Either a List id to an id from a connector provided list, or, if the connection doesn't support lists, a text. Is stored here if the user changes the value from the product in the pricelist, or just enters a QuoteLine without a product link.

Declaration
public virtual string ProductFamilyKey { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[255].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

ProductTypeKey

.NET type: string. Either a List id to an id from a connector provided list, or, if the connection doesn't support lists, a text. Is stored here if the user changes the value from the product in the pricelist, or just enters a QuoteLine without a product link.

Declaration
public virtual string ProductTypeKey { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[255].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

Quantity

.NET type: double. How many units; this is a decimal field since you might want to offer fractional units (2.5kg, or 0.5PC).

Declaration
public virtual double Quantity { get; set; }
Property Value
Type Description
double
Remarks

Original type in dictionary: Double.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (0.0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

QuantityUnit

.NET type: string. What is the unit (meter, ton, bushel, microsecond, gradus, τρυβλίον, 五合枡, دونم or whatever); Connector handles conversion relative to PriceUnit if they are different.

Declaration
public virtual string QuantityUnit { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[80].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

QuoteAlternativeId

.NET type: int. The alternative this line is part of, the conceptual Parent in CRM database.

Declaration
public virtual int QuoteAlternativeId { get; set; }
Property Value
Type Description
int
Remarks

Original type in dictionary: FK.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

QuoteLineId

.NET type: int. Primary key

Declaration
public virtual int QuoteLineId { get; }
Property Value
Type Description
int
Remarks

Original type in dictionary: PK.

This field is the primary key and can only be read, never written.

This field is not protected by the Sentry system, and can always be read

QuoteLineTableInfo

Get the QuoteLineTableInfo object associated with the row.

Declaration
public QuoteLineTableInfo QuoteLineTableInfo { get; }
Property Value
Type Description
QuoteLineTableInfo
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

Rank

.NET type: int. QuoteLines can be re-ordered, so we must track the ordering.

Declaration
public virtual int Rank { get; set; }
Property Value
Type Description
int
Remarks

Original type in dictionary: Int.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

Reason

.NET type: string. If QuoteStatus is not OK, then this field contains a localized explanation that the user can be shown.

Declaration
public virtual string Reason { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[2048].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

Registered

.NET type: DateTime. Registered when in UTC

Declaration
public virtual DateTime Registered { get; set; }
Property Value
Type Description
DateTime
Remarks

Original type in dictionary: UtcDateTime.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (DateTime.MinValue)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

RegisteredAssociateId

.NET type: int. Registered by whom

Declaration
public virtual int RegisteredAssociateId { get; set; }
Property Value
Type Description
int
Remarks

Original type in dictionary: FK.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

Rights

.NET type: string. Field1=right&Field2=right, etc. of any fields that have non-standard field access rights. Rights can be one of: N (=None or Hidden), R (=Read-only), W (=Writeable), M (=Mandatory). The fields will mostly be from the Quoteline table, but some added fields that are conceptually part of the quoteline, like Image will also be possibly to set rights on. Will be used by SuperOffice to control the user interface when showing the record.

Declaration
public virtual string Rights { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[2048].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

Rule

.NET type: string. The names of one or more calculation rules that are in effect for this line, comma-separated case-insensitive

Declaration
public virtual string Rule { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[255].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

Status

.NET type: QuoteStatus. If there was a problem with for instance calculation, this field is set to warning or error. Typically shown as an icon. QuoteStatus is an enum with statuses: OK, OKWithInfo, Warning, Error.

Declaration
public virtual QuoteStatus Status { get; set; }
Property Value
Type Description
QuoteStatus
Remarks

Original type in dictionary: Enum.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value ((short)0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

SubscriptionQuantity

.NET type: double. The default number of SubscriptionUnits to suggest when creating quote lines from this product

Declaration
public virtual double SubscriptionQuantity { get; set; }
Property Value
Type Description
double
Remarks

Original type in dictionary: Double.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (0.0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

SubscriptionStart

.NET type: DateTime. Start date for subscription, as offered

Declaration
public virtual DateTime SubscriptionStart { get; set; }
Property Value
Type Description
DateTime
Remarks

Original type in dictionary: DateTime.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (DateTime.MinValue)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

SubscriptionUnit

.NET type: string. Either a List id to an id from a connector provided list, or, if the connection doesn’t support lists, a text with the actual subscription unit.

Declaration
public virtual string SubscriptionUnit { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[255].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

Supplier

.NET type: string. The name of the supplier. Is stored here if the user changes the value from the product in the pricelist, or just enters a QuoteLine without a product link.

Declaration
public virtual string Supplier { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[255].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

SupplierCode

.NET type: string. The suppliers' code or part number for this product. Is stored here if the user changes the value from the product in the pricelist, or just enters a QuoteLine without a product link.

Declaration
public virtual string SupplierCode { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[255].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

TableInfo

Get the TableInfo for the table.

Declaration
public override TableInfo TableInfo { get; }
Property Value
Type Description
TableInfo

The TableInfo for the table.

Overrides
TableRowBase.TableInfo
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

TotalPrice

.NET type: double. TotalPrice = SubTotal - DiscountAmount or TotalPrice = (UnitCost * Quantity) + EarningAmount, according to what the user changed last.

Declaration
public virtual double TotalPrice { get; set; }
Property Value
Type Description
double
Remarks

Original type in dictionary: Double.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (0.0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

UnitCost

.NET type: double. The cost price per unit for this product. May be filled in by connector if it has the Provide-Cost capability.

Declaration
public virtual double UnitCost { get; set; }
Property Value
Type Description
double
Remarks

Original type in dictionary: Double.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (0.0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

UnitListPrice

.NET type: double. The standard list price; as given by ERP Connector, OR overridden by user

Declaration
public virtual double UnitListPrice { get; set; }
Property Value
Type Description
double
Remarks

Original type in dictionary: Double.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (0.0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

UnitMinimumPrice

.NET type: double. The minimum price this line can be sold for (to limit discounting). Will come from the connector. List price per unit must exceed the minimum price per unit.

Declaration
public virtual double UnitMinimumPrice { get; set; }
Property Value
Type Description
double
Remarks

Original type in dictionary: Double.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (0.0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

Updated

.NET type: DateTime. Last updated when in UTC

Declaration
public virtual DateTime Updated { get; set; }
Property Value
Type Description
DateTime
Remarks

Original type in dictionary: UtcDateTime.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (DateTime.MinValue)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

UpdatedAssociateId

.NET type: int. Last updated by whom

Declaration
public virtual int UpdatedAssociateId { get; set; }
Property Value
Type Description
int
Remarks

Original type in dictionary: FK.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

UpdatedCount

.NET type: short. Number of updates made to this record

Declaration
public virtual short UpdatedCount { get; set; }
Property Value
Type Description
short
Remarks

Original type in dictionary: UShort.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value ((Int16)0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

Url

.NET type: string. A url to the product info. Can be empty. Is stored here if the user changes the value from the product in the pricelist, or just enters a QuoteLine without a product link.

Declaration
public virtual string Url { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[1024].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

UserValueOverride

.NET type: ValueOverride. Has the pre-calculated (from ERP) price information been overridden, and how. If the user has filled out the discountpercentage field, then the UserValueOverride field is set to OverridePercent. (The DiscountAmount, EarningPercent, EarningAmount and TotalPrice fields are calculated based on the DiscountPercent.)

Declaration
public virtual ValueOverride UserValueOverride { get; set; }
Property Value
Type Description
ValueOverride
Remarks

Original type in dictionary: Enum.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value ((short)0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

VAT

.NET type: double. Tax/VAT - THIS IS A PERCENTAGE. The connector is responsible for populating this field; the percentage will be used to calculate VAT amounts available as merge fields in the document templates (but amounts are never stored in the database).

Declaration
public virtual double VAT { get; set; }
Property Value
Type Description
double
Remarks

Original type in dictionary: Double.

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (0.0)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

VATInfo

.NET type: string. Tax/VAT information, Extra info about VAT that the connector might insert, and the users might want to specify on the quote. The core CRM product has no business logic for this field, it is wholly up to connectors to use it.

Declaration
public virtual string VATInfo { get; set; }
Property Value
Type Description
string
Remarks

Original type in dictionary: String[255].

You need to have Read access to get the value of this field. If you do not have access, you will get a blank value (string.Empty)

You need to have Write access to set this field to a new value (Sentry will throw exception otherwise)

Setting this field to a new value will not affect the Sentry calculations and your rights

Exceptions
Type Condition
SoSentryException

Thrown if the set method is accessed without having the Write access right to the field

Methods

CreateNew()

Create a new instance of the QuoteLineRow object. One line in a QuoteAlternative. QuoteLines are mainly information copied from the Products provider. Products information is sometimes edited by the user before being included in the quote, so most information is duplicated from Product rather than referenced directly.

Declaration
public static QuoteLineRow CreateNew()
Returns
Type Description
QuoteLineRow

A new instance of the QuoteLineRow object.

Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

GetFromCustomSearch(CustomSearch)

Create a new instance of the QuoteLineRow object, and populate it with data from a custom search. If the search returns no results, an object with IsNew will be returned; if the result contains one row, an object representing that row will be returned. If the result contains more than one row, the first row will be used and the rest discarded (there is no way of detecting this situation).

Declaration
public static QuoteLineRow GetFromCustomSearch(QuoteLineRow.CustomSearch query)
Parameters
Type Name Description
QuoteLineRow.CustomSearch query

The custom search to execute against the database

Returns
Type Description
QuoteLineRow

A new instance of the QuoteLineRow object, reflecting the result of the query.

Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

GetFromCustomSearchAsync(CustomSearch, CancellationToken)

Create a new instance of the QuoteLineRow object, and populate it with data from a custom search. If the search returns no results, an object with IsNew will be returned; if the result contains one row, an object representing that row will be returned. If the result contains more than one row, the first row will be used and the rest discarded (there is no way of detecting this situation).

Declaration
[CreateSyncVersion(OmitNullableDirective = true)]
public static Task<QuoteLineRow> GetFromCustomSearchAsync(QuoteLineRow.CustomSearch query, CancellationToken cancellationToken = default)
Parameters
Type Name Description
QuoteLineRow.CustomSearch query

The custom search to execute against the database

CancellationToken cancellationToken
Returns
Type Description
Task<QuoteLineRow>

A new instance of the QuoteLineRow object, reflecting the result of the query.

Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

GetFromIdxQuoteLineIdAsync(int, CancellationToken)

Create a new instance of the QuoteLineRow object, by querying the database table via the index 'IDXQuoteLineId'. This method is intended to make it easy to use efficient queries that match a database index.

Declaration
public static Task<QuoteLineRow> GetFromIdxQuoteLineIdAsync(int quoteLineId, CancellationToken cancellationToken = default)
Parameters
Type Name Description
int quoteLineId
CancellationToken cancellationToken
Returns
Type Description
Task<QuoteLineRow>

Row object that represents the result of the search. IsNew will be true if the query did not match any row in the table

Remarks

This method represents one of the unique indexes on the QuoteLine table. Non-unique indexes have corresponding inner classes and methods in the QuoteLineRows collection, since they may return more than one row.

GetFromReader(SoDataReader, QuoteLineTableInfo)

Create a new instance of the QuoteLineRow object, and populate it with data from a reader/tableinfo. If the reader has DBNull as the current value of the primary key field, an unpopulated object with IsNew == true will be returned. If any fields are missing or one of the non-primary key fields is DBNull, an exception will be thrown. One line in a QuoteAlternative. QuoteLines are mainly information copied from the Products provider. Products information is sometimes edited by the user before being included in the quote, so most information is duplicated from Product rather than referenced directly.

Declaration
public static QuoteLineRow GetFromReader(SoDataReader reader, QuoteLineTableInfo tableInfo)
Parameters
Type Name Description
SoDataReader reader

SoDataReader positioned to a valid database row.

QuoteLineTableInfo tableInfo

QuoteLineTableInfo instance used in the query that is the source of the reader. The fields used from the reader will be those owned by this tableinfo object.

Returns
Type Description
QuoteLineRow

A new instance of the QuoteLineRow object.

Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

GetPersistedFieldValue(FieldInfo)

Get the persisted value of a field.

Declaration
public override object GetPersistedFieldValue(FieldInfo field)
Parameters
Type Name Description
FieldInfo field

Specification of a field

Returns
Type Description
object

Field value, such as an int, DateTime, string ... Null can be returned if the value is not known.

Overrides
PrivateSave.GetPersistedFieldValue(FieldInfo)
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

Exceptions
Type Condition
ArgumentException

Thrown if the field is not known.

InternalSetValue(string, object)

One line in a QuoteAlternative. QuoteLines are mainly information copied from the Products provider. Products information is sometimes edited by the user before being included in the quote, so most information is duplicated from Product rather than referenced directly.
Row Object for table 'QuoteLine'. Row objects correspond directly to database tables, and one instance of a row object represents one row in the corresponding table in the database.

Declaration
protected override void InternalSetValue(string fieldName, object value)
Parameters
Type Name Description
string fieldName
object value
Overrides
TableRowBase.InternalSetValue(string, object)
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

IsPersistedFieldValueKnown(FieldInfo)

Check if the persisted value for a field is known.

Declaration
public override bool IsPersistedFieldValueKnown(FieldInfo field)
Parameters
Type Name Description
FieldInfo field

Specification of a field

Returns
Type Description
bool

True if the value is known and sentry permits read.

Overrides
PrivateSave.IsPersistedFieldValueKnown(FieldInfo)
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

OnLoad(SoDataReader, TableInfo)

Fill the object with data returned from the database.

Declaration
protected override void OnLoad(SoDataReader reader, TableInfo tableInfo)
Parameters
Type Name Description
SoDataReader reader

Object holding the data returned from the database.

TableInfo tableInfo

The TableInfo used for the SELECT statement.

Overrides
TableRowBase.OnLoad(SoDataReader, TableInfo)
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

OnSaveAsync(BatchSave)

Add the object to the BatchSave list if it needs saving.

Declaration
protected override Task OnSaveAsync(BatchSave batchSave)
Parameters
Type Name Description
BatchSave batchSave

Collection of objects to be saved within the transaction.

Returns
Type Description
Task
Overrides
TableRowBase.OnSaveAsync(BatchSave)
Remarks

Classes overriding this method should call it.

OnSavedAsync(bool)

Method called after the save operation has been performed.

Declaration
protected override Task OnSavedAsync(bool bSucceeded)
Parameters
Type Name Description
bool bSucceeded

True if the save operation succeeded (e.g. transaction committed), or false if the save operation failed (e.g. transaction rolled back)

Returns
Type Description
Task
Overrides
TableRowBase.OnSavedAsync(bool)
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

Reset()

Reset the changes made on the object.

Declaration
protected override void Reset()
Overrides
TableRowBase.Reset()
Remarks

If the row is not persisted to the database (e.g. IsNew is true), all the values will be reset. If the row has been persisted to or loaded from the database, the properties will be set to those of the last persisted or loaded values.

SetDefaultsAsync(DefaulterStrategy, CancellationToken)

Set default values for the row.

Declaration
public override Task SetDefaultsAsync(DefaulterStrategy strategy, CancellationToken cancellationToken = default)
Parameters
Type Name Description
DefaulterStrategy strategy

Strategy used when applying default values; values depend on where we are in the Create/Fetch/Populate/Save cycle

CancellationToken cancellationToken
Returns
Type Description
Task
Overrides
TableRowBase.SetDefaultsAsync(DefaulterStrategy, CancellationToken)
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

SetPrimaryKey(int)

Set the primary key for the row.

Declaration
protected override void SetPrimaryKey(int primaryKey)
Parameters
Type Name Description
int primaryKey

The new primary key for the row.

Overrides
TableRowBase.SetPrimaryKey(int)
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

SetRowAsNew()

One line in a QuoteAlternative. QuoteLines are mainly information copied from the Products provider. Products information is sometimes edited by the user before being included in the quote, so most information is duplicated from Product rather than referenced directly.
Row Object for table 'QuoteLine'. Row objects correspond directly to database tables, and one instance of a row object represents one row in the corresponding table in the database.

Declaration
public override void SetRowAsNew()
Overrides
TableRowBase.SetRowAsNew()
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

ToString()

ToString method intended for debugging, returns a string that displays the object type, new/dirty status, primary key and the string fields

Declaration
public override string ToString()
Returns
Type Description
string
Overrides
object.ToString()
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

Validate(RowValidator)

Validate this row.

Declaration
public override void Validate(RowValidator rowValidator)
Parameters
Type Name Description
RowValidator rowValidator

RowValidator for inserting the result of the validation

Overrides
TableRowBase.Validate(RowValidator)
Remarks

Row objects can be created in several ways.

  • Use the static CreateNew() method to create a new, empty object. After populating it with values, you call the SuperOffice.CRM.Data.TableRowBase.Save method and a corresponding row in the database is created, and the objects' primary key field updated. This is the preferred way to insert new rows into the database.
  • You can create a (nested) QuoteLineRow QuoteLineRow.CustomSearch object to obtain a query pre-populated with the correct tableinfo and return fields. This query can be modified with restrictions, etc. Then, use the static GetFromCustomSearch(CustomSearch) method to apply the query to the database and obtain the result as a Row object. This is how you select existing rows from the database when you have a query that does not correspond to any of the existing database indexes.
  • For each unique index defined for the table, there is a corresponding GetFromIdx method to make retrieving data via the indexes easy. Note that if you try to fetch a row that does not exist (for instance, by using the primary key index and specifying a primary key that does not exist in the database), you will get a Row object with the SuperOffice.CRM.Data.QuoteLineRow.IsNew and SuperOffice.CRM.Data.QuoteLineRow.IsDirty properties set to true. Such a Row object is called a 'ghost' and cannot be updated, saved or deleted. You can also get a ghost if the row does exist in the database, but the Sentry system denies Select rights to the row.
  • Finally, if you have an SoDataReader that contains ALL the fields of the table, and you have the QuoteLineTableInfo instance used in the query behind the reader, you can use the static GetFromReader(SoDataReader, QuoteLineTableInfo) method to create a new row object from the reader and the table info. This is useful when you have a larger, more complex query, for instance one that joins a number of tables, and you wish to use Row objects to process the result set. If your result set corresponds to an entity, consider using the corresponding Entity layer object instead, since entities automatically handle ID allocation and mapping, rights, and other higher-level aspects.
Non-unique indexes are handled through the QuoteLineRows collection, which has nested classes and GetFromIdx methods for each non-unique index. Similarly, there is a SuperOffice.CRM.Rows.QuoteLineRows.GetFromReader method to retrieve the results of queries that return more than one row.

Unique indexes on table QuoteLine are:
Index fieldsNested index class name

Implements

INestedPersist
ISoDataLookup
ISentryIgnorable

Extension Methods

EnumUtil.MapEnums<From, To>(From)
QuoteLineRecordDataExtensions.ToRecordData(QuoteLineRow)
QuoteExtensions.CloneQuoteLineRow(QuoteLineRow)
QuoteExtensions.GetProductExtraDataField(QuoteLineRow)
QuoteExtensions.GetQuoteLineInfo(QuoteLineRow)
Converters.MapEnums<From, To>(From)
QueryExectionExtensions.ExecuteNonQuery(SqlCommand)
QueryExectionExtensions.ExecuteNonQueryAsync(SqlCommand, CancellationToken)
QueryExectionExtensions.ExecuteReader(SqlCommand, bool)
QueryExectionExtensions.ExecuteReaderAsync(SqlCommand, bool, CancellationToken)
QueryExectionExtensions.ExecuteScalarAsync<T>(SqlCommand, bool, CancellationToken)
QueryExectionExtensions.ExecuteScalarAsync<T>(SqlCommand, CancellationToken)
QueryExectionExtensions.ExecuteScalar<T>(SqlCommand)
© SuperOffice. All rights reserved.
SuperOffice |  Community |  Release Notes |  Privacy |  Site feedback |  Search Docs |  About Docs |  Contribute |  Back to top