...

Как разместить справочник на странице

Тема в разделе "Вопросы по функционалу", создана пользователем Алексей Клишненко, 24 фев 2021.

  1. Есть задача разместить пользовательский справочник на странице портала в табличном виде. Записи должны выводиться по условию. По клику на запись должна открываться карточка объекта.

    Вроде бы элементарные вещи, но никак не могу найти в БЗ, как это делается. Неужели нужно с нуля программировать свой портлет, или есть более простое решение?

    Простите, если вопрос через чур тупой. Я новичок, так что просьба пинать не сильно и в правильную сторону ))

    Версия системы коммерческая (Стандарт) , подробности в файле.
     

    Вложения:

    • version.PNG
      version.PNG
      Размер файла:
      24,2 КБ
      Просмотров:
      5
  2. Пинать самому себя крайне неудобно, но, видимо, придётся ))

    Прочитав несколько статей, пришел к выводу, что таки да - надо писать свой портлет.
    Тем более, что есть шикарный пример:
    https://www.elma-bpm.ru/KB/article-5539.html

    Однако, есть подозрение, что то, что прекрасно работает с системными объектами, не подходит для работы с пользовательскими.

    Например, в указанной статье есть такая строка кода:
    Код:
    var usersFilter = InterfaceActivator.Create<UserFilter>();
    в которой я меняю User на свой класс Sotrudnik
    Код:
    var usersFilter = InterfaceActivator.Create<SotrudnikFilter>();
    По совету статьи https://www.elma-bpm.ru/KB/article-5655.html я проверил, что для моего объекта включена настройка "Генерировать фильтр".
    Но тем не менее получаю ошибку:
    The type or namespace name 'SotrudnikFilter' could not be found (are you missing a using directive or an assembly reference?)

    Может кто-нибудь подскажет, что я делаю не так?
     
  3. Конечно же, при работе с пользовательскими объектами есть отличие. И ведь читал об этом...
    Во-первых, нужно задать пространство имен, в котором по умолчанию создаются все пользовательские объекты:
    Код:
    @using EleWise.ELMA.ConfigurationModel
    А так же прописать менеджер своего объекта
    Код:
    var manager = EntityManager<Sotrudnik>.Instance
    Ну и строку
    Код:
    var latestUsers = UserManager.Instance.Find(usersFilter, null);
    заменить на
    Код:
    var latestUsers = manager.Find(usersFilter, null);
     
  4. В результате получилось следующее:
    Код:
    @using EleWise.ELMA.ConfigurationModel
    @using EleWise.ELMA.ComponentModel
    @using EleWise.ELMA.Services
    @using EleWise.ELMA
    @using EleWise.ELMA.Model.Entities
    @using EleWise.ELMA.Model.Managers
    @using EleWise.ELMA.Model.Services
    @using EleWise.ELMA.Model.Ranges
    @using EleWise.ELMA.Runtime.Managers
    @using EleWise.ELMA.Runtime.NH
    @using EleWise.ELMA.Security.Models
    @using EleWise.ELMA.Security.Managers
    @using EleWise.ELMA.Model.Common
    @using System.Linq
    @* пока в этом примере фильтр дает список записей, созданных в справочнике Sotrudnik в последние 300 дней.
    Более предметную реализацию фильтра сделаю позже*@
    @{
    var manager = EntityManager<Sotrudnik>.Instance;
    var usersFilter = InterfaceActivator.Create<SotrudnikFilter>();
    var daterange = new DateTimeRange();
    daterange.From = DateTime.Now.AddDays(-300).Date;
    usersFilter.CreationDate = daterange;
    var latestUsers = manager.Find(usersFilter, null);
    }
    @* Здесь задаем url карточки каждого сотрудника.
    Вставив Id записи между двумя частями url, мы получим ссылку на карточку каждой
    uid=59b4fc0a-83ea-4624-9ff3-54f5fa65af8a - можно посмотреть в url при вызове карточки из справочника
    скорее всего это uid самого справочника*@
    @{
    var urlBeginText = "http://10.128.128.162:8000/Common/Catalogs/ViewItem/";
    var urlEndText = "?uid=59b4fc0a-83ea-4624-9ff3-54f5fa65af8a&backUrl=%2FCommon%2FCatalogs%2FView%3Fuid%3D59b4fc0a-83ea-4624-9ff3-54f5fa65af8a%26filterId%3D0";
    }
    <table cellspacing="0" cellpadding="4" align="Center" border="0" style="border-color:Transparent;width:100%;border-collapse:collapse;">
    <tbody><tr><th scope="col"> </th></tr>
    @foreach(var u in latestUsers)
    {
    <tr>
      <td>
         <div>
            <p> <a href="@urlBeginText@u.Id.ToString()@urlEndText" style="margin-left:20px">@u </a>
         </div>
      </td>
      <td>
         <div>
            <p>@u.MobilePhone </p>
         </div>
      </td>
    </tr>                         
    }                         
    </tbody>
    </table>
     

    Вложения:

Поделиться: