Полезное

Разные интересные примеры и важные решения

Управление видимостью меню (подменю)

Иногда, чтобы отобразить/скрыть левое меню/подменю недостаточно использовать в контроллере привязку к привилегиям.

Когда нужно реализовать свои проверки, например включен ли функционал в настройках системы, можно использовать следующий пример:

Отображение меню Канбан при условии что есть нужные привилегии, а так же в настройках он включен.

Создаем атрибут, где будем проверять, включен ли Канбан в настройках системы:

/// <inheritdoc />
public class KanbanEnabledAttribute : BasePermissionAttribute
{
	/// <inheritdoc />
    public override bool HasPermission()
    {
    	return Locator.GetServiceNotNull<CRMSettingsModule>().Settings.EnableKanban;
  	}
}

Далее в котроллере проставляем указанный атрибут:

/// <inheritdoc />
[AnyPermission(CRMPermissionProvider.CRMAccessPermissionId, CRMPermissionProvider.SalesAccessPermissionId)]
[RouteArea(RouteProvider.AreaName)]
public class KanbanController : BPMController
{
	/// <summary>
    /// Канбан по сделкам
    /// </summary>
    /// <param name="filterId"></param>
    /// <returns></returns>
    [KanbanEnabled]
    [ContentItem(Name = "SR.M('Канбан')", Image24 = Common.Web.RouteProvider.ImagesFolder + "kanban.svg")]
    [FilterMenuItem(Id = CRMMenuItems.Kanban, /*Type = typeof(ICOMonthlyPayment),*/ FilterEditAction = "EditFilters")]
    public ActionResult Index(long? filterId = null)
    {
    	// TODO
	}
}

После этого меню Канбан отображается не только исходя из прав (привилегий) пользователя, но и в соответствиями с настройками системы.

Точки расширения IMenuItemRenderer и IMenuCustomItems для подменю не работают!

Запросы в БД

Приведем несколько полезных запросов в БД для очистки старых данных и прочих служебных вкусностей. Для примера используется база ELMA (заменить на свое).

Удаление сообщений об ошибках в ленте:

/****** Скрипт для команды SelectTopNRows из среды SSMS  ******/
delete
FROM [ELMA].[dbo].[Feed]
where Subject like '%Ошибка в процессе%' or Subject like '%Ошибка выполнения%'

Удаление сообщений об ошибках в архиве ленты:

/****** Скрипт для команды SelectTopNRows из среды SSMS  ******/
delete
FROM [ELMA].[dbo].[FeedArchive]
where Subject like '%Ошибка в процессе%' or Subject like '%Ошибка выполнения%'

Удаление записей о выполнении взаимоотношений:

/****** Скрипт для команды SelectTopNRows из среды SSMS  ******/
delete 
FROM [ELMA].[dbo].[EntityActionHistory]
where [ActionTypeUid] = '786919b5-d160-426a-a578-f74b503cf966'

Удаление записей о выполнении, добавлении комментариев, изменении времени:

/****** Скрипт для команды SelectTopNRows из среды SSMS  ******/
delete
FROM [ELMA].[dbo].[EntityActionHistory]
where [ActionTypeUid] = 'fa413130-d92d-41e4-9fba-b133c43fe02a' or  [ActionTypeUid] = '3e3e8dd9-b4ea-4ad8-9aa1-19b4fe27ff80' or [ActionTypeUid] = '786919b5-d160-426a-a578-f74b503cf966'

Разработка компонентов и модулей

Разработка компонентов и модулей

Утилитка сборки решений для стора

Для автоматизации сборки компонентов для стора можно использовать следующую утилиту (положить, например в каталог Dev):

Для ELMA3 - ITino.ELMA.StoreGenerator3.exe
Для ELMA4 - ITino.ELMA.StoreGenerator4.exe

(Дополнительно ей потребуется библиотека CommandLine.dll)

После этого необходимо в проект серверного модуля добавить два файла: Store.png и Store.xml. Пример последнего:

<?xml version="1.0" encoding="utf-8" ?>
<ElmaComponent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ProductType>Module</ProductType>
  <ActivationType>Free</ActivationType>
  <Title>IEE BPM | Интеграция с геосервисами и картами</Title>
  <Description>
    Интеграция с сервисами геокодинга и отображения карт:
    • Яндекс.Карты
    • Google Maps
    • 2ГИС
    • Azure Maps
    • MapBox
  </Description>
  <Author>TechSU LLC</Author>
  <Site>https://www.randmgroup.ru</Site>
  <Dependencies>
    <Component Id="EleWise.ELMA.SDK" Version="[4.1.39, 4.2)" />
  </Dependencies>
  <OrganizationItems>false</OrganizationItems>
  <Entities />
  <Packages>
    <Package>
      <Id>GoogleApi</Id>
    </Package>
    <Package>
      <Id>ITino.ELMA.GIS</Id>
    </Package>
    <Package>
      <Id>ITino.ELMA.GIS.Web</Id>
    </Package>
  </Packages>
</ElmaComponent>

Сделать батник для сборки всего нашего хозяйства:

rmdir /Q /S %~dp0!Store.Release
mkdir %~dp0!Store.Release
rmdir /Q /S %~dp0!Packages
mkdir %~dp0!Packages

# Предваритаельн особрать пакеты нашего решения
..\PackageManager\EleWise.ELMA.Packaging.Console.exe packSln C:\ELMA-Enterprise\Dev\WebApplication\Modules\ITino.ELMA.Release.sln -v 4.1.39.28604 -out !Packages -NoSelfUpdate -NoProjectDependencies -ProjectNames ITino.ELMA.GIS;ITino.ELMA.GIS.Web

# Собрать компоненты для стора
ITino.ELMA.StoreGenerator.exe -s C:\ELMA-Enterprise\Dev\WebApplication\Modules\ITino.ELMA.Release.sln -v 4.1.39.28604 -o !Store.Release -p !Packages -e ..\Packages

# Удалить хлам - утилита сама не может - не дает GC
del /Q /S /F C:\Users\<ПодКемЗашли>\AppData\Local\Temp\*.*

После этого мы должны получить нужный(е) компоненты в каталоге Store.Release.