Callback: ICubeCallback;
Callback: Prognoz.Platform.Interop.Cubes.ICubeCallback;
The Callback property determines a handler of the errors that may occur on saving data to cube.
As a property value, specify instance of the object that is inherited and redetermines properties and methods of the ICubeCallback interface or the CubeCallback class.
Handler of data saving to cube is set in the SaveMatrixCallback property. To handle errors and data saving process, one common handler inherited from the CubeCallback class can be used, but handler will work independently.
Executing the example requires that the repository contains a cube with the STD_CUBE identifier.
Add links to the Cubes, Dimensions, Matrix, Metabase system assemblies.
Sub UserProc;
Var
MB: IMetabase;
CubInst: ICubeInstance;
Des: ICubeInstanceDestination;
Sels: IDimSelectionSet;
Sel: IDimSelection;
Mat: IMatrix;
Coord: IMatrixCoord;
Sto: ICubeInstanceStorage;
i: Integer;
Begin
MB := MetabaseClass.Active;
CubInst := MB.ItemById("STD_CUBE").Open(Null) As ICubeInstance;
Des := CubInst.Destinations.DefaultDestination;
Sels := Des.CreateDimSelectionSet;
For Each Sel In Sels Do
Sel.SelectElement(0, False);
End For;
//Get values matrix by specified selection
Mat := Des.Execute(Sels);
Mat.ValueFlag := Mat.ValueFlag + 1;
//Create a coordinate in matrix
Coord := Mat.CreateCoord;
For i := 0 To Mat.DimensionCount - 1 Do
Coord.Item(i) := 0;
End For;
//Change value by coordinate
Mat.Item(Coord) := (Mat.Item(Coord) As Double) + 1;
Sto := Des.CreateStorage(CubeInstanceStorageOptions.NoCheckDuplicates);
Sto.Callback := New TCubeCallback.Create;
//Save value
Sto.SaveMatrix(Mat, Mat.ValueFlag);
End Sub UserProc;
Class TCubeCallback: CubeCallback
Public Sub OnCallback(Argument: ICubeCallbackArgument);
Begin
Debug.WriteLine("Error: " + Argument.Error.Message);
Debug.WriteLine("Error identifier: " + Argument.Error.MessageID.ToString);
Debug.WriteLine("Source: " + Argument.Error.Source);
Argument.IgnoreError := True;
End Sub OnCallback;
Public Function get_Argument: ICubeCallbackArgument;
Begin
Return Null;
End Function get_Argument;
End Class TCubeCallback;
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;
CubInst: ICubeInstance;
Des: ICubeInstanceDestination;
Sels: IDimSelectionSet;
Sel: IDimSelection;
Mat: IMatrix;
Coord: IMatrixCoord;
Sto: ICubeInstanceStorage;
i: Integer;
Begin
MB := Params.Metabase;
CubInst := MB.ItemById["STD_CUBE"].Open(Null) As ICubeInstance;
Des := CubInst.Destinations.DefaultDestination;
Sels := Des.CreateDimSelectionSet();
For Each Sel In Sels Do
Sel.SelectElement(0, False);
End For;
//Get values matrix by specified selection
Mat := Des.Execute(Sels, uinteger.MaxValue);
Mat.ValueFlag := Mat.ValueFlag + 1;
//Create a coordinate in matrix
Coord := Mat.CreateCoord();
For i := 0 To Mat.DimensionCount - 1 Do
Coord.Item[i] := 0;
End For;
//Change value by coordinate
Mat.Item[Coord] := (Mat.Item[Coord] As Double) + 1;
Sto := Des.CreateStorage(CubeInstanceStorageOptions.cisoNoCheckDuplicates);
Sto.Callback := New TCubeCallback();
//Save value
Sto.SaveMatrix(Mat, Mat.ValueFlag);
End Sub;
Class TCubeCallback: CubeCallback
Public Sub OnCallback(Argument: ICubeCallbackArgument);
Begin
System.Diagnostics.Debug.WriteLine("Error: " + Argument.Error.Message);
System.Diagnostics.Debug.WriteLine("Error identifier: " + Argument.Error.MessageID.ToString());
System.Diagnostics.Debug.WriteLine("Source: " + Argument.Error.Source);
Argument.IgnoreError := True;
End Sub;
Public Property Argument: ICubeCallbackArgument
Get
Begin
Return Null
End Get
End Property;
Public Property OperationResult: ICubeOperationResult
Get
Begin
Return Null
End Get
End Property;
End Class;
After executing the example a matrix with cube data is obtained. The value is changed by some coordinate, following which an updated matrix is saved back to the cube. Duplicates availability is not checked during saving. Errors that may occur will be handled in the TCubeCallback custom class.
See also: