IPrxDataSource.Refresh

Синтаксис Fore

Refresh(Dimension: IMetabaseObjectDescriptor; [Instance: IDimInstance = Null]): Boolean;

Синтаксис Fore.NET

Refresh(Prognoz.Platform.Interop.Metabase.IMetabaseObjectDescriptor, Prognoz.Platform.Interop.Dimensions.IDimInstance): System.Boolean;

Параметры

Dimension. Измерение, входящее в куб, являющийся источником данных.

Instance. Экземпляр справочника для работы с элементами.

Описание

Метод Refresh осуществляет обновление измерения среза.

Комментарии

Для получения экземпляра справочника (параметра «Instance») и работы с элементами, используйте метод IMetabaseObjectDescriptor.Open и приведите справочник к интерфейсу IDimInstance.

Пример Fore

Для выполнения примера:

  1. Создайте регламентный отчёт.

  2. Добавьте в качестве источника данных куб, в котором содержатся справочники НСИ с идентификаторами «D_FACTS» и «DIC_SOURCE». Справочники НСИ содержат атрибуты с идентификаторами «NAME» и «ORD».

  3. Добавьте в область данных срез.

  4. Перенесите добавленный срез на лист отчёта, используя механизм Drag&Drop.

  5. Добавьте два элемента управления для справочников НСИ с идентификаторами «D_FACTS» и «DIC_SOURCE» соответственно.

  6. В модулях подключите системные сборки: Metabase, Report, Rds, Dimensions.

  7. Создайте первый модуль для работы с элементами справочника НСИ с идентификатором «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(NullAs 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(NullAs 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;

  1. Подключите первый модуль к отчёту.

  2. Добавьте текст с гиперссылкой для выполнения процедуры/функции. Выберите первый модуль, подключенный ранее к отчёту.

  3. Создайте второй модуль для работы с элементами справочника НСИ с идентификатором «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(NullAs 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(NullAs 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;

  1. Подключите второй модуль к отчёту.

  2. Добавьте текст с гиперссылкой для выполнения процедуры/функции. Выберите второй модуль, подключенный ранее к отчёту.

В регламентном отчёте, после нажатия на первую гиперссылку, будет добавлен один элемент в справочник НСИ с идентификатором «D_FACTS», а после нажатия на вторую гиперссылку, в справочник НСИ с идентификатором «DIC_SOURCE» добавятся два элемента. Разница результатов в том, что в первом модуле при обновлении измерения в отчёте был задан экземпляр справочника для работы с элементами «DimI» (параметр «Instance»), а во втором модуле не задавался. Новые элементы справочников НСИ отобразятся в элементах управления отчёта.

Пример Fore.NET

Для выполнения примера:

  1. Создайте регламентный отчёт.

  2. Добавьте в качестве источника данных куб, в котором содержатся справочники НСИ с идентификаторами «D_FACTS» и «DIC_SOURCE», и атрибутами с идентификаторами «NAME» и «ORD».

  3. Добавьте в область данных срез.

  4. Перенесите добавленный срез на лист отчёта, используя механизм Drag&Drop.

  5. Добавьте два элемента управления для справочников НСИ с идентификаторами «D_FACTS» и «DIC_SOURCE» соответственно.

  6. Создайте обработчик событий в сборке .NET.

  7. В модуле подключите системные сборки: Metabase, Report, Rds, Dimensions.

  8. Задайте для событий 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(NullAs 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(NullAs 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(NullAs 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(NullAs 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». Новые элементы справочников НСИ отобразятся в элементах управления отчёта.

См. также:

IPrxDataSource