SaveCacheCustom(
DestKey: Integer;
ParamValues: IMetabaseObjectParamValues;
Selections: IDimSelectionSet;
Value: IMatrix;
CustomValue: Variant);
SaveCacheCustom(
DestKey: UInteger;
ParamValues: Prognoz.Platform.Interop.Metabase.IMetabaseObjectParamValues;
Selections: Prognoz.Platform.Interop.Dimensions.IDimSelectionSet;
Value: Prognoz.Platform.Interop.Matrix.IMatrix;
CustomValue: Object);
DestKey. Ключ необходимого варианта отображения куба.
ParamValues. Набор значений параметров.
Selections. Отметка измерений в указанном варианте отображения куба.
Value. Матрица значений куба.
CustomValue. Пользовательская метка для обозначения сохраняемых данных.
Метод SaveCacheCustom выполняет сохранение кэша в соответствии с указанными параметрами и заданной пользовательской меткой.
Для выполнения примера предполагается наличие стандартного куба с идентификатором STD_CUBE.
Добавьте ссылки на системные сборки: Cubes, Dimensions, Matrix, Metabase.
Sub UserProc;
Var
MB: IMetabase;
MDesc, CacheDesc: IMetabaseObjectDescriptor;
CacheSaver: ICubeCacheSaver;
CubeInst: ICubeInstance;
Dest: ICubeInstanceDestination;
SelSet: IDimSelectionSet;
Sel: IDimSelection;
Matr: IMatrix;
Begin
MB := MetabaseClass.Active;
MDesc := MB.ItemById("STD_CUBE");
CacheDesc := GetCache(MDesc);
If CacheDesc <> Null Then
CacheSaver := CacheDesc.Bind As ICubeCacheSaver;
CubeInst := MDesc.Open(Null) As ICubeInstance;
Dest := CubeInst.Destinations.DefaultDestination;
SelSet := Dest.CreateDimSelectionSet;
For Each Sel In SelSet Do
If Sel.Dimension.Ident = "FACTS" Then
Sel.SelectElement(0, False);
Else
Sel.SelectAll;
End If;
End For;
Matr := Dest.Execute(SelSet);
CacheSaver.SaveCacheCustom(Dest.Key, Null, SelSet, Matr, "Date Save: " + DateTime.Today.ToString);
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.Dimensions;
Imports Prognoz.Platform.Interop.Matrix;
Imports Prognoz.Platform.Interop.Metabase;
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
MDesc, CacheDesc: IMetabaseObjectDescriptor;
CacheSaver: ICubeCacheSaver;
CubeInst: ICubeInstance;
Dest: ICubeInstanceDestination;
SelSet: IDimSelectionSet;
Sel: IDimSelection;
Matr: IMatrix;
i, c: Integer;
Begin
MB := Params.Metabase;
MDesc := MB.ItemById["STD_CUBE"];
CacheDesc := GetCache(MDesc);
If CacheDesc <> Null Then
CacheSaver := CacheDesc.Bind() As ICubeCacheSaver;
CubeInst := MDesc.Open(Null) As ICubeInstance;
Dest := CubeInst.Destinations.DefaultDestination;
SelSet := Dest.CreateDimSelectionSet();
c := SelSet.Count;
For i := 0 To c - 1 Do
Sel := SelSet.Item[i];
If Sel.Dimension.Ident = "FACTS" Then
Sel.SelectElement(0, False);
Else
Sel.SelectAll();
End If;
End For;
Matr := Dest.Execute(SelSet, UInteger.MaxValue);
CacheSaver.SaveCacheCustom(Dest.Key, Null, SelSet, Matr, "Date Save: " + DateTime.Today.ToString());
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;
При выполнении примера будет произведён расчёт куба по сформированной отметке. После расчёта полученная матрица с данными будет сохранена в кэш.
См. также: