SendGroupAsParam: Boolean;
SendGroupAsParam: boolean;
The SendGroupAsParam property determines whether macro uses an element group.
Available values:
True. The macro uses a group of elements sent as macros parameter.
False. Default value. Group of elements is not used in macro.
If the property is set to True, the function in macros must have the following signature:
Public Shared Function <procedure name>(<dictionary instance>: IDimInstance; <current group of elements>: IDimElementGroup): IDimSelection;
Begin
End Function <procedure name>;
Executing the example requires that the repository contains a dictionary with the DICT_GROUP identifier containing a group of elements. The unit with the MACRO_DIM_EL_GROUP identifier containing the Primitives class, which implements the GroupMacro function, is also supposed to be. This function will be used as a macro generating a group of elements. The MACRO_DIM_EL_GROUP unit code is given below.
Add links to the Dimensions, Metabase system assemblies.
Sub UserProc;
Var
mb: IMetabase;
Desc: IMetabaseObjectDescriptor;
Group: IDimElementGroup;
i: Integer;
MacroPrimitive: IDimMacroGroupPrimitive;
Begin
// Get current repository
mb := Metabaseclass.Active;
// Get dictionary
Desc := mb.ItemById("DICT_GROUP").Children.Item(0);
// Check whether the first child object of the dictionary is an element group
If Desc.ClassId = 1029 Then
// Get a group of elements for editing
Group := Desc.Edit As IDimElementGroup;
// Change name of element group
(Group As IMetabaseObject).Name := "Elements generated by macro";
// Remove all selection primitives from group
i := Group.Count;
Repeat
i := i - 1;
Group.RemovePrimitive(i);
Until i = 0;
// Add a primitive being a macro to the group
MacroPrimitive := Group.AddPrimitive(SelectionGroupType.Macro) As IDimMacroGroupPrimitive;
// Specify that macro will use group of elements
MacroPrimitive.SendGroupAsParam := True;
// Specify unit
MacroPrimitive.Module := mb.ItemById("MACRO_DIM_EL_GROUP");
// Specify macro binding
MacroPrimitive.ModuleMacro := "Primitives.GroupMacro";
// Save changes in selection group
(Group As IMetabaseObject).Save;
End If;
End Sub UserProc;
Code of the MACRO_DIM_EL_GROUP unit.
Add link to the Dimensions system assembly.
Class Primitives: Object
// Macro to generate dictionary element selection
Public Shared Function GroupMacro(Dimension: IDimInstance; DimGroup: IDimElementGroup): IDimSelection;
Var
DictSelection, GroupSelection: IDimSelection;
i: Integer;
Begin
// Create dictionary element selection
DictSelection := Dimension.CreateSelection;
// Include three dictionary elements to the selection
DictSelection.SelectElement(0, False);
DictSelection.SelectElement(2, False);
DictSelection.SelectElement(5, False);
// Get selection of element group
GroupSelection := DimGroup.Selection;
// Include element group selection to the dictionary element selection
For i := 0 To GroupSelection.SelectedCount - 1 Do
DictSelection.SelectElement(GroupSelection.Element(0), False);
End For;
// Return created dictionary element selection
Return DictSelection;
End Function GroupMacro;
End Class Primitives;
After executing the example the Elements Generated by the Macro group generated by the MACRO_DIM_EL_GROUP macro will be available in all objects using the MACRO_DIM_EL_GROUP dictionary as a dimension.
The requirements and result of the Fore.NET example execution match with those in the Fore Example.
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Express;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
Desc: IMetabaseObjectDescriptor;
Group: IDimElementGroup;
i: Integer;
MacroPrimitive: IDimMacroGroupPrimitive;
Begin
// Get current repository
mb := Params.Metabase;
// Get dictionary
Desc := mb.ItemById["DICT_GROUP"].Children.Item[0];
// Check whether the first child object of the dictionary is an element group
If Desc.ClassId = 1029 Then
// Get a group of elements for editing
Group := Desc.Edit() As IDimElementGroup;
// Change name of element group
(Group As IMetabaseObject).Name := "Elements generated by macro";
// Remove all selection primitives from group
i := Group.Count;
Repeat
i := i - 1;
Group.RemovePrimitive(i);
Until i = 0;
// Add a primitive being a macro to the group
MacroPrimitive := Group.AddPrimitive(SelectionGroupType.sgtMacro) As IDimMacroGroupPrimitive;
// Determine that macro will use group of elements
MacroPrimitive.SendGroupAsParam := True;
// Specify unit
MacroPrimitive.Module := mb.ItemById["MACRO_DIM_EL_GROUP"];
// Specify macro binding
MacroPrimitive.ModuleMacro := "MACRO_DIM_EL_GROUP.Primitives.GroupMacro";
// Save changes in selection group
(Group As IMetabaseObject).Save();
End If;
End Sub;
See also: