ICubeCacheItem.GetCubeInstance

Синтаксис

GetCubeInstance: ICubeInstance;

GetCubeInstance(): Prognoz.Platform.Interop.Cubes.ICubeInstance;

Описание

Метод GetCubeInstance возвращает открытый экземпляр куба, для которого сохранён кэш.

Пример

Для выполнения примера предполагается наличие стандартного куба с идентификатором STD_CUBE. Для куба закэширован какой-либо набор данных.

Добавьте ссылки на системные сборки: Cubes, Matrix, Metabase.

Sub UserProc;
Var
    MB: IMetabase;
    MDesc, CacheDesc: IMetabaseObjectDescriptor;
    CubeInst: ICubeInstance;
    DestInst: ICubeInstanceDestination;
    CacheSaver: ICubeCacheSaver;
    Items: ICubeCacheItems;
    Item: ICubeCacheItem;
    Matr: IMatrix;
Begin
    MB := MetabaseClass.Active;
    MDesc := MB.ItemById("STD_CUBE");
    // Получение хранилища кэша
    CacheDesc := GetCache(MDesc);
    If CacheDesc <> Null Then
        CacheSaver := CacheDesc.Edit As ICubeCacheSaver;
        // Экземпляры кэша из СУБД
        Items := CacheSaver.GetItemsFromDatabase;
        If Items.Count > 0 Then
            Item := Items.Item(0);
            CubeInst := Item.GetCubeInstance;
            Debug.WriteLine("Cube: " + (CubeInst.Cube As IMetabaseObject).Name);
            DestInst := Item.GetCubeInstanceDestination;
            Debug.WriteLine("Destination: " + DestInst.Name);
            Item.LoadMatrix;
            Matr := Item.GetMatrix;
            Debug.WriteLine("Matrix count values: " + Matr.Count.ToString);
        End If;
    End If;
End Sub UserProc;

Function GetCache(MObj: IMetabaseObjectDescriptor): IMetabaseObjectDescriptor;
Var
    Desc: IMetabaseObjectDescriptor;
Begin
    For Each Desc In MObj.Children Do
        If Desc.ClassId = MetabaseObjectClass.KE_CLASS_CUBE_CACHE_SAVER Then
            Return Desc;
        End If;
    End For;
    Return Null;
End Function GetCache;

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

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    MDesc, CacheDesc: IMetabaseObjectDescriptor;
    CubeInst: ICubeInstance;
    DestInst: ICubeInstanceDestination;
    CacheSaver: ICubeCacheSaver;
    Items: ICubeCacheItems;
    Item: ICubeCacheItem;
    Matr: IMatrix;
Begin
    MB := Params.Metabase;
    MDesc := MB.ItemById["STD_CUBE"];
    // Получение хранилища кэша
    CacheDesc := GetCache(MDesc);
    If CacheDesc <> Null Then
        CacheSaver := CacheDesc.Edit() As ICubeCacheSaver;
        // Экземпляры кэша из СУБД
        Items := CacheSaver.GetItemsFromDatabase(uinteger.MaxValue, Null);
        If Items.Count > 0 Then
            Item := Items.Item[0];
            CubeInst := Item.GetCubeInstance();
            System.Diagnostics.Debug.WriteLine("Cube: " + (CubeInst.Cube As IMetabaseObject).Name);
            DestInst := Item.GetCubeInstanceDestination();
            System.Diagnostics.Debug.WriteLine("Destination: " + DestInst.Name);
            Item.LoadMatrix();
            Matr := Item.GetMatrix();
            System.Diagnostics.Debug.WriteLine("Matrix count values: " + Matr.Count.ToString());
        End If;
    End If;
End Sub;

Shared Function GetCache(MObj: IMetabaseObjectDescriptor): IMetabaseObjectDescriptor;
Var
    Desc: IMetabaseObjectDescriptor;
    i, c: integer;
Begin
    c := MObj.Children.Count;
    For i := 0 To c - 1 Do
        Desc := MObj.Children.Item[i];
        If Desc.ClassId = MetabaseObjectClass.KE_CLASS_CUBE_CACHE_SAVER As integer Then
            Return Desc;
        End If;
    End For;
    Return Null;
End Function;

При выполнении примера для указанного куба будут получены экземпляры кэша. По первому экземпляру кэша в консоль среды разработки будет выведена информация о кубе и варианте отображения куба, для которых производилось кэширование, а также количество элементов в матрице, которая сохранена в кэше.

См. также:

ICubeCacheItem