ICubeCacheSaver.FindAndLoadCache

Синтаксис Fore

FindAndLoadCache(

DestKey: Integer;

ParamValues: IMetabaseObjectParamValues;

Selections: IDimSelectionSet;

Value: IMatrix): Boolean;

Синтаксис Fore.NET

FindAndLoadCache(

DestKey: UInteger;

ParamValues: Prognoz.Platform.Interop.Metabase.IMetabaseObjectParamValues;

Selections: Prognoz.Platform.Interop.Dimensions.IDimSelectionSet;

Value: Prognoz.Platform.Interop.Matrix.IMatrix): Boolean;

Параметры

DestKey. Ключ необходимого варианта отображения куба.

ParamValues. Значения параметров указанного объекта кэширования.

Selections. Коллекция отметок в указанном варианте отображения куба.

Value. Матрица значений куба.

Описание

Метод FindAndLoadCache ищет и загружает кэш куба для указанного варианта отображения куба с указанными значениями параметров в указанную матрицу и возвращает признак существования соответствующего кэша в базе данных.

Комментарии

Если куб не параметрический, передавайте в качестве значения параметра ParamValues значение Null. Метод помещает найденные кэшированные данные куба в матрицу, которая указана в параметре Value.

Результатом работы метода является признак удачного поиска:

Пример Fore

Для выполнения примера предполагается наличие куба с идентификатором «D_SEP». У куба должна быть включена возможность кэширования данных в хранилище закэшированных данных куба.

Sub UserProc;
Var
    MB: IMetabase;
    MObj: IMetabaseObjectDescriptor;
    CacheSaver: ICubeCacheSaver;
    CrInfo: IMetabaseObjectCreateInfo;
    CubIn: ICubeInstance;
    Dest: ICubeInstanceDestination;
    SelSet: IDimSelectionSet;
    i: Integer;
    Sel: IDimSelection;
    Desc: IMetabaseObjectDescriptor;
    Executor: ICubeInstanceDestinationExecutor;
    Iter: IMatrixIterator;
Begin
    MB := MetabaseClass.Active;
    MObj := MB.ItemById("D_SEP");
    For Each Desc In MObj.Children Do
        If Desc.ClassId = MetabaseObjectClass.KE_CLASS_CUBE_CACHE_SAVER Then
            CacheSaver := Desc.Edit As ICubeCacheSaver;
        End If;
    End For;
    CubIn := MObj.Open(NullAs ICubeInstance;
    Dest := CubIn.Destinations.DefaultDestination;
    SelSet := Dest.CreateDimSelectionSet;
    For i := 0 To SelSet.Count - 1 Do
        Sel := SelSet.Item(i);
        Sel.SelectElement(0False);
        Sel.SelectElement(1False);
    End For;
    Executor := Dest.CreateExecutor;
    Executor.PrepareExecute(SelSet);
    CacheSaver.FindAndLoadCache(Dest.Key, Null, SelSet, Executor.Matrix);
    Iter := Executor.Matrix.CreateIterator;
    Iter.Move(IteratorDirection.First);
    While Iter.Valid Do
        Debug.WriteLine(Iter.Value);
        Iter.Move(IteratorDirection.Next);
    End While;
    CacheSaver.Clear(Dest.Key);
End Sub UserProc;

После выполнения примера будет произведён поиск среди дочерних объектов указанного куба на наличие хранилища закэшированных данных. Из первого найденного хранилища будут загружены закэшированные данные куба по заданным параметрам и выведены в консоль. После загрузки кэш будет очищен по заданному ключу варианта отображения куба.

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Matrix;
Imports Prognoz.Platform.Interop.ForeSystem;

Public Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    MObj: IMetabaseObjectDescriptor;
    CacheSaver: ICubeCacheSaver;
    CrInfo: IMetabaseObjectCreateInfo;
    CubIn: ICubeInstance;
    Dest: ICubeInstanceDestination;
    SelSet: IDimSelectionSet;
    i: Integer;
    Sel: IDimSelection;
    Mat: IMatrix;
    Desc: IMetabaseObjectDescriptor;
    Descs: ImetabaseObjectDescriptors;
    Executor: ICubeInstanceDestinationExecutor;
    Iter: IMatrixIterator;
Begin
    MB := Params.Metabase;
    MObj := MB.ItemById["D_SEP"]
    Descs := MObj.Children;
    For i := 0 To Descs.count - 1 Do
        Desc := Descs.Item[i];
        If Desc.ClassId = MetabaseObjectClass.KE_CLASS_CUBE_CACHE_SAVER As integer Then
            CacheSaver := Desc.Edit() As ICubeCacheSaver;
        End If;
    End For;
    CubIn := MObj.Open(NullAs ICubeInstance;
    Dest := CubIn.Destinations.DefaultDestination;
    SelSet := Dest.CreateDimSelectionSet();
    For i := 0 To SelSet.Count - 1 Do
        Sel := SelSet.Item[i];
        Sel.SelectElement(0False);
        Sel.SelectElement(1False);
    End For;
    Executor := Dest.CreateExecutor();
    Executor.PrepareExecute(SelSet);
    CacheSaver.FindAndLoadCache(Dest.Key, Null, SelSet, Executor.Matrix);
    Iter := Executor.Matrix.CreateIterator();
    Iter.Move(IteratorDirection.itdFirst);
    While Iter.Valid Do
        System.Diagnostics.Debug.WriteLine(Iter.Value);
        Iter.Move(IteratorDirection.itdNext);
    End While;
    CacheSaver.Clear(Dest.Key);
End Sub;

См. также:

ICubeCacheSaver