FindAndLoadCache(
DestKey: Integer;
ParamValues: IMetabaseObjectParamValues;
Selections: IDimSelectionSet;
Value: IMatrix): Boolean;
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.
Результатом работы метода является признак удачного поиска:
True. Данные найдены;
False. Данные не найдены.
Для выполнения примера предполагается наличие куба с идентификатором «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(Null) As ICubeInstance;
Dest := CubIn.Destinations.DefaultDestination;
SelSet := Dest.CreateDimSelectionSet;
For i := 0 To SelSet.Count - 1 Do
Sel := SelSet.Item(i);
Sel.SelectElement(0, False);
Sel.SelectElement(1, False);
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.
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(Null) As ICubeInstance;
Dest := CubIn.Destinations.DefaultDestination;
SelSet := Dest.CreateDimSelectionSet();
For i := 0 To SelSet.Count - 1 Do
Sel := SelSet.Item[i];
Sel.SelectElement(0, False);
Sel.SelectElement(1, False);
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;
См. также: