Value: Variant;
Value: System.Object;
Свойство Value определяет значение атрибута, по которому фильтруются элементы.
Если не определено свойство Value, то корректная работа фильтра невозможна.
Если Value содержит массив значений типа Variant и свойство IRdsDictionaryFilterCondition.Operation имеет значение:
RdsConditionOperation.Equal. Для фильтра применяется условие In, то есть наличие значения атрибута в массиве Value;
RdsConditionOperation.NotEqual. Для фильтра применяется условие NotIn, то есть отсутствие значения атрибута в массиве Value.
Для выполнения примера в репозитории предполагается наличие репозитория НСИ с идентификатором «MDM_REPO». Данный репозиторий должен содержать табличный справочник НСИ с идентификатором «EXP_DICT».
В файловой системе должен быть создан текстовый файл «C:\Data_out.txt».
Добавьте ссылки на системные сборки «Metabase», «Rds», «Dt».
Sub UserProc;
Var
mb: IMetabase;
rdsKey: Integer;
dictObj: IMetabaseObject;
Dict: IRdsDictionary;
sExport: IMetaRdsExportSchema;
i: Integer;
dictAts: IRdsAttributes;
Attr: IRdsAttribute;
attrMap: IRdsExportSchemaAttribute;
dictFilter: IRdsDictionaryFilterConditions;
Cond: IRdsDictionaryFilterCondition;
textCons: IDtTextConsumer;
dictInst: IRdsDictionaryInstance;
Begin
mb := MetabaseClass.Active;
// Получаем ключ репозитория НСИ
rdsKey := mb.GetObjectKeyById("MDM_REPO");
// Получаем табличный справочник НСИ
dictObj := mb.ItemByIdNamespace("EXP_DICT", rdsKey).Edit;
Dict := dictObj As IRdsDictionary;
// Создаем новую схему экспорта
sExport := Dict.ExportSchemas.Add As IMetaRdsExportSchema;
// Определяем привязку атрибутов справочника к полям приёмника
dictAts := Dict.Attributes;
For i := 0 To dictAts.Count - 1 Do
Attr := dictAts.Item(i);
attrMap := sExport.AddMapping;
attrMap.Attribute := Attr;
attrMap.FieldName := Attr.Id;
End For;
// Указываем, что перед экспортом необходимо очистить приёмник
sExport.ClearBeforeExport := True;
// Добавляем фильтрацию
dictFilter := sExport.Filter;
Attr := dictAts.FindById("KEY");
Cond := dictFilter.Add(Attr);
Cond.Value := 0;
Cond.Operation := RdsConditionOperation.GreaterOrEqual;
Cond := dictFilter.Add(Attr);
Cond.Value := 15;
Cond.Operation := RdsConditionOperation.LesserOrEqual;
// Настраиваем приемник данных: текстовый файл
textCons := New DtTextConsumer.Create;
textCons.File := "c:\Data_out.txt";
textCons.WriteHeader := True;
textCons.RowDelimiter := #13 + #10;
textCons.DelimitedColumnDelimiter := #9;
textCons.DelimitedTextQualifier := "'";
sExport.Consumer := textCons;
// Сохраняем справочник
dictObj.Save;
// Выполняем экспорт
dictInst := dictObj.Open(Null) As IRdsDictionaryInstance;
dictInst.ExportData(sExport);
End Sub UserProc;
Результат выполнения примера: из табличного справочника НСИ в файл «C:\Data_out.txt» будут экспортированы элементы, значение ключа которых находится в диапазоне [0; 15].
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Dt;
Imports Prognoz.Platform.Interop.Rds;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
rdsKey: uinteger;
dictObj: IMetabaseObject;
Dict: IRdsDictionary;
sExport: IMetaRdsExportSchema;
i: Integer;
dictAts: IRdsAttributes;
Attr: IRdsAttribute;
attrMap: IRdsExportSchemaAttribute;
dictFilter: IRdsDictionaryFilterConditions;
Cond: IRdsDictionaryFilterCondition;
textCons: IDtTextConsumer;
dictInst: IRdsDictionaryInstance;
Begin
mb := Params.Metabase;
// Получаем ключ репозитория НСИ
rdsKey := mb.GetObjectKeyById("MDM_REPO");
// Получаем табличный справочник НСИ
dictObj := mb.ItemByIdNamespace["EXP_DICT", rdsKey].Edit();
Dict := dictObj As IRdsDictionary;
// Создаем новую схему экспорта
sExport := Dict.ExportSchemas.Add() As IMetaRdsExportSchema;
// Определяем привязку атрибутов справочника к полям приёмника
dictAts := Dict.Attributes;
For i := 0 To dictAts.Count - 1 Do
Attr := dictAts.Item[i];
attrMap := sExport.AddMapping();
attrMap.Attribute := Attr;
attrMap.FieldName := Attr.Id;
End For;
// Указываем, что перед экспортом необходимо очистить приёмник
sExport.ClearBeforeExport := True;
// Добавляем фильтрацию
dictFilter := sExport.Filter;
Attr := dictAts.FindById("KEY");
Cond := dictFilter.Add(Attr);
Cond.Value := 0;
Cond.Operation := RdsConditionOperation.rcoGreaterOrEqual;
Cond := dictFilter.Add(Attr);
Cond.Value := 15;
Cond.Operation := RdsConditionOperation.rcoLesserOrEqual;
// Настраиваем приемник данных: текстовый файл
textCons := New DtTextConsumer.Create();
textCons.File := "c:\Data_out.txt";
textCons.WriteHeader := True;
textCons.DelimitedTextQualifier := "'";
sExport.Consumer := textCons;
// Сохраняем справочник
dictObj.Save();
// Выполняем экспорт
dictInst := dictObj.Open(Null) As IRdsDictionaryInstance;
dictInst.ExportData(sExport);
End Sub;
См. также: