Ваш браузер устарел, не поддерживает современные веб-стандарты и представляет угрозу Вашей безопасности. Для комфортной работы с порталом, пожалуйста, установите современыый браузер.
Портал технической поддержки

Поиск сотрудника в справчнике по ФИО

Комментарии

Комментариев: 4

  • Подключить еще как минимум
    using DocsVision.Platform.ObjectManager.Metadata;

    А GetXml для SectionQuery с точностью до наоборот - GetXml(null, true). Как вариант, использовать его вообще без параметров.

    Ну и, наконец, StrEquals применять, действительно, не рекомендуется, но это просто предупреждение, можно проигнорировать.

    0
    Действия с комментариями Постоянная ссылка
  • Добрый день!

    Ну все видимо потому, что сначала надо секцию Подразделения получить, а из него уже секцию сотрудников.

    Думаю легче через объектную модель сие сделать, примерно вот так:

    /// <summary> Поиск Пользователя по ФИО.
    /// Возвращает коллекцию найденых пользователей. Перед поиском вырезаются { *.,:; }.
    /// </summary>
    /// <param name="FIO"> ФИО, н-р, "Иванов Иван Иванович", отчество не обязательно (проверяется только если установленно в параметре и в настройках польззователя СЭД) </param>
    /// <returns> Возвращает коллекцию найденых пользователей. </returns>
    public List<StaffEmployee> UserFindFIO(string FIO)
    {
    ProcessIn.AddLogMessage(ActionTypeEnum.Information, "Старт.", 0, "Поиск пользователя по ФИО.", "", FIO, "", "");

    List<StaffEmployee> lseUser = new List<StaffEmployee>();

    //-- Ф, И, О пользователя --
    string sFullName = FIO.Trim().Replace(".", " ");
    sFullName = sFullName.Replace("*", " ");
    sFullName = sFullName.Replace(",", " ");
    sFullName = sFullName.Replace(":", " ");
    sFullName = sFullName.Replace(";", " ").Trim();
    string[] sNameOC = sFullName.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
    if (sNameOC.Length < 2)
    {
    ProcessIn.AddLogMessage(ActionTypeEnum.Information, "Не верный формат ФИО.", 10, "Поиск пользователя по ФИО.", "", FIO, "", "");
    return lseUser;
    }
    bool bDouble = false;
    foreach (StaffEmployee seTemp in Context.FindObjects<StaffEmployee>(new QueryObject("LastName", sNameOC[0])))
    {
    if (sNameOC[1].Equals(seTemp.FirstName))
    {
    if (sNameOC.Length > 2 && seTemp.MiddleName != null)
    {
    string sMiddleName = seTemp.MiddleName.Trim();
    if (sNameOC[2].Length > 1 && sMiddleName.Length > 1)
    {
    if (sNameOC[2].Equals(sMiddleName, StringComparison.CurrentCultureIgnoreCase))
    {
    if (bDouble)
    { lseUser.Add(seTemp); }
    else
    { lseUser.Clear(); lseUser.Add(seTemp); bDouble = true; }
    }
    }
    else if (!bDouble)
    { lseUser.Add(seTemp); }
    }
    else if (!bDouble)
    { lseUser.Add(seTemp); }
    }
    }

    ProcessIn.AddLogMessage(ActionTypeEnum.Information, ".", 0, "Поиск пользователя по ФИО.", "", FIO, "Найдено: " + lseUser.Count.ToString(), "");
    return lseUser;
    }

     

    и да не пытайтесь в QueryObject засунуть сразу и LastName, и FirstName - в DV не работает

    0
    Действия с комментариями Постоянная ссылка
  • прошу прощенья, о своем задумался... ошибку не посмотрел... Евгений все правильно написал...

     

    // Получение данных справочника
    CardData staffData = process.Session.CardManager.GetDictionaryData(Guid.Parse("6710B92A-E148-4363-8A6F-1AA0EB18936C"));
    // Получение секции сотрудников
    SectionData section = staffData.Sections[Guid.Parse( "DBC8AE9D-C1D2-4D5E-978B-339D22B32482")];
    // Создание поискового запроса по секции
    DocsVision.Platform.ObjectManager.SearchModel.SectionQuery query = process.Session.CreateSectionQuery();
    // Условие по полю фамилия
    DocsVision.Platform.ObjectManager.SearchModel.ConditionGroup cg = query.ConditionGroup;
    cg.Operation = ConditionGroupOperation.And;
    cg.Conditions.AddNew("LastName", FieldType.Unistring, ConditionOperation.Equals, "Фамилия");
    cg.Conditions.AddNew("FirstName", FieldType.Unistring, ConditionOperation.StartsWith, "Имя");
    // Выполнение запроса
    RowDataCollection results = section.FindRows(query.GetXml());

    0
    Действия с комментариями Постоянная ссылка
  • Спасибо. Странно, что в документации указанно именно query.GetXml(true, null) - копировал из pdf-ки

    0
    Действия с комментариями Постоянная ссылка

Войдите в службу, чтобы оставить комментарий.