IStandardDimRecursiveBlock.ConnectByWhere

Syntax

ConnectByWhere: IExpression;

Description

The ConnectByWhere property returns an object that contains filter for elements of recursive dictionary levels. This property is available only through Fore.

Example

Executing the example requires that the repository contains a table dictionary with the TAB_DIM identifier. The dictionary list of attributes contains one additional attribute with the codes of parents. The repository also contains a table with the Tablica_1 identifier. The table has four fields: Id, Name, Ord and Parent_Id.

Sub UserProc;
Var
    MB: IMetabase;
    MObj: IMetabaseObject;
    Dataset: IDatasetModel;
    DatasetFields: IDatasetModelFields;
    Dim: IStandardDimension;
    DimBlocks: IStandardDimBlocks;
    DimBlock: IStandardDimRecursiveBlock;
    BlockAttr: IStandardDimAttributes;
    PrimIndex: IStandardDimIndex;
    s: String;
Begin
    s := "Tablica_1";
    MB := MetabaseClass.Active;
    MObj := MB.ItemById("TAB_DIM").Edit;
    Dataset := MB.ItemById(s).Bind As IDatasetModel;
    DatasetFields := Dataset.Fields;
    Dim := MObj As IStandardDimension;
    DimBlocks := Dim.Blocks;
    BlockAttr := Dim.Attributes;
    DimBlock := DimBlocks.Add(DimBlockType.Recursive) As IStandardDimRecursiveBlock;
    PrimIndex := DimBlock.Indexes.PrimaryIndex;
    PrimIndex.Attributes.Add(Dim.Attributes.Id);
    DimBlock.Dataset := Dataset;
    //Binding of attributes
    DimBlock.Binding(BlockAttr.Id).AsString := s + "." + DatasetFields.FindById("Id").Id;
    DimBlock.Binding(BlockAttr.Name).AsString := s + "." + DatasetFields.FindById("Name").Id;
    DimBlock.Binding(BlockAttr.Order).AsString := s + "." + DatasetFields.FindById("Ord").Id;
    DimBlock.Binding(BlockAttr.Item(BlockAttr.Count - 1)).AsString := s + "." + DatasetFields.FindById("Parent_Id").Id;
    //Upper level
    DimBlock.StartWith.AsString := s + "." + Dataset.Fields.FindById("Parent_Id").Id + "=0";
    //Set up link by recursion index
    DimBlock.ConnectByIndex := PrimIndex;
    DimBlock.ConnectBy(PrimIndex.Attributes.Item(0)).AsString := s + "." + DatasetFields.FindById("Parent_Id").Id;
    DimBlock.ConnectByWhere.AsString := "(" + s + "." + Dataset.Fields.FindById("Id").Id + ">=100)And(" + s + "." + Dataset.Fields.FindById("Id").Id + "<=1000)";
    MObj.Save;
End Sub UserProc;

After executing the example a new recursive block is created in the dictionary. Block attributes are linked to the fields of data source, as well as the block recursion is adjusted. When a dictionary is created, elements of the upper level are elements with the Parent_Id value, equal to 0. The elements of recursive fields are filtered by field values Id. Only elements with value in range 100-1000 are displayed.

See also:

IStandardDimRecursiveBlock