Show / Hide Table of Contents

Class UsersProviderBase

Archive provider for the list of users in SoAdmin, including dynamic license columns

Inheritance
Object
ExtensibleColumnsBase
QueryProviderBase<ArchiveRow>
TypedQueryProviderBase<ArchiveRow, AssociateAssociateExtender>
UsersProviderBase
AllUsersProvider
ExternalUsersProvider
InternalUsersProvider
OtherUsersProvider
Implements
IArchiveProviderQueryMapping
IArchiveQueryProvider
IArchiveProviderExtensible
IArchiveTypedProvider<ArchiveRow>
IArchiveTypedProviderBase
IArchiveProvider
IArchiveProviderHasRows
IArchiveProviderHasColumns
IArchiveProviderHasEntities
Inherited Members
TypedQueryProviderBase<ArchiveRow, AssociateAssociateExtender>.HandleDynamicExtenders(IArchiveExtender)
TypedQueryProviderBase<ArchiveRow, AssociateAssociateExtender>.InnerPopulateRowFromReader(SoDataReader, ArchiveRow)
TypedQueryProviderBase<ArchiveRow, AssociateAssociateExtender>.GetRows(String)
TypedQueryProviderBase<ArchiveRow, AssociateAssociateExtender>.GetStandardColumnNames()
TypedQueryProviderBase<ArchiveRow, AssociateAssociateExtender>.SetAdditionalColumns(String[])
TypedQueryProviderBase<ArchiveRow, AssociateAssociateExtender>.BaseExtender
TypedQueryProviderBase<ArchiveRow, AssociateAssociateExtender>.ProviderNameFromAttribute
TypedQueryProviderBase<ArchiveRow, AssociateAssociateExtender>.RootExtenders
TypedQueryProviderBase<ArchiveRow, AssociateAssociateExtender>.PrimaryTable
TypedQueryProviderBase<ArchiveRow, AssociateAssociateExtender>.Query
QueryProviderBase<ArchiveRow>._colGetAllRows
QueryProviderBase<ArchiveRow>._colGetNoRows
QueryProviderBase<ArchiveRow>._pageSize
QueryProviderBase<ArchiveRow>._pageNumber
QueryProviderBase<ArchiveRow>.InnerSetRestriction(ArchiveRestrictionInfo[])
QueryProviderBase<ArchiveRow>.HandleDynamicExtenders(IArchiveExtender)
QueryProviderBase<ArchiveRow>.GetFinalRowCount()
QueryProviderBase<ArchiveRow>.SetDesiredColumns(String[])
QueryProviderBase<ArchiveRow>.OverrideValueIfBlank(ArchiveRow, String, String)
QueryProviderBase<ArchiveRow>.AddInhibitedStyleHint(String)
QueryProviderBase<ArchiveRow>.PostProcessRow(SoDataReader, ArchiveRow)
QueryProviderBase<ArchiveRow>.CreateArchiveRow(String, Int32)
QueryProviderBase<ArchiveRow>.Close()
QueryProviderBase<ArchiveRow>.GetReader(String)
QueryProviderBase<ArchiveRow>.GetRows(String)
QueryProviderBase<ArchiveRow>.GetResultInformation()
QueryProviderBase<ArchiveRow>.SetOrderBy(ArchiveOrderByInfo[])
QueryProviderBase<ArchiveRow>.GetEntityName(SoDataReader)
QueryProviderBase<ArchiveRow>.SetPagingInfo(Int32, Int32)
QueryProviderBase<ArchiveRow>.ConvertToTypedRows(IEnumerable<ArchiveRow>)
QueryProviderBase<ArchiveRow>.GetAvailableEntities()
QueryProviderBase<ArchiveRow>.RegisterEntity(ArchiveRowTypeInfo)
QueryProviderBase<ArchiveRow>.PrimaryKey
QueryProviderBase<ArchiveRow>.InhibitTwoPhaseQuery
QueryProviderBase<ArchiveRow>.DropTablesFromPhaseTwo
QueryProviderBase<ArchiveRow>.RootQuery
QueryProviderBase<ArchiveRow>.TableToExtend
QueryProviderBase<ArchiveRow>.OrderBySlots
QueryProviderBase<ArchiveRow>.PrimaryTable
QueryProviderBase<ArchiveRow>.Query
QueryProviderBase<ArchiveRow>.RootExtenders
QueryProviderBase<ArchiveRow>.HaveReadToEnd
QueryProviderBase<ArchiveRow>.ValueOverrides
ExtensibleColumnsBase._minuteFields
ExtensibleColumnsBase.Visible
ExtensibleColumnsBase.Invisible
ExtensibleColumnsBase.AllowOrderBy
ExtensibleColumnsBase.DenyOrderBy
ExtensibleColumnsBase.GetAllRestriction
ExtensibleColumnsBase.GetNoneRestriction
ExtensibleColumnsBase.SetParent(IArchiveProviderExtensible)
ExtensibleColumnsBase.AddAvailableColumn(ArchiveColumnInfo[])
ExtensibleColumnsBase.SetOrderByMapping(String, String[])
ExtensibleColumnsBase.SetOrderByMapping(ArchiveColumnInfo, ArchiveColumnInfo[])
ExtensibleColumnsBase.SetPrefixes(String, String)
ExtensibleColumnsBase.SetLocalAbsolutePrefixes(String, String)
ExtensibleColumnsBase.SetIconHint(String)
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.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 UsersProviderBase : TypedQueryProviderBase<ArchiveRow, AssociateAssociateExtender>, IArchiveProviderQueryMapping, IArchiveQueryProvider, IArchiveProviderExtensible, IArchiveTypedProvider<ArchiveRow>, IArchiveTypedProviderBase, IArchiveProvider, IArchiveProviderHasRows, IArchiveProviderHasColumns, IArchiveProviderHasEntities, IPlugin
Remarks

This system provides all the standard columns from the AssociateExtenderBase, as well as one dynamically generated column per module license present. Module licenses are filtered so that only type User, with nonzero amount or unrestricted, are taken into account.

For each such module license, a column named <ownerName>_<moduleName> is created and made available; this is an Icon column with an Int32 raw value (0 or 1). A row type with the same name is also created. All of them have reasonable display names etc.

Row types work as a filter with implicit "OR". If you ask for row types superoffice_travel and superoffice_publish, and request the column superoffice_web, you will get rows for all associates that have EITHER the travel OR publish license (or both); and you will see if each one has the web CAL.

The special rowtype "all" will turn off row filtering. Regardless of this, you can always set a contactId restriction, and choose any combination of columns.

The special rowtype "expired" will filter rows so that only users with at least one expired license will show.

Note that this is a base class. Concrete subclasses implement FilterAssocTypes to tell the base class what kind of associates should be processed (internal, external, other, ...). This simply applies filtering to both licenses and associates - the rest of the functionality is the same.

Constructors

UsersProviderBase()

Declaration
protected UsersProviderBase()

Fields

_colCanLogin

Declaration
protected ArchiveColumnInfo _colCanLogin
Field Value
Type Description
ArchiveColumnInfo

_colUserplan

Declaration
protected ArchiveColumnInfo _colUserplan
Field Value
Type Description
ArchiveColumnInfo

RowTypeAllName

Declaration
public const string RowTypeAllName = "all"
Field Value
Type Description
String

RowTypeExpiredName

Declaration
public const string RowTypeExpiredName = "expired"
Field Value
Type Description
String

RowTypeLoggedOnWin

Declaration
public const string RowTypeLoggedOnWin = "loggedOnWin"
Field Value
Type Description
String

RowTypePotentialName

Declaration
public const string RowTypePotentialName = "potential"
Field Value
Type Description
String

RowTypeRetired

Declaration
public const string RowTypeRetired = "retired"
Field Value
Type Description
String

Properties

FilterAssocTypes

Subclass contract: Tell us which associate types you want to deal with; this will influence what licenses are retrieved

Declaration
protected abstract UserType[] FilterAssocTypes { get; }
Property Value
Type Description
SuperOffice.License.UserType[]

FilterColumns

Subclass contract: Tell us if there are any columns that you want to filter out

Declaration
protected virtual string[] FilterColumns { get; }
Property Value
Type Description
String[]

InhibitDistinctPrimaryKeys

Declaration
public override bool InhibitDistinctPrimaryKeys { get; }
Property Value
Type Description
Boolean
Overrides
SuperOffice.CRM.ArchiveLists.QueryProviderBase<SuperOffice.CRM.ArchiveLists.ArchiveRow>.InhibitDistinctPrimaryKeys

Methods

AcceptRow(SoDataReader)

Accept only those associates that have at least one of the desired rowtype licenses

Declaration
protected override bool AcceptRow(SoDataReader reader)
Parameters
Type Name Description
SoDataReader reader
Returns
Type Description
Boolean
Overrides
SuperOffice.CRM.ArchiveLists.QueryProviderBase<SuperOffice.CRM.ArchiveLists.ArchiveRow>.AcceptRow(SuperOffice.Data.SoDataReader)

GetAvailableColumns()

Override: Get rid of available columns that the concrete class says it does not want/support

Declaration
public override List<ArchiveColumnInfo> GetAvailableColumns()
Returns
Type Description
List<ArchiveColumnInfo>
Overrides
ExtensibleColumnsBase.GetAvailableColumns()

InnerMapFields()

Base class handles all standard columns. Our functionality is to determine which modules we're interested in (sum of desired columns and row types), and populate the licenses-per-associate cache

Declaration
public override void InnerMapFields()
Overrides
SuperOffice.CRM.ArchiveLists.QueryProviderBase<SuperOffice.CRM.ArchiveLists.ArchiveRow>.InnerMapFields()

InnerPopulateRowFromReader(SoDataReader, ArchiveRow)

Populate dynamic columns according to the cached who-has-which-license (SuperOffice.CRM.ArchiveLists.UsersProviderBase._assocLicenses)

Declaration
protected override void InnerPopulateRowFromReader(SoDataReader reader, ArchiveRow row)
Parameters
Type Name Description
SoDataReader reader
ArchiveRow row
Overrides
SuperOffice.CRM.ArchiveLists.TypedQueryProviderBase<SuperOffice.CRM.ArchiveLists.ArchiveRow, SuperOffice.CRM.ArchiveLists.AssociateAssociateExtender>.InnerPopulateRowFromReader(SuperOffice.Data.SoDataReader, SuperOffice.CRM.ArchiveLists.ArchiveRow)

PostProcessQuery()

Manipulate the query according to various rules and filters

Declaration
public override void PostProcessQuery()
Overrides
SuperOffice.CRM.ArchiveLists.QueryProviderBase<SuperOffice.CRM.ArchiveLists.ArchiveRow>.PostProcessQuery()
Remarks
  1. Only get associate records of the correct type (if we're getting associates, that is)
    2a) Flip the master table from associate to person, if we're looking at potential persons
    2b) In that case, and if no contact has been specified, and if we're looking for internal users, then also restrict to persons that belong to contacts who are in ownercontactlink
  2. Get hold of the correct person table instance
  3. If we're only looking at logged-on users, then add the inner join for activeuser; otherwise add an outer join
  4. If we want retired users, then restrict for that
    There is a fair amount of query and join manipulation here, and more than one new method was written in the Select, Join etc classes to make it less ugly.

RequiredPhaseOneFields()

Declaration
protected override FieldInfo[] RequiredPhaseOneFields()
Returns
Type Description
FieldInfo[]
Overrides
SuperOffice.CRM.ArchiveLists.QueryProviderBase<SuperOffice.CRM.ArchiveLists.ArchiveRow>.RequiredPhaseOneFields()

SetDesiredEntities(String[])

Prune the desired row types dictionary so it only contains elements corresponding to desired entities

Declaration
public override void SetDesiredEntities(params string[] entities)
Parameters
Type Name Description
String[] entities
Overrides
SuperOffice.CRM.ArchiveLists.QueryProviderBase<SuperOffice.CRM.ArchiveLists.ArchiveRow>.SetDesiredEntities(System.String[])

SetRestriction(ArchiveRestrictionInfo[])

Override: Determine if a contact_id restriction is present, in which case we do not add a join to ownercontactlink for potential users

Declaration
public override bool SetRestriction(params ArchiveRestrictionInfo[] restrictions)
Parameters
Type Name Description
ArchiveRestrictionInfo[] restrictions
Returns
Type Description
Boolean
Overrides
SuperOffice.CRM.ArchiveLists.QueryProviderBase<SuperOffice.CRM.ArchiveLists.ArchiveRow>.SetRestriction(SuperOffice.CRM.ArchiveLists.ArchiveRestrictionInfo[])

Implements

IArchiveProviderQueryMapping
IArchiveQueryProvider
IArchiveProviderExtensible
IArchiveTypedProvider<StronglyTypedRow>
IArchiveTypedProviderBase
IArchiveProvider
IArchiveProviderHasRows
IArchiveProviderHasColumns
IArchiveProviderHasEntities

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