Show / Hide Table of Contents

Class SaintRestrictionExtenderBase

Base class for handling Saint restrictions - not column display (as yet anyway)

Inheritance
Object
ExtensibleColumnsBase
ExtenderBase<CounterValueTableInfo>
SaintRestrictionExtenderBase
ContactSaintExtender
PersonSaintExtender
ProjectSaintExtender
SaleSaintExtender
Implements
IArchiveProviderQueryMapping
IArchiveExtender
IArchiveProviderDoesExtend
IArchiveProviderHasColumns
IArchiveProviderExtensible
Inherited Members
ExtenderBase<CounterValueTableInfo>.ModifyQuery()
ExtenderBase<CounterValueTableInfo>.GetRankRestriction(FieldInfo)
ExtenderBase<CounterValueTableInfo>.StyleHintPrefix
ExtensibleColumnsBase._minuteFields
ExtensibleColumnsBase.Visible
ExtensibleColumnsBase.Invisible
ExtensibleColumnsBase.AllowOrderBy
ExtensibleColumnsBase.DenyOrderBy
ExtensibleColumnsBase.GetAllRestriction
ExtensibleColumnsBase.GetNoneRestriction
ExtensibleColumnsBase.SetParent(IArchiveProviderExtensible)
ExtensibleColumnsBase.AddAvailableColumn(ArchiveColumnInfo[])
ExtensibleColumnsBase.GetAvailableColumns()
ExtensibleColumnsBase.SetDesiredColumns(String[])
ExtensibleColumnsBase.SetOrderBy(ArchiveOrderByInfo[])
ExtensibleColumnsBase.SetOrderByMapping(String, String[])
ExtensibleColumnsBase.SetOrderByMapping(ArchiveColumnInfo, ArchiveColumnInfo[])
ExtensibleColumnsBase.SetPrefixes(String, String)
ExtensibleColumnsBase.SetLocalAbsolutePrefixes(String, String)
ExtensibleColumnsBase.SetIconHint(String)
ExtensibleColumnsBase.SetRestriction(ArchiveRestrictionInfo[])
ExtensibleColumnsBase.AddLocalRestriction(ArchiveRestrictionInfo[])
ExtensibleColumnsBase.AddExtensionProvider(IArchiveExtender)
ExtensibleColumnsBase.GetExtensionProviders()
ExtensibleColumnsBase.GetTableInfosFromExtensionProviders()
ExtensibleColumnsBase.PopulateRowFromReader(SoDataReader, ArchiveRow)
ExtensibleColumnsBase.SuppressTableResults(SoDataReader, TableInfo)
ExtensibleColumnsBase.SuppressDeepTableResults(SoDataReader, TableInfo)
ExtensibleColumnsBase.AddColumnNameOverride(String, String)
ExtensibleColumnsBase.ApplyColumnNameOverrides(ArchiveRow)
ExtensibleColumnsBase.AddSubExtenderMapping(String, ExtensibleColumnsBase[])
ExtensibleColumnsBase.WantColumnForOutput(String[])
ExtensibleColumnsBase.WantColumnForOutput(ArchiveColumnInfo[])
ExtensibleColumnsBase.WantColumnForOutput(List<ArchiveColumnInfo>)
ExtensibleColumnsBase.WantColumnForRestriction(String[])
ExtensibleColumnsBase.WantColumnForRestriction(ArchiveColumnInfo[])
ExtensibleColumnsBase.WantColumnForOrderBy(String[])
ExtensibleColumnsBase.GetColumnOrderBy(String)
ExtensibleColumnsBase.WantColumnForOrderBy(ArchiveColumnInfo[])
ExtensibleColumnsBase.WantColumnForAnything(String[])
ExtensibleColumnsBase.WantColumnForAnything(ArchiveColumnInfo[])
ExtensibleColumnsBase.IsQueryNeeded()
ExtensibleColumnsBase.IsQueryRestriction()
ExtensibleColumnsBase.GetLeftOuterOrInnerJoin(Equal)
ExtensibleColumnsBase.GetLeftOuterOrInnerJoin(Equal, Restriction)
ExtensibleColumnsBase.SetLeftOuterOrInnerJoin(Equal)
ExtensibleColumnsBase.SetLeftOuterOrInnerJoin(Equal, Restriction)
ExtensibleColumnsBase.MapReturnField(ArchiveSelect, FieldInfo, Boolean, String, ArchiveColumnInfo[])
ExtensibleColumnsBase.MapIdField(FieldInfo)
ExtensibleColumnsBase.MapAssociateField(FieldInfo, ArchiveColumnInfo)
ExtensibleColumnsBase.MapEjUserField(FieldInfo, ArchiveColumnInfo)
ExtensibleColumnsBase.MapSimpleReturnField(FieldInfo, ArchiveColumnInfo[])
ExtensibleColumnsBase.MapSimpleImageField(FieldInfo, ArchiveColumnInfo, Int32, Int32)
ExtensibleColumnsBase.MapPictureBlob(FieldInfo, ArchiveColumnInfo, BlobLinkType, Int32, Int32, Int32)
ExtensibleColumnsBase.MapSimpleCustomField(FieldInfo, ArchiveColumnInfo[])
ExtensibleColumnsBase.MapSimpleListReturnField(FieldInfo, String, ArchiveColumnInfo[])
ExtensibleColumnsBase.MapOrderByField(FieldInfo, ArchiveColumnInfo)
ExtensibleColumnsBase.ActivateAsLinkField(String, ArchiveColumnInfo[])
ExtensibleColumnsBase.HasAvailableColumn(String)
ExtensibleColumnsBase.AddAndInitializeExtensionProvider<ExtenderType>(ExtenderType, String, String)
ExtensibleColumnsBase.AddAndInitializeExtensionProvider<ExtenderType>(ExtenderType)
ExtensibleColumnsBase.HasRestriction(String)
ExtensibleColumnsBase.ExtractRestrictions(String)
ExtensibleColumnsBase.ExtractRestrictions(ArchiveColumnInfo)
ExtensibleColumnsBase.ExtractRestriction(String)
ExtensibleColumnsBase.ExtractRestriction(ArchiveColumnInfo)
ExtensibleColumnsBase.ProcessRestrictions()
ExtensibleColumnsBase.ProcessOrderBy()
ExtensibleColumnsBase.PopulateSimpleFields(SoDataReader, ArchiveRow)
ExtensibleColumnsBase.CalculateOrderbyValue(String, SoDataReader, ArchiveColumnData)
ExtensibleColumnsBase.AddDbInfo(ArchiveColumnData, FieldInfo)
ExtensibleColumnsBase.AddDbInfo(ArchiveColumnData, Int32)
ExtensibleColumnsBase.ForceDisable()
ExtensibleColumnsBase.GetAssociateData(Int32)
ExtensibleColumnsBase.GetEjUserData(Int32)
ExtensibleColumnsBase.GetColumnIndex(ArchiveColumnInfo)
ExtensibleColumnsBase.GetColumnIndexFromReader(SoDataReader, FieldInfo, Int32)
ExtensibleColumnsBase.ConvertDbTypeToString(Object, ExtensibleColumnsBase.DbColumnBinding)
ExtensibleColumnsBase.GetStandardTooltipHint(SoDataReader, FieldInfo)
ExtensibleColumnsBase.GetLinkHint(SoDataReader, String)
ExtensibleColumnsBase.SetNonZeroBoolRestriction(ArchiveColumnInfo)
ExtensibleColumnsBase.AddUpdatedByMapping(ArchiveColumnInfo, FieldInfo, FieldInfo)
ExtensibleColumnsBase.AddRegisteredMapping(ArchiveColumnInfo, FieldInfo, ArchiveColumnInfo, FieldInfo)
ExtensibleColumnsBase.AddLastUpdatedMapping(ArchiveColumnInfo, FieldInfo, FieldInfo)
ExtensibleColumnsBase.AddUpdatedBy(SoDataReader, ArchiveRow, ArchiveColumnInfo, FieldInfo, FieldInfo)
ExtensibleColumnsBase.AddUpdatedDate(SoDataReader, ArchiveRow, ArchiveColumnInfo, FieldInfo, FieldInfo)
ExtensibleColumnsBase.AddAssociateFullName(SoDataReader, ArchiveRow, ArchiveColumnInfo, FieldInfo[])
ExtensibleColumnsBase.GetIdFieldTag(SoDataReader)
ExtensibleColumnsBase.GetArchiveColumnName(SoField)
ExtensibleColumnsBase.ExtensibleHelper
ExtensibleColumnsBase.ColumnHelper
ExtensibleColumnsBase.RestrictionHelper
ExtensibleColumnsBase.Parent
ExtensibleColumnsBase.DisableSubtreeIfNoRestriction
ExtensibleColumnsBase.RestrictionSetForSubtree
ExtensibleColumnsBase.ForceQueryNeeded
ExtensibleColumnsBase.ForceRestriction
ExtensibleColumnsBase.BlockOrderBy
ExtensibleColumnsBase.IdField
ExtensibleColumnsBase.LastSubExtenderWins
ExtensibleColumnsBase.ParentPrimaryKey
ExtensibleColumnsBase.QuoteAlternativeId
ExtensibleColumnsBase.SaleId
ExtensibleColumnsBase.NamePrefix
ExtensibleColumnsBase.DisplayNamePrefix
ExtensibleColumnsBase.RootQuery
ExtensibleColumnsBase.OrderBySlots
ExtensibleColumnsBase.PopulateDisplayValue
ExtensibleColumnsBase.PopulateTooltipHint
ExtensibleColumnsBase.DebugXML
Object.ToString()
Object.Equals(Object)
Object.Equals(Object, Object)
Object.ReferenceEquals(Object, Object)
Object.GetHashCode()
Object.GetType()
Object.MemberwiseClone()
Namespace: SuperOffice.CRM.ArchiveLists
Assembly: SoDataBase.dll
Syntax
public abstract class SaintRestrictionExtenderBase : ExtenderBase<CounterValueTableInfo>, IArchiveProviderQueryMapping, IArchiveExtender, IArchiveProviderDoesExtend, IArchiveProviderHasColumns, IArchiveProviderExtensible, IPlugin
Remarks

The purpose of this class is to handle restrictions on Saint criteria. Such restrictions represent the (so far only) use of subrestrictions within one ArchiveRestrictionInfo. A completely specified restriction targets one particular Saint counter, as a combination of restrictions on the CounterValue table and a choice of one counter or date field within that table.

Each complete restriction results in one (aliased) join with the CounterValue table, so if you specify a dozen restrictions then you will get a dozen joins. Due to reasonably efficient indexing this does not usually represent a problem, even with a good number of millions of rows.

Constructors

SaintRestrictionExtenderBase(SaintTarget, String)

Declaration
public SaintRestrictionExtenderBase(SaintTarget target, string iconHint)
Parameters
Type Name Description
SaintTarget target
String iconHint

Fields

_colLastActivity

Declaration
protected ArchiveColumnInfo _colLastActivity
Field Value
Type Description
ArchiveColumnInfo

_colLastCompletedActivity

Declaration
protected ArchiveColumnInfo _colLastCompletedActivity
Field Value
Type Description
ArchiveColumnInfo

_colLastCompletedSale

Declaration
protected ArchiveColumnInfo _colLastCompletedSale
Field Value
Type Description
ArchiveColumnInfo

_colLastCompletedTicket

Declaration
protected ArchiveColumnInfo _colLastCompletedTicket
Field Value
Type Description
ArchiveColumnInfo

_colLastDoByActivity

Declaration
protected ArchiveColumnInfo _colLastDoByActivity
Field Value
Type Description
ArchiveColumnInfo

_colLastDoBySale

Declaration
protected ArchiveColumnInfo _colLastDoBySale
Field Value
Type Description
ArchiveColumnInfo

_colLastDoByTicket

Declaration
protected ArchiveColumnInfo _colLastDoByTicket
Field Value
Type Description
ArchiveColumnInfo

_colLastSale

Declaration
protected ArchiveColumnInfo _colLastSale
Field Value
Type Description
ArchiveColumnInfo

_colLastTicket

Declaration
protected ArchiveColumnInfo _colLastTicket
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfActivities

Declaration
protected ArchiveColumnInfo _colNumberOfActivities
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfActivitiesInPeriod

Declaration
protected ArchiveColumnInfo _colNumberOfActivitiesInPeriod
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfActivitiesInPeriod2

Declaration
protected ArchiveColumnInfo _colNumberOfActivitiesInPeriod2
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfActivitiesInPeriod3

Declaration
protected ArchiveColumnInfo _colNumberOfActivitiesInPeriod3
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfNotCompletedActivities

Declaration
protected ArchiveColumnInfo _colNumberOfNotCompletedActivities
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfNotCompletedActivitiesInPeriod

Declaration
protected ArchiveColumnInfo _colNumberOfNotCompletedActivitiesInPeriod
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfNotCompletedActivitiesInPeriod2

Declaration
protected ArchiveColumnInfo _colNumberOfNotCompletedActivitiesInPeriod2
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfNotCompletedActivitiesInPeriod3

Declaration
protected ArchiveColumnInfo _colNumberOfNotCompletedActivitiesInPeriod3
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfNotCompletedSales

Declaration
protected ArchiveColumnInfo _colNumberOfNotCompletedSales
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfNotCompletedSalesInPeriod

Declaration
protected ArchiveColumnInfo _colNumberOfNotCompletedSalesInPeriod
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfNotCompletedSalesInPeriod2

Declaration
protected ArchiveColumnInfo _colNumberOfNotCompletedSalesInPeriod2
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfNotCompletedSalesInPeriod3

Declaration
protected ArchiveColumnInfo _colNumberOfNotCompletedSalesInPeriod3
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfNotCompletedTickets

Declaration
protected ArchiveColumnInfo _colNumberOfNotCompletedTickets
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfNotCompletedTicketsInPeriod

Declaration
protected ArchiveColumnInfo _colNumberOfNotCompletedTicketsInPeriod
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfNotCompletedTicketsInPeriod2

Declaration
protected ArchiveColumnInfo _colNumberOfNotCompletedTicketsInPeriod2
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfNotCompletedTicketsInPeriod3

Declaration
protected ArchiveColumnInfo _colNumberOfNotCompletedTicketsInPeriod3
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfSales

Declaration
protected ArchiveColumnInfo _colNumberOfSales
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfSalesInPeriod

Declaration
protected ArchiveColumnInfo _colNumberOfSalesInPeriod
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfSalesInPeriod2

Declaration
protected ArchiveColumnInfo _colNumberOfSalesInPeriod2
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfSalesInPeriod3

Declaration
protected ArchiveColumnInfo _colNumberOfSalesInPeriod3
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfTickets

Declaration
protected ArchiveColumnInfo _colNumberOfTickets
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfTicketsInPeriod

Declaration
protected ArchiveColumnInfo _colNumberOfTicketsInPeriod
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfTicketsInPeriod2

Declaration
protected ArchiveColumnInfo _colNumberOfTicketsInPeriod2
Field Value
Type Description
ArchiveColumnInfo

_colNumberOfTicketsInPeriod3

Declaration
protected ArchiveColumnInfo _colNumberOfTicketsInPeriod3
Field Value
Type Description
ArchiveColumnInfo

_scolActivityType

Declaration
[AllowedMultitenantStatic]
protected static ArchiveColumnInfo _scolActivityType
Field Value
Type Description
ArchiveColumnInfo

_scolAmountClass

Declaration
[AllowedMultitenantStatic]
protected static ArchiveColumnInfo _scolAmountClass
Field Value
Type Description
ArchiveColumnInfo

_scolDirection

Declaration
[AllowedMultitenantStatic]
protected static ArchiveColumnInfo _scolDirection
Field Value
Type Description
ArchiveColumnInfo

_scolIntention

Declaration
[AllowedMultitenantStatic]
protected static ArchiveColumnInfo _scolIntention
Field Value
Type Description
ArchiveColumnInfo

_scolSaleStatus

Declaration
[AllowedMultitenantStatic]
protected static ArchiveColumnInfo _scolSaleStatus
Field Value
Type Description
ArchiveColumnInfo

_scolTicketCategory

Declaration
[AllowedMultitenantStatic]
protected static ArchiveColumnInfo _scolTicketCategory
Field Value
Type Description
ArchiveColumnInfo

_scolTicketStatus

Declaration
[AllowedMultitenantStatic]
protected static ArchiveColumnInfo _scolTicketStatus
Field Value
Type Description
ArchiveColumnInfo

CounterMask

Bitmask used for criteria storage for counters

Declaration
public const int CounterMask = 8388608
Field Value
Type Description
Int32

SaintActivityType

Declaration
public const string SaintActivityType = "saintActivityType"
Field Value
Type Description
String

SaintAllChoice

Declaration
public const string SaintAllChoice = "-1"
Field Value
Type Description
String

SaintAmountClass

Declaration
public const string SaintAmountClass = "saintAmountClass"
Field Value
Type Description
String

SaintDirection

Declaration
public const string SaintDirection = "saintDirection"
Field Value
Type Description
String

SaintIntention

Declaration
public const string SaintIntention = "saintIntention"
Field Value
Type Description
String

SaintSaleStatus

Declaration
public const string SaintSaleStatus = "saintSaleStatus"
Field Value
Type Description
String

SaintTicketCategory

Declaration
public const string SaintTicketCategory = "saintTicketCategory"
Field Value
Type Description
String

SaintTicketStatus

Declaration
public const string SaintTicketStatus = "saintTicketStatus"
Field Value
Type Description
String

StatusId

Declaration
public const string StatusId = "statusId"
Field Value
Type Description
String

StatusMask

Bitmask used for criteria storage for statuses

Declaration
public const int StatusMask = 8912896
Field Value
Type Description
Int32

Properties

MainTableName

Declaration
public override string MainTableName { get; }
Property Value
Type Description
String
Overrides
SuperOffice.CRM.ArchiveLists.ExtenderBase<SuperOffice.CRM.Data.CounterValueTableInfo>.MainTableName

TableToExtend

Declaration
public override TableInfo TableToExtend { get; }
Property Value
Type Description
TableInfo
Overrides
ExtensibleColumnsBase.TableToExtend

Methods

AddStatusDefCheck(Select, StatusValueTableInfo)

Add an additional join to the status monitor query, to exclude rows referring to status monitors that are either deleted or in the needsUpdate (dirty) state

Declaration
protected void AddStatusDefCheck(Select query, StatusValueTableInfo statusValueTable)
Parameters
Type Name Description
Select query
StatusValueTableInfo statusValueTable
Remarks

This logic needs to be in sync with the the StatusMonitorCache, so that the display of visual status monitors corresponds to their presence or absence in Selections based on the monitors

ConvertAllChoiceToDbValue(ArchiveRestrictionInfo, Int32)

The values that are used by the Saint system to denote the 'all' choice for various subrestrictions are not constant... But in netServer we try to hide that, and say -1. Here, we convert that -1 value to whatever is the appropriate database value.

Declaration
public static ArchiveRestrictionInfo ConvertAllChoiceToDbValue(ArchiveRestrictionInfo subRestriction, int allChoiceDbValue)
Parameters
Type Name Description
ArchiveRestrictionInfo subRestriction

Subrestriction to check

Int32 allChoiceDbValue

Actual value to use for the 'all' choice

Returns
Type Description
ArchiveRestrictionInfo

Possibly modified clone of original restriction

ConvertDbValueToAllChoice(ArchiveRestrictionInfo, Int32)

The values that are used by the Saint system to denote the 'all' choice for various subrestrictions are not constant... But in netServer we try to hide that, and say -1. Here, we convert that -1 value to whatever is the appropriate.

Declaration
public static ArchiveRestrictionInfo ConvertDbValueToAllChoice(ArchiveRestrictionInfo subRestriction, int allChoiceDbValue)
Parameters
Type Name Description
ArchiveRestrictionInfo subRestriction

Subrestriction to check

Int32 allChoiceDbValue

Actual value to use for the 'all' choice

Returns
Type Description
ArchiveRestrictionInfo

Possibly modified clone of original restriction

GetStatusIdFromStatusColumn(String)

Parse the name of a statusmonitor column to retrieve the ID

Declaration
public static int GetStatusIdFromStatusColumn(string columnName)
Parameters
Type Name Description
String columnName
Returns
Type Description
Int32

GetSubRestrictionColumnInfo(String)

Get archive column info for a subrestriction

Declaration
public static ArchiveColumnInfo GetSubRestrictionColumnInfo(string columnName)
Parameters
Type Name Description
String columnName

Name of subrestriction column

Returns
Type Description
ArchiveColumnInfo

Information object for column, or null if this was not a valid subrestriction

GetSubRestrictionNames(String)

Get the names of the subrestrictions that belong to a particular saint column

Declaration
public static string[] GetSubRestrictionNames(string columnName)
Parameters
Type Name Description
String columnName

Saint column name

Returns
Type Description
String[]

Array of subrestriction names, null if the column was not a saint column or had no subrestrictions

InnerModifyQuery()

Set up custom binding for each outer-level restriction (column)

Declaration
protected override void InnerModifyQuery()
Overrides
SuperOffice.CRM.ArchiveLists.ExtenderBase<SuperOffice.CRM.Data.CounterValueTableInfo>.InnerModifyQuery()

InnerPopulateRowFromReader(SoDataReader, ArchiveRow)

There is no population with values... could possibly have populated those that are used as restrictions, but it would take a little figuring to correctly map rows to subrestrictions

Declaration
protected override void InnerPopulateRowFromReader(SoDataReader reader, ArchiveRow row)
Parameters
Type Name Description
SoDataReader reader
ArchiveRow row
Overrides
ExtensibleColumnsBase.InnerPopulateRowFromReader(SoDataReader, ArchiveRow)

IsSaintColumn(String)

Determine whether a certain column name is a saint column or not (statuses are parsed only for the saintStatus prefix, which is not bomb-proof but generally good enough)

Declaration
public static bool IsSaintColumn(string columnname)
Parameters
Type Name Description
String columnname

Column name, case sensitive

Returns
Type Description
Boolean

true if the column is a saint column

IsSaintEnabled(SoTable)

Is saint enabled for the current user, and the given parent entity

Declaration
public static bool IsSaintEnabled(SoTable ownerEntity)
Parameters
Type Name Description
SoTable ownerEntity
Returns
Type Description
Boolean

SetJoin()

Declaration
protected override CounterValueTableInfo SetJoin()
Returns
Type Description
CounterValueTableInfo
Overrides
SuperOffice.CRM.ArchiveLists.ExtenderBase<SuperOffice.CRM.Data.CounterValueTableInfo>.SetJoin()

SetSaintCounterJoin(ArchiveSelect, CounterValueTableInfo, Restriction)

Declaration
protected abstract void SetSaintCounterJoin(ArchiveSelect targetQuery, CounterValueTableInfo cvInfo, Restriction subClause)
Parameters
Type Name Description
ArchiveSelect targetQuery
CounterValueTableInfo cvInfo
Restriction subClause

SetSaintStatusJoin(ArchiveSelect, StatusValueTableInfo, Restriction)

Declaration
protected abstract void SetSaintStatusJoin(ArchiveSelect targetQuery, StatusValueTableInfo svInfo, Restriction subClause)
Parameters
Type Name Description
ArchiveSelect targetQuery
StatusValueTableInfo svInfo
Restriction subClause

Implements

IArchiveProviderQueryMapping
IArchiveExtender
IArchiveProviderDoesExtend
IArchiveProviderHasColumns
IArchiveProviderExtensible

Extension Methods

EnumUtil.MapEnums<From, To>(From)
Converters.MapEnums<From, To>(From)
© SuperOffice. All rights reserved.
SuperOffice |  Community |  Release Notes |  Privacy |  Site feedback |  Search Docs |  About Docs |  Contribute |  Back to top