IPrxDataSource.Refresh

Синтаксис

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

Параметры

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

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

Описание

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

Комментарии

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

Пример

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

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

См. также:

IPrxDataSource