ICubeMetaUpdateExParams.AutoPeriod

Синтаксис Fore

AutoPeriod: IRubricatorAutoPeriod;

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

AutoPeriod: Prognoz.Platform.Interop.Cubes.IRubricatorAutoPeriod;

Описание

Свойство AutoPeriod возвращает период обновления данных.

Комментарии

Для фильтрации обновляемых временных рядов используйте свойство ICubeMetaUpdateExParams.FactorsFilter.

Пример Fore

Для выполнения примера в репозитории предполагается наличие базы данных временных рядов с идентификатором «TSDB_UPD», содержащей пользовательские атрибуты временных рядов с идентификаторами «CITY» и «INDICATOR». Данные атрибуты должны являться ссылками на справочник.

Добавьте ссылки на системные сборки: Cubes, Dimensions, Metabase, Rds.

// Основная процедура
Sub UserProc;
Var
    Mb: IMetabase;
    MUpd: IMetabaseUpdate;
    Object: IMetabaseObject;
Begin
    // Получаем репозиторий
    Mb := MetabaseClass.Active;
    // Создаем обновление
    MUpd := Mb.CreateUpdate;
    // Получаем базу данных временных рядов
    Object := Mb.ItemById("TSDB_UPD").Bind;
    // Добавляем в обновление базу данных временных рядов
    AddToUpdate(Object, MUpd.RootFolder);
    // Задаем тип обновления: по идентификаторам
    MUpd.BoundType := MetabaseObjectUpdateBoundType.ById;
    // Выполняем сортировку объектов обновления в порядке зависимости
    MUpd.RootFolder.Sort(UpdateSortMode.ByDepends);
    // Сохраняем обновление в файл
    MUpd.SaveToFile("C:\UpdTSDB.pef");
End Sub UserProc;

// Процедура добавления объекта в обновление
Sub AddToUpdate(Object: IMetabaseObjectDescriptor; Folder: IMetabaseUpdateFolderNode);
Var
    Node: IMetabaseUpdateObjectNode;
    NodeAsFolder: IMetabaseUpdateFolderNode;
    Children: IMetabaseObjectDescriptors;
    i: Integer;
    exParams: ICubeMetaUpdateExParams;
    factory: IDimSelectionSetFactory;
    SelectionSet: IDimSelectionSet;
    Rub: IRubricator;
    Attributes: IMetaAttributes;
    Attr: IMetaAttribute;
    Selection: IDimSelection;
    AutoPeriod: IRubricatorAutoPeriod;
Begin
    // Создаем ветку обновления
    Node := Folder.Add(MetabaseUpdateNodeType.Object) As IMetabaseUpdateObjectNode;
    // Если добавляемый объект это база данных временных рядов, то задаем параметры её обновления
    If Object.ClassId = MetabaseObjectClass.KE_CLASS_RUBRICATOR Then
        // Задаем фильтр, по которому будут обновляться временные ряды
        exParams := Object.Bind.CreateUpdateExParams As ICubeMetaUpdateExParams;
        factory := New DimSelectionSetFactory.Create;
        SelectionSet := factory.CreateDimSelectionSet;
        // Получаем все атрибуты временных рядов
        Rub := Object As IRubricator;
        attributes := Rub.Facts.Attributes;
        // Перебираем все атрибуты временных рядов
        For Each Attr In attributes Do
            // Если это атрибут «INDICATOR» или «CITY»,
            // то ограничиваем отметку в измерении, основанном на данном атрибуте
            If (Attr.Id = "INDICATOR"Or (Attr.Id = "CITY"Then
                selection := SelectionSet.Add(Attr.ValuesObject.Open(NullAs IDimInstance);
                selection.DeselectAll;
                selection.SelectElement(1False);
                selection.SelectElement(2False);
            End If;
        End For;
        exParams.FactorsFilter := SelectionSet;
        // Указываем, что мнемоники должны быть регенерированы
        exParams.RegenerateMnemo := True;
        // Указываем, наблюдения, отсутствующие в обновлении, но присутствующие в обновляемой
        // базе данных временных рядов, будут заменены значением Null
        exParams.ForceEmptyValues := True;
        // Указываем, что пустые значения из обновления не вставляются
        // в обновляемую базу данных временных рядов
        exParams.SkipEmptySourceValues := True;
        // Задаем режим обновления базы данных временных рядов
        exParams.UpdateMode := CubeLoadClearMode.DataAndMetadata;
        // Задаем период обновления данных
        AutoPeriod := exParams.AutoPeriod;
        AutoPeriod.Start.ExactDate := DateTime.Parse("01.01.1980");
        AutoPeriod.End_.ExactDate := DateTime.Parse("01.01.2016");
        // Указываем, что на время обновления будет заблокирована системная таблица
        exParams.CanLockBMOD := True;
        Node.ExtendedParams := exParams;
    End If;
    // Указываем обновляемый объект
    Node.Object := Object;
    // Задаем параметры обновления
    Node.BoundType := MetabaseObjectUpdateBoundType.ById;
    Node.UpdatePart := MetabaseObjectUpdatePart.DataMetadata;
    Node.Constraint := MetabaseObjectUpdateConstraint.None;
    // Добавляем в обновление дочерние объекты
    Children := Object.Children;
    NodeAsFolder := (Node As IMetabaseUpdateFolderNode);
    For i := 0 To Children.Count - 1 Do
        AddToUpdate(Children.Item(i), NodeAsFolder);
    End For;
End Sub AddToUpdate;

В результате выполнения примера в будет создано обновление, включающее в себя базу данных временных рядов и все её дочерние объекты. Обновление будет сохранено в файл «C:\UpdTSDB.pef».

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Rds;

Public Shared Sub Main(Params: StartParams);
Var
    Mb: IMetabase;
    MUpd: IMetabaseUpdate;
    Object: IMetabaseObject;
Begin
    // Получаем репозиторий
    Mb := Params.Metabase;
    // Создаем обновление
    MUpd := Mb.CreateUpdate();
    // Получаем базу данных временных рядов
    Object := Mb.ItemById["TSDB_UPD"].Bind();
    // Добавляем в обновление базу данных временных рядов
    AddToUpdate(Object, MUpd.RootFolder);
    // Задаем тип обновления: по идентификаторам
    MUpd.BoundType := MetabaseObjectUpdateBoundType.moubtById;
    // Выполняем сортировку объектов обновления в порядке зависимости
    MUpd.RootFolder.Sort(UpdateSortMode.usmByDepends);
    // Сохраняем обновление в файл
    MUpd.SaveToFile("C:\\UpdTSDB.pef");
End Sub;

// Процедура добавления объекта в обновление
Public Shared Sub AddToUpdate(Object: IMetabaseObjectDescriptor; Folder: IMetabaseUpdateFolderNode);
Var
    Node: IMetabaseUpdateObjectNode;
    NodeAsFolder: IMetabaseUpdateFolderNode;
    Children: IMetabaseObjectDescriptors;
    i: Integer;
    exParams: ICubeMetaUpdateExParams;
    factory: IDimSelectionSetFactory;
    SelectionSet: IDimSelectionSet;
    Rub: IRubricator;
    Attributes: IMetaAttributes;
    Attr: IMetaAttribute;
    Selection: IDimSelection;
    AutoPeriod: IRubricatorAutoPeriod;
Begin
    // Создаем ветку обновления
    Node := Folder.Add(MetabaseUpdateNodeType.untObject) As IMetabaseUpdateObjectNode;
    // Если добавляемый объект это база данных временных рядов, то задаем параметры её обновления
    If Object.ClassId = MetabaseObjectClass.KE_CLASS_RUBRICATOR As integer Then
        // Задаем фильтр, по которому будут обновляться временные ряды
        exParams := Object.Bind().CreateUpdateExParams() As ICubeMetaUpdateExParams;
        factory := New DimSelectionSetFactory.Create();
        SelectionSet := factory.CreateDimSelectionSet();
        // Получаем все атрибуты временных рядов
        Rub := Object As IRubricator;
        attributes := Rub.Facts.Attributes;
        // Перебираем все атрибуты временных рядов
        For Each Attr In attributes Do
            // Если это атрибут «INDICATOR» или «CITY»,
            // то ограничиваем отметку в измерении, основанном на данном атрибуте
            If (Attr.Id = "INDICATOR"Or (Attr.Id = "CITY"Then
                selection := SelectionSet.Add(Attr.ValuesObject.Open(NullAs IDimInstance);
                selection.DeselectAll();
                selection.SelectElement(1False);
                selection.SelectElement(2False);
            End If;
        End For;
        exParams.FactorsFilter := SelectionSet;
        // Указываем, что мнемоники должны быть регенерированы
        exParams.RegenerateMnemo := True;
        // Указываем, наблюдения, отсутствующие в обновлении, но присутствующие в обновляемой
        // базе данных временных рядов, будут заменены значением Null
        exParams.ForceEmptyValues := True;
        // Указываем, что пустые значения из обновления не вставляются
        // в обновляемую базу данных временных рядов
        exParams.SkipEmptySourceValues := True;
        // Задаем режим обновления базы данных временных рядов
        exParams.UpdateMode := CubeLoadClearMode.clcmDataAndMetadata;
        // Задаем период обновления данных
        AutoPeriod := exParams.AutoPeriod;
        AutoPeriod.Start.ExactDate := DateTime.Parse("01.01.1980");
        AutoPeriod.@End.ExactDate := DateTime.Parse("01.01.2016");
        // Указываем, что на время обновления будет заблокирована системная таблица
        exParams.CanLockBMOD := True;
        Node.ExtendedParams := exParams;
    End If;
    // Указываем обновляемый объект
    Node.Object := Object;
    // Задаем параметры обновления
    Node.BoundType := MetabaseObjectUpdateBoundType.moubtById;
    Node.UpdatePart := MetabaseObjectUpdatePart.moupDataMetadata;
    Node.Constraint := MetabaseObjectUpdateConstraint.moucNone;
    // Добавляем в обновление дочерние объекты
    Children := Object.Children;
    NodeAsFolder := (Node As IMetabaseUpdateFolderNode);
    For i := 0 To Children.Count - 1 Do
        AddToUpdate(Children.Item[i], NodeAsFolder);
    End For;
End Sub AddToUpdate;

См. также:

ICubeMetaUpdateExParams