IMetabaseObjectInstanceCacheKeeper.Cache

Синтаксис

Cache(Key: Integer; ParamValues: IMetabaseObjectParamValues): Variant;

Cache[Key: uinteger; ParamValues: Prognoz.Platform.Interop.Metabase.IMetabaseObjectParamValues]: object;

Параметры

Key. Ключ объекта кэширования;

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

Описание

Свойство Cache возвращает внутреннюю структуру объекта, который представляет кэш объекта репозитория.

Комментарии

Если объект параметрический, то возможно занести в кэш экземпляры с разными наборами параметров.

В качестве параметра Key для кубов необходимо указывать ключ необходимого варианта отображения куба.

Пример

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

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

Sub UserProc;
Var
    MB: IMetabase;
    CacheKeeper: IMetabaseObjectInstanceCacheKeeper;
    CacheM: Variant;
    MObj: IMetabaseObject;
    VarStream: Variant;
    Stream: IIOStream;
    F: IFileStream;
Begin
    MB := MetabaseClass.Active;
    MObj := MB.ItemById("Dimension").Edit As IMetabaseObject;
    CacheKeeper := MObj.Children.Item(0).Bind As IMetabaseObjectInstanceCacheKeeper;
    CacheM := CacheKeeper.Cache(MObj.Key, Null);
    VarStream := CacheM;
    CacheM := Null;
    Stream := IOStream.FromVariant(VarStream);
    F := New FileStream.Create("C:\Temp\1.dat", FileOpenMode.Write, FileShare.DenyWrite);
    F.CopyFrom(Stream, Stream.Size);
End Sub UserProc;

Imports Prognoz.Platform.Interop.ForeIO;

Public Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    CacheKeeper: IMetabaseObjectInstanceCacheKeeper;
    MObj: IMetabaseObject;
    CacheM: Object;
    VarStream: Object;
    FS: FileStreamClass = New FileStreamClass();
    IOSt: IOStreamClass = New IOStreamClass();
    Stream: Prognoz.Platform.Interop.ForeIO.IIOStream;
Begin
    Metabase := Params.Metabase;
    MObj := MB.ItemById["Dimension"].Edit() As IMetabaseObject;
    CacheKeeper := MObj.Children.Item[0].Bind() As IMetabaseObjectInstanceCacheKeeper;
    CacheM := CacheKeeper.Cache[MObj.Key, Null];
    VarStream := CacheM;
    CacheM := Null;
    Stream := IOSt.FromVariant(VarStream);
    FS.Create("C:\Temp\1.dat", FileOpenMode.frCreate, FileShare.frDenyWrite);
    FS.CopyFrom(Stream, Stream.Size);
End Sub;

После выполнения примера в поток данных будет получена внутренняя структура объекта, который представляет кэш объекта репозитория. Эта структура будет сохранена в файл.

См. также:

IMetabaseObjectInstanceCacheKeeper