ISearchSourceDataResult.SourceMetadata

Синтаксис Fore

SourceMetadata: ISourceMetadata;

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

SourceMetadata: Prognoz.Platform.Interop.BISearch.ISourceMetadata;

Описание

Свойство SourceMetadata возвращает метаданные источника данных.

Пример Fore

Предполагается, что репозиторий настроен на работу с поисковым сервисом на базе Apache Solr. В базе поискового сервиса имеются индексированные данные о срезах различных источников данных репозитория. Подключите системные сборки: BISearch, Fore, Metabase.

Sub UserProc;
Var
    MB: IMetabase;
    SharedParams: ISharedParams;
    SearchEngine: ISolrSearchEngineService;
    Schema: ISolrSearchEngineSchema;
    SearchExecutor: ISearchExecutor;
    SearchContext: ISolrSourceDataSearchContext;
    Results: ISolrSearchResults;
    Result: ISearchSourceDataResult;
    Source: ISourceMetadata;
    Selections: ISearchDimSelectionSet;
    Selection: ISearchDimSelection;
    Elements: ISearchDimSelectionElements;
    Element: ISearchDimSelectionElement;
    Calendars: ICalendarInfos;
    Calendar: ICalendarInfo;
    MDesc: IMetabaseObjectDescriptor;
    i, j: Integer;
Begin
    MB := MetabaseClass.Active;
    //Параметры поиска и индексации, заданные для репозитория
    SharedParams := MB.SpecialObject(MetabaseSpecialObject.SharedParams).Bind As ISharedParams;
    SearchEngine := SharedParams.SearchEngine As ISolrSearchEngineService;
    Schema := SearchEngine.SearchEngineSchema As ISolrSearchEngineSchema;
    //Параметры поиска
    SearchExecutor := Schema.SearchExecutor(SearchEngineTargetType.SourceData);
    SearchContext := SearchExecutor.CreateContext As ISolrSourceDataSearchContext;
    SearchContext.Locale := LocaleCodeID.Russian;
    SearchContext.Text := "Россия";
    //Поиск
    Results := SearchExecutor.Search(SearchContext) As ISolrSearchResults;
    //Просмотр информации по источнику для первого результата поиска
    Result := Results.Item(0As ISearchSourceDataResult;
    Source := Result.SourceMetadata;
    Debug.WriteLine("Наименование среза: " + Result.Name);
    Debug.WriteLine("Источник: " + Source.SourceName + '(' + Source.SourceId + ')');
    Debug.WriteLine("Тип объекта: " + MetabaseClass.CommonClassName(Source.SourceClassId As MetabaseObjectClass));
    If Source.HighlightedSourceName.Length > 0 Then
        Debug.WriteLine("Наименование с подсветкой искомого значения: " + Source.HighlightedSourceName);
    End If;
    Debug.WriteLine("Отметка по индексированным измерениям:");
    Debug.Indent;
    //Отметка измерений, по которой сформирован срез
    Selections := Source.Selection;
    For i := 0 To Selections.Count - 1 Do
        Selection := Selections.Item(i);
        Debug.Write("Ключ измерения: " + Selection.DimensionKey.ToString + ". Элементы: ");
        Elements := Selection.Elements;
        For j := 0 To Elements.Count - 1 Do
            Element := Elements.Item(j);
            Debug.Write(Element.Name + '(' + Element.Key + ") ");
        End For;
        Debug.WriteLine("");
    End For;
    Debug.Unindent;
    //Отметка свободных измерений, если они имеются
    If Source.FreeDimensionsSelection.Count <> 0 Then
        Debug.WriteLine("Отметка свободных измерений:");
        Debug.Indent;
        Selections := Source.FreeDimensionsSelection;
        For i := 0 To Selections.Count - 1 Do
            Selection := Selections.Item(i);
            Debug.Write("Ключ измерения: " + Selection.DimensionKey.ToString + ". Элементы: ");
            Elements := Selection.Elements;
            For j := 0 To Elements.Count - 1 Do
                Element := Elements.Item(j);
                Debug.Write(Element.Name + '(' + Element.Key + ") ");
            End For;
            Debug.WriteLine("");
        End For;
        Debug.Unindent;
    End If;
    //Информация о календарных измерениях
    Calendars := Source.CalendarInfo;
    For i := 0 To Calendars.Count - 1 Do
        Calendar := Calendars.Item(i);
        MDesc := MB.Item(Calendar.Key);
        Debug.WriteLine("Справочник в основе календарного измерения: " + MDesc.Name + '(' + MDesc.Id + ')');
        Debug.WriteLine("Даты, на которые имеются данные: " + Calendar.DateStart.ToString + " - " +
            Calendar.DateEnd.ToString);
    End For;
End Sub UserProc;

При выполнении примера будет осуществлен поиск указанного значения по индексированной информации об элементах измерений. Из первого найденного результата будет получена информация об источнике данных, к которому относится срез. Различная информация об отметке источника будет выведена в консоль среды разработки.

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore. Кроме сборок, указанных в примере Fore, подключите также сборку «ForeSystem».

Imports Prognoz.Platform.Interop.BISearch;
Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.KeFore;
Imports Prognoz.Platform.Interop.Metabase;

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    MBClass: MetabaseClass = New MetabaseClassClass();
    SharedParams: ISharedParams;
    SearchEngine: ISolrSearchEngineService;
    Schema: ISolrSearchEngineSchema;
    SearchExecutor: ISearchExecutor;
    SearchContext: ISolrSourceDataSearchContext;
    Results: ISolrSearchResults;
    Result: ISearchSourceDataResult;
    Source: ISourceMetadata;
    Selections: ISearchDimSelectionSet;
    Selection: ISearchDimSelection;
    Elements: ISearchDimSelectionElements;
    Element: ISearchDimSelectionElement;
    Calendars: ICalendarInfos;
    Calendar: ICalendarInfo;
    MDesc: IMetabaseObjectDescriptor;
    i, j: Integer;
Begin
    MB := Params.Metabase;
    //Параметры поиска и индексации, заданные для репозитория
    SharedParams := MB.SpecialObject[MetabaseSpecialObject.msoSharedParams].Bind() As ISharedParams;
    SearchEngine := SharedParams.SearchEngine As ISolrSearchEngineService;
    Schema := SearchEngine.SearchEngineSchema As ISolrSearchEngineSchema;
    //Параметры поиска
    SearchExecutor := Schema.SearchExecutor[SearchEngineTargetType.settSourceData];
    SearchContext := SearchExecutor.CreateContext() As ISolrSourceDataSearchContext;
    SearchContext.Locale := LocaleCodeID.lcidRussian;
    SearchContext.Text := "Россия";
    //Поиск
    Results := SearchExecutor.Search(SearchContext) As ISolrSearchResults;
    //Просмотр информации по источнику для первого результата поиска
    Result := Results.Item[0As ISearchSourceDataResult;
    Source := Result.SourceMetadata;
    System.Diagnostics.Debug.WriteLine("Наименование среза: " + Result.Name);
    System.Diagnostics.Debug.WriteLine("Источник: " + Source.SourceName + '(' + Source.SourceId + ')');
    System.Diagnostics.Debug.WriteLine("Тип объекта: " + MBClass.CommonClassName[Source.SourceClassId As MetabaseObjectClass,
        NameCasePlural.ncNominative]);
    If Source.HighlightedSourceName.Length > 0 Then
        System.Diagnostics.Debug.WriteLine("Наименование с подсветкой искомого значения: " + Source.HighlightedSourceName);
    End If;
    System.Diagnostics.Debug.WriteLine("Отметка по индексированным измерениям:");
    System.Diagnostics.Debug.Indent();
    //Отметка измерений, по которой сформирован срез
    Selections := Source.Selection;
    For i := 0 To Selections.Count - 1 Do
        Selection := Selections.Item[i];
        System.Diagnostics.Debug.Write("Ключ измерения: " + Selection.DimensionKey.ToString() + ". Элементы: ");
        Elements := Selection.Elements;
        For j := 0 To Elements.Count - 1 Do
            Element := Elements.Item[j];
            System.Diagnostics.Debug.Write(Element.Name + '(' + Element.Key + ") ");
        End For;
        System.Diagnostics.Debug.WriteLine("");
    End For;
    System.Diagnostics.Debug.Unindent();
    //Отметка свободных измерений, если они имеются
    If Source.FreeDimensionsSelection.Count <> 0 Then
        System.Diagnostics.Debug.WriteLine("Отметка свободных измерений:");
        System.Diagnostics.Debug.Indent();
        Selections := Source.FreeDimensionsSelection;
        For i := 0 To Selections.Count - 1 Do
            Selection := Selections.Item[i];
            System.Diagnostics.Debug.Write("Ключ измерения: " + Selection.DimensionKey.ToString() + ". Элементы: ");
            Elements := Selection.Elements;
            For j := 0 To Elements.Count - 1 Do
                Element := Elements.Item[j];
                System.Diagnostics.Debug.Write(Element.Name + '(' + Element.Key + ") ");
            End For;
            System.Diagnostics.Debug.WriteLine("");
        End For;
        System.Diagnostics.Debug.Unindent();
    End If;
    //Информация о календарных измерениях
    Calendars := Source.CalendarInfo;
    For i := 0 To Calendars.Count - 1 Do
        Calendar := Calendars.Item[i];
        MDesc := MB.Item[Calendar.Key];
        System.Diagnostics.Debug.WriteLine("Справочник в основе календарного измерения: " + MDesc.Name + '(' + MDesc.Id + ')');
        System.Diagnostics.Debug.WriteLine("Даты, на которые имеются данные: " + Calendar.DateStart.ToString() + " - " +
            Calendar.DateEnd.ToString());
    End For;
End Sub;

См. также:

ISearchSourceDataResult