Refresh(Dimension: IMetabaseObjectDescriptor; [Instance: IDimInstance = Null]): Boolean;
Refresh(Prognoz.Platform.Interop.Metabase.IMetabaseObjectDescriptor, Prognoz.Platform.Interop.Dimensions.IDimInstance): System.Boolean;
Dimension. Измерение, входящее в куб, являющийся источником данных.
Instance. Экземпляр справочника для работы с элементами.
Метод Refresh осуществляет обновление измерения среза.
Для получения экземпляра справочника (параметра «Instance») и работы с элементами, используйте метод IMetabaseObjectDescriptor.Open и приведите справочник к интерфейсу IDimInstance.
Для выполнения примера:
Создайте регламентный отчёт.
Добавьте в качестве источника данных куб, в котором содержатся справочники НСИ с идентификаторами «D_FACTS» и «DIC_SOURCE». Справочники НСИ содержат атрибуты с идентификаторами «NAME» и «ORD».
Добавьте в область данных срез.
Перенесите добавленный срез на лист отчёта, используя механизм Drag&Drop.
Добавьте два элемента управления для справочников НСИ с идентификаторами «D_FACTS» и «DIC_SOURCE» соответственно.
В модулях подключите системные сборки: Metabase, Report, Rds, Dimensions.
Создайте первый модуль для работы с элементами справочника НСИ с идентификатором «D_FACTS»:
Sub UserProc;
Var
Report: IPRxReport;
MB: IMetabase;
MObj1: IMetabaseObject;
DtSources: IPrxDataSources;
DtSource: IPrxDataSource;
DimI: IDimInstance;
Str: String;
Key, i: Integer;
Rds: IRdsDictionaryInstance;
Data: IRdsDictionaryElementData;
Begin
// Получим активный регламентный отчёт
Report := PrxReport.ActiveReport;
MB := Report.MetabaseObject.Metabase;
DtSources := Report.DataSources;
DtSource := DtSources.Item(0);
// Получим справочник НСИ с заданным идентификатором
MObj1 := MB.ItemByIdNamespace("D_FACTS", 159).Bind;
// Откроем справочник НСИ для редактирования
DimI := MObj1.Open(Null) As IDimInstance;
Rds := DimI As IRdsDictionaryInstance;
// Создадим элемент, содержащий данные атрибутов элемента справочника НСИ
Data := Rds.CreateElementData;
// Добавим наименование в атрибут с идентификатором «NAME»
Key := Rds.Attributes.FindById("NAME").Attribute.Key;
Str := "Element " + Rds.Elements.Count.ToString;
Data.Attribute(Key) := Str;
// Добавим значение в атрибут с идентификатором «ORD»
Key := Rds.Attributes.FindById("ORD").Attribute.Key;
i := Rds.Elements.Count;
Data.Attribute(Key) := i;
// Добавим созданный элемент в справочник НСИ
Rds.Insert(Rds.Elements.Root, Data);
// Создадим экземпляр справочника НСИ
DimI := MObj1.Open(Null) As IDimInstance;
// Добавим второй элемент аналогично
Data := Rds.CreateElementData;
Key := Rds.Attributes.FindById("NAME").Attribute.Key;
Str := "Element " + Rds.Elements.Count.ToString;
Data.Attribute(Key) := Str;
Key := Rds.Attributes.FindById("ORD").Attribute.Key;
i := Rds.Elements.Count;
Data.Attribute(Key) := i;
Rds.Insert(Rds.Elements.Root, Data);
// Обновим измерение в отчёте
DtSource.Refresh(MObj1 As IMetabaseObjectDescriptor, DimI);
End Sub UserProc;
Подключите первый модуль к отчёту.
Добавьте текст с гиперссылкой для выполнения процедуры/функции. Выберите первый модуль, подключенный ранее к отчёту.
Создайте второй модуль для работы с элементами справочника НСИ с идентификатором «DIC_SOURCE»:
Sub UserProc;
Var
Report: IPRxReport;
MB: IMetabase;
MObj1: IMetabaseObject;
DtSources: IPrxDataSources;
DtSource: IPrxDataSource;
DimI: IDimInstance;
Str: String;
Key, i: Integer;
Rds: IRdsDictionaryInstance;
Data: IRdsDictionaryElementData;
Begin
// Получим активный регламентный отчёт
Report := PrxReport.ActiveReport;
MB := Report.MetabaseObject.Metabase;
DtSources := Report.DataSources;
DtSource := DtSources.Item(0);
// Получим справочник НСИ с заданным идентификатором
MObj1 := MB.ItemByIdNamespace("DIC_SOURCE", 159).Bind;
// Откроем справочник НСИ для редактирования
DimI := MObj1.Open(Null) As IDimInstance;
Rds := DimI As IRdsDictionaryInstance;
// Создадим элемент, содержащий данные атрибутов элемента справочника НСИ
Data := Rds.CreateElementData;
// Добавим наименование в атрибут с идентификатором «NAME»
Key := Rds.Attributes.FindById("NAME").Attribute.Key;
Str := "Element " + Rds.Elements.Count.ToString;
Data.Attribute(Key) := Str;
// Добавим значение в атрибут с идентификатором «ORD»
Key := Rds.Attributes.FindById("ORD").Attribute.Key;
i := Rds.Elements.Count;
Data.Attribute(Key) := i;
// Добавим созданный элемент в справочник НСИ
Rds.Insert(Rds.Elements.Root, Data);
// Создадим экземпляр справочника НСИ
DimI := MObj1.Open(Null) As IDimInstance;
// Добавим второй элемент аналогично
Data := Rds.CreateElementData;
Key := Rds.Attributes.FindById("NAME").Attribute.Key;
Str := "Element " + Rds.Elements.Count.ToString;
Data.Attribute(Key) := Str;
Key := Rds.Attributes.FindById("ORD").Attribute.Key;
i := Rds.Elements.Count;
Data.Attribute(Key) := i;
Rds.Insert(Rds.Elements.Root, Data);
// Обновим измерение в отчёте
DtSource.Refresh(MObj1 As IMetabaseObjectDescriptor);
End Sub UserProc;
Подключите второй модуль к отчёту.
Добавьте текст с гиперссылкой для выполнения процедуры/функции. Выберите второй модуль, подключенный ранее к отчёту.
В регламентном отчёте, после нажатия на первую гиперссылку, будет добавлен один элемент в справочник НСИ с идентификатором «D_FACTS», а после нажатия на вторую гиперссылку, в справочник НСИ с идентификатором «DIC_SOURCE» добавятся два элемента. Разница результатов в том, что в первом модуле при обновлении измерения в отчёте был задан экземпляр справочника для работы с элементами «DimI» (параметр «Instance»), а во втором модуле не задавался. Новые элементы справочников НСИ отобразятся в элементах управления отчёта.
Для выполнения примера:
Создайте регламентный отчёт.
Добавьте в качестве источника данных куб, в котором содержатся справочники НСИ с идентификаторами «D_FACTS» и «DIC_SOURCE», и атрибутами с идентификаторами «NAME» и «ORD».
Добавьте в область данных срез.
Перенесите добавленный срез на лист отчёта, используя механизм Drag&Drop.
Добавьте два элемента управления для справочников НСИ с идентификаторами «D_FACTS» и «DIC_SOURCE» соответственно.
Создайте обработчик событий в сборке .NET.
В модуле подключите системные сборки: Metabase, Report, Rds, Dimensions.
Задайте для событий OnBeforeExecuteReport и OnBeforeSaveReport добавление новых элементов в справочники НСИ:
Imports Prognoz.Platform.Interop.Report;
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Rds;
Imports Prognoz.Platform.Interop.Dimensions;
Public Override Sub OnBeforeExecuteReport(Report: IPrxReport; Var Cancel: Boolean);
Var
MB: IMetabase;
MObj1: IMetabaseObject;
DtSources: IPrxDataSources;
DtSource: IPrxDataSource;
DimI: IDimInstance;
Str: String;
Key: uinteger;
i: integer;
Rds: IRdsDictionaryInstance;
Data: IRdsDictionaryElementData;
Begin
MB := Report.MetabaseObject.Metabase;
DtSources := Report.DataSources;
DtSource := DtSources.Item[0];
// Получим справочник НСИ с заданным идентификатором
MObj1 := MB.ItemByIdNamespace["D_FACTS", 159].Bind();
// Откроем справочник НСИ для редактирования
DimI := MObj1.Open(Null) As IDimInstance;
Rds := DimI As IRdsDictionaryInstance;
// Создадим элемент, содержащий данные атрибутов элемента справочника НСИ
Data := Rds.CreateElementData();
// Добавим наименование в атрибут с идентификатором «NAME»
Key := Rds.Attributes.FindById("NAME").Attribute.Key;
Str := "Element " + Rds.Elements.Count.ToString();
Data.Attribute[Key] := Str;
// Добавим значение в атрибут с идентификатором «ORD»
Key := Rds.Attributes.FindById("ORD").Attribute.Key;
i := Rds.Elements.Count;
Data.Attribute[Key] := i;
// Добавим созданный элемент в справочник НСИ
Rds.Insert(Rds.Elements.Root, Data);
// Создадим экземпляр справочника НСИ
DimI := MObj1.Open(Null) As IDimInstance;
// Добавим второй элемент аналогично
Data := Rds.CreateElementData();
Key := Rds.Attributes.FindById("NAME").Attribute.Key;
Str := "Element " + Rds.Elements.Count.ToString();
Data.Attribute[Key] := Str;
Key := Rds.Attributes.FindById("ORD").Attribute.Key;
i := Rds.Elements.Count;
Data.Attribute[Key] := i;
Rds.Insert(Rds.Elements.Root, Data);
// Обновим измерение в отчёте
DtSource.Refresh(MObj1 As IMetabaseObjectDescriptor, DimI);
End Sub OnBeforeExecuteReport;
Public Override Sub OnBeforeSaveReport(Report: IPrxReport; Var Cancel: Boolean);
Var
MB: IMetabase;
MObj1: IMetabaseObject;
DtSources: IPrxDataSources;
DtSource: IPrxDataSource;
DimI: IDimInstance;
Str: String;
Key: uinteger;
i: integer;
Rds: IRdsDictionaryInstance;
Data: IRdsDictionaryElementData;
Begin
MB := Report.MetabaseObject.Metabase;
DtSources := Report.DataSources;
DtSource := DtSources.Item[0];
// Получим справочник НСИ с заданным идентификатором
MObj1 := MB.ItemByIdNamespace["DIC_SOURCE", 159].Bind();
// Откроем справочник НСИ для редактирования
DimI := MObj1.Open(Null) As IDimInstance;
Rds := DimI As IRdsDictionaryInstance;
// Создадим элемент, содержащий данные атрибутов элемента справочника НСИ
Data := Rds.CreateElementData();
// Добавим наименование в атрибут с идентификатором «NAME»
Key := Rds.Attributes.FindById("NAME").Attribute.Key;
Str := "Element " + Rds.Elements.Count.ToString();
Data.Attribute[Key] := Str;
// Добавим значение в атрибут с идентификатором «ORD»
Key := Rds.Attributes.FindById("ORD").Attribute.Key;
i := Rds.Elements.Count;
Data.Attribute[Key] := i;
// Добавим созданный элемент в справочник НСИ
Rds.Insert(Rds.Elements.Root, Data);
// Создадим экземпляр справочника НСИ
DimI := MObj1.Open(Null) As IDimInstance;
// Добавим второй элемент аналогично
Data := Rds.CreateElementData();
Key := Rds.Attributes.FindById("NAME").Attribute.Key;
Str := "Element " + Rds.Elements.Count.ToString();
Data.Attribute[Key] := Str;
Key := Rds.Attributes.FindById("ORD").Attribute.Key;
i := Rds.Elements.Count;
Data.Attribute[Key] := i;
Rds.Insert(Rds.Elements.Root, Data);
// Обновим измерение в отчёте
DtSource.Refresh(MObj1 As IMetabaseObjectDescriptor, Null);
End Sub OnBeforeSaveReport;
В регламентном отчёте, после нажатия на кнопку «Обновить» на вкладке «Главная» ленты инструментов, произойдет событие, при котором добавится один элемент в справочник НСИ с идентификатором «D_FACTS», а после нажатия на кнопку «Сохранить» будет добавлено два элемента в справочник НСИ с идентификатором «DIC_SOURCE». Новые элементы справочников НСИ отобразятся в элементах управления отчёта.
См. также: