CriteriaOptions: TextCriteriaOptions;
CriteriaOptions: Prognoz.Platform.Interop.Dimensions.TextCriteriaOptions;
Свойство CriteriaOptions определяет параметры поиска.
Для выполнения примера разместите на форме два компонента UiDimension/UiDimensionNet с наименованиями UIDEMENTION1/UIDEMENTIONNET1 и UIDEMENTION2/UIDEMENTIONNET2, два EditBox/TextBox с наименованиями EDITBOX1/TEXTBOX1 и EDITBOX2/TEXTBOX2, два DimensionCombo/DimensionComboNet с наименованиями DEMENTIONCOMBO1/DEMENTIONCOMBONET1 и DEMENTIONCOMBO2/DEMENTIONCOMBONET2 и один компонент Button с наименованием BUTTON1.
Предполагается наличие двух справочников НСИ, которые указанны в качестве свойства Object для компонентов UiDimension/UiDimensionNet соответственно. Для компонентов DimensionCombo/DimensionComboNet свойству Demention установите значение UiDimension1/UiDimensionNet1 и UiDimension2/UiDimensionNet2 соответственно.
Предполагается наличие базы данных временных рядов, в которой атрибуты с идентификаторами COUNTRY и INDICATOR ссылаются на справочники НСИ соответственно.
Для компонента EditBox/TextBox с наименованием EDITBOX1/TEXTBOX1 свойству Text установите значение идентификатора базы данных временных рядов, для EDITBOX2/TEXTBOX2 задайте пустое значение.
Добавьте ссылки на системные сборки: Cubes, Dimentions, Metabase, Rds.
Class IDimTextCriteria_CriteriaOptionsForm: Form
…
Mb: IMetabase;
Cat: IRubricator;
Inst: IRubricatorInstance;
pAttrs: IMetaAttributes;
Sub FormOnShow(Sender: Object; Args: IEventArgs);
Begin
Mb := MetabaseClass.Active;
Cat := Mb.ItemById(EditBox1.Text).Bind As IRubricator; // база данных временных рядов
Inst := (Cat As IMetabaseObject).Open(Null) As IRubricatorInstance;
pAttrs := Inst.Facts.Dictionary.Attributes;
UiDimension1.Object := pAttrs.FindById("COUNTRY").ValuesObject;
UiDimension2.Object := pAttrs.FindById("INDICATOR").ValuesObject;
End Sub FormOnShow;
Sub Button1OnClick(Sender: Object; Args: IMouseEventArgs);
Var
Selections: IDimSelectionSet;
Factory: IDimSelectionSetFactory;
FactLookup: IRubricatorFactsLookup;
MetaLookup: IMetaDictionaryLookup;
Criteria: IDimTextCriteria;
Begin
Factory := New DimSelectionSetFactory.Create;
Selections := Factory.CreateDimSelectionSet;
Selections.Add(DimensionCombo1.Dimension.DimInstance);
Selections.Add(DimensionCombo2.Dimension.DimInstance);
DimensionCombo1.Selection.CopyTo(Selections.Item(0), True);
DimensionCombo2.Selection.CopyTo(Selections.Item(1), True);
FactLookup := Inst.CreateFactsLookup;
MetaLookup := FactLookup.Lookup;
Criteria := New DimTextCriteria.Create;
Criteria.CriteriaOptions := TextCriteriaOptions.LikeText Or TextCriteriaOptions.SearchStringAttributes;
Criteria.Text := EditBox2.Text;
Selections := FactLookup.SetTextCriteria(Criteria, Selections);
Selections.Item(0).CopyTo(DimensionCombo1.Selection, True);
Selections.Item(1).CopyTo(DimensionCombo2.Selection, True);
End Sub Button1OnClick;
End Class Form;
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Rds;
…
Private Sub Form_Shown(sender: System.Object; e: System.EventArgs);
Var
Mb: IMetabase;
Cat: IRubricator;
Inst: IRubricatorInstance;
pAttrs: IMetaAttributes;
Begin
Mb := Self.Metabase;
Cat := Mb.ItemById[TextBox1.Text].Bind() As IRubricator; // база данных временных рядов
Inst := (Cat As IMetabaseObject).Open(Null) As IRubricatorInstance;
pAttrs := Inst.Facts.Dictionary.Attributes;
UiDimensionNet1.Object := pAttrs.FindById("COUNTRY").ValuesObject;
UiDimensionNet2.Object := pAttrs.FindById("INDICATOR").ValuesObject;
End Sub;
Private Sub button1_Click(sender: System.Object; e: System.EventArgs);
Var
Selections: IDimSelectionSet;
Factory: IDimSelectionSetFactory;
FactLookup: IRubricatorFactsLookup;
MetaLookup: IMetaDictionaryLookup;
Criteria: IDimTextCriteria;
Inst: IRubricatorInstance;
Begin
Factory := New DimSelectionSetFactory.Create();
Selections := Factory.CreateDimSelectionSet();
Selections.Add(DimensionComboNet1.Dimension.DimInstance);
Selections.Add(DimensionComboNet2.Dimension.DimInstance);
DimensionComboNet1.Selection.CopyTo(Selections.Item[0], True);
DimensionComboNet2.Selection.CopyTo(Selections.Item[1], True);
FactLookup := Inst.CreateFactsLookup();
MetaLookup := FactLookup.Lookup;
Criteria := New DimTextCriteria.Create();
Criteria.CriteriaOptions := TextCriteriaOptions.tecropLikeText Or TextCriteriaOptions.tecropSearchStringAttributes;
Criteria.Text := TextBox2.Text;
Selections := FactLookup.SetTextCriteria(Criteria, Selections);
Selections.Item[0].CopyTo(DimensionComboNet1.Selection, True);
Selections.Item[1].CopyTo(DimensionComboNet2.Selection, True);
End Sub;
После запуска формы необходимо произвести отметку в раскрывающих списках измерений, затем ввести текст для поиска и нажать на кнопку, после чего отметка в списках будет изменена: останутся выделенными только те элементы, которые соответствуют критерию поиска.
См. также: