CreateSyncGroup(SyncItem: IEaxDimensionDescriptor): IEaxSyncGroup;;
CreateSyncGroup(SyncItem: Prognoz.Platform.Interop.Express.IEaxDimensionDescriptor):
Prognoz.Platform.Interop.Express.IEaxSyncGroup;;
SyncItem. Описание измерения.
Метод CreateGroup создает связь .
Для удаления связи синхронизированных измерений по ее индексу используйте IEaxSyncGroups.Remove.
Для выполнения примера в репозитории необходимо наличие регламентного отчета с идентификатором «REG_SYNCGROUPS», содержащего две аналитические области данных, основанных на одном источнике. Источник данных должен обязательно содержать календарное измерение, основанное на календарном справочнике с идентификатором «D_CALENDAR», и измерение территориальных образований, основанное на территориальном справочнике с идентификатором «DIC_RF».
Добавьте ссылки на системные сборки: Dimensions, Express, Metabase, Report.
Sub UserProc;
Var
MB: IMetabase;
Report: IPrxReport;
DataArea: IEaxDataArea;
RepGrid: IEaxGrid;
SelManager: IEaxObjectSelectionManager;
SliceA, SliceB: IEaxDataAreaSlice;
CalDimKey_A, TerDimKey_A, CalDimKey_B, TerDimKey_B, i, Key, Count: Integer;
CalInst_A, TerInst_A, CalInst_B, TerInst_B: IEaxDimensionInstance;
SGroups: IEaxSyncGroups;
Group_a, Group_b, SG: IEaxSyncGroup;
Compatible: IEaxDimensionDescriptors;
DimName, SyncAttr: String;
SyncItem: IEaxSyncItem;
Begin
MB := MetabaseClass.Active;
// Получаем отчет
Report := MB.ItemById("REG_SYNCGROUPS").Edit As IPrxReport;
// Получаем объект для работы с таблицей
DataArea := Report.DataArea;
RepGrid := DataArea.Views.Item(0) As IEaxGrid;
SelManager := RepGrid.SelectionManager;
// Настраиваем синхронизацию измерений первого среза
SliceA := Report.DataArea.Slices.Item(0);
CalDimKey_A := SliceA.Selection.FindById("D_CALENDAR").Dimension.Key;
CalInst_A := SelManager.GetDimension(CalDimKey_A);
TerDimKey_A := SliceA.Selection.FindById("DIC_RF").Dimension.Key;
TerInst_A := SelManager.GetDimension(TerDimKey_A);
SGroups := Report.SyncGroups;
Group_a := SGroups.CreateGroup(CalInst_A);
Group_b := SGroups.CreateGroup(TerInst_A);
SyncItem := Group_a.Add(CalInst_A);
SyncItem := Group_b.Add(TerInst_A);
// Настраиваем синхронизацию измерений второго среза
SliceB := Report.DataArea.Slices.Item(1);
CalDimKey_B := SliceB.Selection.FindById("D_CALENDAR").Dimension.Key;
CalInst_B := SliceB.GetDimension(CalDimKey_B);
TerDimKey_B := SliceB.Selection.FindById("DIC_RF").Dimension.Key;
TerInst_B := SliceB.GetDimension(TerDimKey_B);
Compatible := SGroups.GetCompatibleItems(CalInst_A, "");
DimName := SliceA.Selection.FindById("D_CALENDAR").Dimension.Name;
Debug.WriteLine("Количество связей, для которых подходит данное измерение = " + Compatible.Count.ToString);
If SGroups.IsDimensionsCompatible(CalInst_A, "", CalInst_B, "") Then
Group_a.Add(CalInst_B);
Else
Return;
End If;
If SGroups.IsDimensionsCompatible(TerInst_A, "", TerInst_B, "") Then
Group_b.Add(TerInst_B);
Else
Return;
End If;
// Получаем элементы связи измерения территориальных образований
SG := SGroups.InGroup(TerInst_B);
SG.PropogateChanges(TerInst_B);
For i := 0 To SG.Count - 1 Do
SyncItem := SG.Item(i);
// Указываем, что связь только принимает отметку
SyncItem.SyncDirection := EaxDimensionSynchronizationDirection.ConsumeChangesOnly;
SyncAttr := SyncItem.SyncAttribute;
Count := SyncItem.SyncGroup.Count;
Key := SyncItem.Dimension.DimKey;
Debug.WriteLine("Количество элементов связи = " + Count.ToString);
Debug.WriteLine("Ключ измерения - " + Count.ToString);
If SyncAttr.Length > 0 Then
Debug.WriteLine("Атрибут синхронизации - " + SyncAttr);
Else
Debug.WriteLine("Нет синхронизации по атрибуту");
End If;
End For;
// Сохраним изменения
(Report As IMetabaseObject).Save;
End Sub UserProc;
В результате выполнения примера будут созданы две связи для синхронизированных измерений. Первая связь для календарного измерения, вторая - для территориального.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Express;
Imports Prognoz.Platform.Interop.Report;
…
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
Report: IPrxReport;
DataArea: IEaxDataArea;
RepGrid: IEaxGrid;
SelManager: IEaxObjectSelectionManager;
SliceA, SliceB: IEaxDataAreaSlice;
CalDimKey_A, TerDimKey_A, CalDimKey_B, TerDimKey_B, Key: uinteger;
i, Count: Integer;
CalInst_A, TerInst_A, CalInst_B, TerInst_B: IEaxDimensionInstance;
SGroups: IEaxSyncGroups;
Group_a, Group_b, SG: IEaxSyncGroup;
Compatible: IEaxDimensionDescriptors;
DimName, SyncAttr: String;
SyncItem: IEaxSyncItem;
Begin
MB := Params.Metabase;
// Получаем отчет
Report := MB.ItemById["REG_SYNCGROUPS"].Edit() As IPrxReport;
// Получаем объект для работы с таблицей
DataArea := Report.DataArea;
RepGrid := DataArea.Views.Item[0] As IEaxGrid;
SelManager := RepGrid.SelectionManager;
// Настраиваем синхронизацию измерений первого среза
SliceA := Report.DataArea.Slices.Item[0];
CalDimKey_A := SliceA.Selection.FindById("D_CALENDAR").Dimension.Key;
CalInst_A := SelManager.GetDimension(CalDimKey_A);
TerDimKey_A := SliceA.Selection.FindById("DIC_RF").Dimension.Key;
TerInst_A := SelManager.GetDimension(TerDimKey_A);
SGroups := Report.SyncGroups;
Group_a := SGroups.CreateGroup(CalInst_A);
Group_b := SGroups.CreateGroup(TerInst_A);
SyncItem := Group_a.Add(CalInst_A);
SyncItem := Group_b.Add(TerInst_A);
// Настраиваем синхронизацию измерений второго среза
SliceB := Report.DataArea.Slices.Item[1];
CalDimKey_B := SliceB.Selection.FindById("D_CALENDAR").Dimension.Key;
CalInst_B := SliceB.GetDimension(CalDimKey_B);
TerDimKey_B := SliceB.Selection.FindById("DIC_RF").Dimension.Key;
TerInst_B := SliceB.GetDimension(TerDimKey_B);
Compatible := SGroups.GetCompatibleItems(CalInst_A, "");
DimName := SliceA.Selection.FindById("D_CALENDAR").Dimension.Name;
System.Diagnostics.Debug.WriteLine("Количество связей, для которых подходит данное измерение = " + Compatible.Count.ToString());
If SGroups.IsDimensionsCompatible(CalInst_A, "", CalInst_B, "") Then
Group_a.Add(CalInst_B);
Else
Return;
End If;
If SGroups.IsDimensionsCompatible(TerInst_A, "", TerInst_B, "") Then
Group_b.Add(TerInst_B);
Else
Return;
End If;
// Получаем элементы связи измерения территориальных образований
SG := SGroups.InGroup(TerInst_B);
SG.PropogateChanges(TerInst_B);
For i := 0 To SG.Count - 1 Do
SyncItem := SG.Item[i];
// Указываем, что связь только принимает отметку
SyncItem.SyncDirection := EaxDimensionSynchronizationDirection.edsdConsumeChangesOnly;
SyncAttr := SyncItem.SyncAttribute;
Count := SyncItem.SyncGroup.Count;
Key := SyncItem.Dimension.DimKey;
System.Diagnostics.Debug.WriteLine("Количество элементов связи = " + Count.ToString());
System.Diagnostics.Debug.WriteLine("Ключ измерения - " + Count.ToString());
If SyncAttr.Length > 0 Then
System.Diagnostics.Debug.WriteLine("Атрибут синхронизации - " + SyncAttr);
Else
System.Diagnostics.Debug.WriteLine("Нет синхронизации по атрибуту");
End If;
End For;
// Сохраним изменения
(Report As IMetabaseObject).Save();
End Sub;
См. также: