Руководствуясь постом https://community.terrasoft.ru/articles/kak-skryt-knopku-zapustit-process#comment-81452 пробую убрать кнопку. Но учитывая что в посте только указано как теоретически это должно работать, с примером замещения модуля не имеющего отношения к теме, решил сделать сам, но видимо что-то не учел.

Создал модуль с именем "KtLeftPanelTopMenuModule" который замещает "Terrasoft.LeftPanelTopMenuModuleViewModel" в котором собираются пункты меню

define("KtLeftPanelTopMenuModule", ["LeftPanelTopMenuModule"],
	function() {
		Ext.define("Terrasoft.configuration.KtLeftPanelTopMenuModuleViewModel", {
			alternateClassName: "Terrasoft.KtLeftPanelTopMenuModuleViewModel",
			override: "Terrasoft.LeftPanelTopMenuModuleViewModel",
 
			getTopMenuConfig: function() {
				var esq = this.callParent(arguments);
				var index = esq.menuConfig.map(function(e) { return e.id; }).indexOf("menu-startprocess-button");
				if (index > -1) {
					esq.menuConfig.splice(index, 1);
				}
				return esq;
			}
		});
	}
);

И BootstrapModulesV2

define("BootstrapModulesV2", ["KtLeftPanelTopMenuModule"], function() {
	return {};
});

Но при загрузки страницы BootstrapModulesV2 не видел мой модуль KtLeftPanelTopMenuModule

Нравится

3 комментария
Лучший ответ

Александр, именно не загрузилось, не заходит в функцию этого модуля? Может, просто требуется перелогин или заход из браузера в анонимном режиме?

Александр, именно не загрузилось, не заходит в функцию этого модуля? Может, просто требуется перелогин или заход из браузера в анонимном режиме?

Спасибо. Видимо Redis не почистил)))

Нашел ответ что лучше чем убрать кнопку. Так как запустить процесс можно как минимум тремя способами если ты просто пользователь (через кнопку "Запустить процесс", через три полоски и там "Запустить процесс", и через окно поиска набрав "Запустить процесс <название процесса>"), то убрать кнопку не достаточно. Покопавшись глубже, понял что в списке что открывается находятся процессы с тегом "Buisness process", состоянием "Активен" и в текущем пространстве, то как вывод - если не хочешь что бы активные процессы попадали в список, то подписывай теги как угодно но только не "Buisness process", и все решение. Стандартные если не нужны, то или делать не активными, или создать новую версию у себя в пакете и изменить тег.

Показать все комментарии

При попытке запустить код C# получаем ошибку "ВОЗНИКЛА ОШИБКА: The type or namespace name 'TsiDevIRunable' does not exist in the namespace 'Terrasoft.Configuration' (are you missing an assembly reference?)

   at Terrasoft.Configuration.TsiDevScriptEngine.Compile(String source, String[] assemblies)

   at Terrasoft.Configuration.TsiDevDynamicCodeExecutor.Execute(String csCode)

   at Terrasoft.Configuration.TsiDevESQDebugService.GetSQLFromCSharp(String sourceCode, Boolean onlySQL)"

 

Версия: 7.16.4 SalesEnterprise_Marketing_ServiceEnterprise Oracle ENU

Нравится

4 комментария

Добрый Александр.

Могли бы вы прислать код, который вы запускаете для выполнения?

Дарья Ткач,

 Стандартный код что идет при входе в утилиту

#region usings and class definition
using System;
using Terrasoft.Configuration;
using Terrasoft.Core;
using Terrasoft.Core.DB;
using Terrasoft.Core.Entities;
 
 
// Название namespace, class и метода Run менять нельзя
namespace TsiDevTemp.ScriptCode {
 
	public class ScriptClass: Terrasoft.Configuration.TsiDevIRunable {
#endregion
		/// &lt;summary&gt; Выполнение кода &lt;/summary&gt;
		/// &lt;returns&gt; Должен возвращать текст SQL запроса&lt;/returns&gt;
		public string Run(UserConnection userConnection) {
			var esq = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Contact") {
				RowCount = 10
			};
			esq.AddColumn("Id");
			esq.AddColumn("Name");
 
			var select = esq.GetSelectQuery(userConnection);
			select.BuildParametersAsValue = true;
			return select.GetSqlText();
		}
 
	}
 
}

 

А вообще хотел запустить

Query selectQuery = new Select(UserConnection).Top(numberCountForNumberPool)
	.Column(Column.Parameter(request)).Column(Column.Parameter(currentUserContactId))
	.Column(Column.Parameter(currentUserContactId))
	.Column("KtSimManagementInitialPoolNumbers", "KtIccid")
	.Column("KtSimManagementInitialPoolNumbers", "KtImsi")
	.Column("KtSimManagementInitialPoolNumbers", "KtMsisdn")
	.Column("KtSimManagementInitialPoolNumbers", "KtName")
	.Column(Column.Parameter(cityAndCountNumbersEntity.GetTypedColumnValue&lt;Guid&gt;(city.Name)))
	.Column(Column.Parameter(cityAndCountNumbersEntity.GetTypedColumnValue&lt;string&gt;(note.Name)))
	.Column(Column.Parameter(DateTime.UtcNow.Date))
	.Column(Column.Parameter(DateTime.UtcNow.Date
		.AddDays((int)Core.Configuration.SysSettings.GetValue(UserConnection,
			"DayCountForDedicatedPoolNumbers") + 1).AddSeconds(-1)))
	.From("KtSimManagementInitialPoolNumbers")
	.OrderByAsc("KtSimManagementInitialPoolNumbers", "KtName")
	.Join(JoinType.LeftOuter, "KtJasperFullNumberPool")
	.On("KtSimManagementInitialPoolNumbers", "KtName")
	.IsEqual("KtJasperFullNumberPool", "KtName")
	.Where("KtJasperFullNumberPool", "KtName")
	.IsNull()
	.And("KtSimManagementInitialPoolNumbers", "KtMarketCodeId")
	.IsEqual(Column.Parameter(cityForMarketCode));
	logger.Info("selectQuery: " + selectQuery.GetSqlText());
InsertSelect insertSelectQuery = new InsertSelect(UserConnection)
	.Into("KtJasperFullNumberPool")
	.Set("KtRequestId", "ModifiedById", "CreatedById", "KtIccid", "KtImsi", "KtMsisdn", "KtName", "KtCityId", "KtNote", "KtReserveDate", "KtReserveToDate")
	.FromSelect(selectQuery);
logger.Info("insertSelectQuery: " + insertSelectQuery.GetSqlText());

 

Александр Тыра,

провели анализ. Описываемый вами кейс не воспроизвелся на наших средах. Предполагаем, что это может быть связано с реализованным проектным решением или конкретной сборкой Creatio. Возможно у вас есть доп. уточнения, чтобы воспроизвести кейс?

Показать все комментарии

Коллеги, добрый день.

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

Необходимо, чтобы в функционале полной версии ленты была возможность указывать запись из раздела документы и все файлы из детали "Файлы и ссылки" раздела "Документы" отображались в новости ленты.

Далее, чтобы эти файлы можно было открыть в мобильной версии из записи ленты и в полной версии.

 Кто-то реализовывал деталь в ленте мобильного приложения и в полной версии?

Нравится

2 комментария

Владислав, можно просто программно создать в ленте сообщение со ссылками на скачивание в системе нужных файлов с адресами вроде http://адрес_сайта/0/rest/FileService/GetFile/ 7b332db9-3993-4136-ac32-09353333cc7a/935b6ecb-3509-4c8a-bc7e-03ab0661da24. Как они формируются, см. в этой теме.

 

По поводу того, будут ли такие ссылки открываться из мобильной версии, не уверен, нужно проверять.

Зверев Александр,

Проверил, ссылки все равно в браузере открываются. Решили реализовать через публикацию новости в конкретном документе. В этом случае прямо в мобильном приложении вместо ссылки на канал будет ссылка на раздел документы и из них можно уже открыть документы прямо в приложении без использования браузера

Показать все комментарии

Здравствуйте! Подскажите как создать ссылку в email-шаблоне(базовом функционале) на конкретную запись.

Дело в том, я нашел только html-элементы, где можно вставлять ссылки, наподобии /0/Nui/ViewModule.aspx#CardModuleV2/ITCardGenerationRequest1Page/edit/{Здесь должен быть Id записи}, но там недоступны максросы, чтобы вставить Id, также пробовал вручную - не работает.

Что-то подобное есть в тексте, но в ссылки опять-таки нельзя вставить макросы.

Нравится

2 комментария

Егор, в стандартном справочнике шаблонов email-сообщений есть один «Шаблон уведомления о новой визе счета» с гиперссылкой на запись в разделе. Этот шаблон указан в системной настройке InvoiceVisaEmailTemplate. Но в нём, если открыть в дизайнере шаблонов, ссылка сделана просто как цифра в фигурных скобках:

 &lt;div&gt;
  &lt;a href="{0}" style="color: rgb(8, 87, 166);" target="_blank"&gt;Invoice No.[#Invoice.Number#]&lt;/a&gt;&amp;nbsp;from [#Invoice.Date#] with total amount of [#Invoice.Currency.Short Name#][#Invoice.Amount#]&amp;nbsp;requires approval by user or role&amp;nbsp;&amp;quot;[#Approver.Name#]&amp;quot;.&lt;/div&gt;
 &lt;div&gt;

Его заполнение делается в коде отдельно, во встроенном БП BaseVisa в функции ProcessEmailBody:

  public virtual string GetVisaLink() {
   var schemaColumns = Entity.Schema.Columns;
   var referenceSchemaName = string.Empty;
   var referenceSchemaUId = Guid.Empty;
   EntitySchemaColumnCollection referenceSchemaColumns = null;
 
   foreach (var column in schemaColumns) {
    if (!column.IsInherited &amp;&amp; column.DataValueType.IsLookup) {
     referenceSchemaName = column.ReferenceSchema.Name;
     referenceSchemaUId = column.ReferenceSchema.UId;
     referenceSchemaColumns = column.ReferenceSchema.Columns;
    }
   }
   var mainEntityId = Entity.GetTypedColumnValue&lt;Guid&gt;(referenceSchemaName + "Id");
   var typeColumnUId = GetSchemaTypeColumnUId(referenceSchemaUId);
   var cardSchemaName = string.Concat(referenceSchemaName, "Page");
   var cardSchemaUId = Guid.Empty;
   if (!typeColumnUId.Equals(Guid.Empty)) {
    var typeColumnName = referenceSchemaColumns.GetByUId(typeColumnUId).Name + ".Id";
    var typeColumnValue = GetSchemaTypeColumnValue(referenceSchemaName, typeColumnName, mainEntityId);
    cardSchemaUId = GetCardSchemaUId(typeColumnValue, SysModuleEntityId);
    cardSchemaName = GetCardSchemaName(cardSchemaUId);
   } else {
    cardSchemaUId = GetCardSchemaUId(Guid.Empty, SysModuleEntityId);
    cardSchemaName = GetCardSchemaName(cardSchemaUId);
   }
   var sectionNameUId = GetSectionName(SysModuleEntityId);
   var sectionName = GetCardSchemaName(sectionNameUId);
   var template = string.Empty;
   var formatStr = string.Empty;
   string baseUrl = Terrasoft.Web.Common.WebUtilities
    .GetBaseApplicationUrl(Terrasoft.Web.Http.Abstractions.HttpContext.Current.Request);
   if (sectionName.Contains("V2")) {
    template = "{3}/Nui/ViewModule.aspx#SectionModuleV2/{2}/{0}/edit/{1}";
    formatStr = string.Format(template, cardSchemaName, mainEntityId, sectionName, baseUrl);
   } else {
    template = "{2}/Nui/ViewModule.aspx#CardModule/{0}/view/{1}";
    formatStr = string.Format(template, cardSchemaName, mainEntityId, baseUrl);
   };
   return formatStr;
  }
...
  public virtual string ProcessEmailBody(string body, Guid contactId, byte[] macrosBytes) {
   var url = GetVisaLink();
   body = string.Format(body, url);
...

Как видим, для получения URL в общем случае нужно довольно много вычислений.

 

Ещё пример, в маркете есть БП, который для задач формирует письма-уведомления с гиперссылкой на их карточку.

Зверев Александр, Спасибо, посмотрю!

Показать все комментарии

Изображение удалено.

Нравится

2 комментария
Лучший ответ

Ошибка возникает из-за того, что поле обязательное для заполнение.

0 в числовых полях считается незаполненным значением. Снимите обязательность поля (либо бизнес правило, либо в самом объекте)

Ошибка возникает из-за того, что поле обязательное для заполнение.

0 в числовых полях считается незаполненным значением. Снимите обязательность поля (либо бизнес правило, либо в самом объекте)

Если это числовое поле, то можно переделать в текстовое, при обработке значений придется это учитывать и конвертировать в целочисленное.

Показать все комментарии

Добрый день!

В дизайнере системы есть возможность создать веб-сервис.

Там есть разные варианты аутентификации. Подсажите, пожалуйста, на сервисе пром юа

такая аутентификация Bearer :

`Authorization`:` Bearer 19efbdc8ee723b7eb9e6dae1f7a20ca4378b288c`

где `19efbdc8ee723b7eb9e6dae1f7a20ca4378b288c` - ваш уникальный ключ (токен) авторизации.

Пример запроса:

`https://my.prom.ua/api/v1/products/list?limit=5`

Можно в этом конструкторе так аутентифицироваться? Если да, какой метод использовать из предложенных?

Изображение удалено.

Нравится

4 комментария

В параметрах вызова добавить метод. В методе указать что это Параметр заголовка, код Authorization, значение 19efbdc8ee723b7eb9e6dae1f7a20ca4378b288c.

В вашем варианте авторизация осуществляет просто передачей токена в headers.

Такого способа сейчас стандартно, к сожалению, не предусмотрено. Ранее была зарегистрирована идея о добавлении новых способов авторизации, в том числе и Bearer​​​​​​.

 

По вопросу интеграции с Prom обратите внимание на дополнение, умеющее с ним работать, я писал в соседней теме.

 

Если так, как предложил Евгений, полноценно работает, можно использовать.

 

Полозюков Евгений Петрович,Спасибо, но не совсем. значение надо было указать c припиской метода авторизации, вот так - Bearer 5430b**********315955c2754





Подскажите, п можно как-то процессом обработать ответ (коллекцию). В данном запросе я получил ответ со списком продуктов, могу как-то впроцессе его или обновить или создать, если нет такого?



А какая у Вас версия системы? В 7.16.4 расширили возможности работы с коллекциями:

Добавлена возможность пользовательскими средствами создать параметр процесса типа “Коллекция записей” и настроить его структуру (создать вложенные параметры). Например, параметр “Коллекция записей” можно использовать в следующих случаях:

 

Если при выполнении элемента [Задание сценарий] была сформирована коллекция записей, то можно ее передать в параметр процесса и далее обработать пользовательскими средствами.

 

При запуске бизнес-процесса из C# или JS-кода коллекцию записей можно передать во входящий параметр и обработать в ходе процесса.

 

Данный параметр можно использовать, если необходимо передать коллекцию записей между процессами.

Пример настройки структуры параметра “Коллекция записей”

mi_subprocess_parameters.png

Больше о том, как работать с коллекциями, см. тут и тут

Показать все комментарии

Добрый день, Коллеги!

Подскажите, пожалуйста, какими технологиями\навыками\языками программирования должен обладать программист, чтобы на стороне Creatio интегрировать систему с сайтами клиента, различными программами? 

К примеру настроить интеграцию к новой почте или пром.юа.

Наверно гулпый вопрос, но я не знаю.

Каких знаний требовать от программиста для решения таких задач?

Нравится

4 комментария

Тут всё зависит от сложности и высоконагруженности интеграции. Есть стандартные способы, вообще не требующие программирования: блок «веб-сервис» в БП, позволяющий обратиться к сервисам на других сайтах, и наоборот, поддержка OData, позволяющая извне подключаться к сайту на 7.Х, читать и менять данные в его таблицах.

 

Но если требуется более сложная интеграция, потребуется создание своих сервисов в конфигурации (пишутся на C#), шлюзовых таблиц в базе (понадобится понимание SQL). Или вообще, как сделано в 7.X Marketing для интеграции с рассылками, отдельный сервис, работающий на своём сервере. Или интеграция с почтой Exchange, где применяется Linux, Docker, Kubernetes.

Зверев Александр,

добрый день!

Например к новой почте или пром.юа. Там есть апи для https запросов. На стороне Creatio если писать свой web-сервис, надо знать C# и SQL? C# ответвтление ASP.NET именно?

Если самому писать серверную логику, то нужно на C#. Возможно, получится и готовыми элементами вызова веб-сервиса, но их возможности покрывают не всё.

 

Ещё есть дополнение «ApiX-Drive connector», может, через них получится вообще без разработки. Там на их сайте упомянуты и НП, и Пром.

Интеграция в Apix-Drive

Калушка Д. пишет:

Например к новой почте

Тут пишут, что выпустили к ней коннектор

Показать все комментарии

Добрый день! Недавно задался таким вопросом. А возможно ли в bpm использовать DI, как, например, в ASP.NET? Нагуглить ничего не смог, поэтому обращаюсь сюда.)

Нравится

1 комментарий

Тимофей, в ядре используется, есть пространство Terrasoft.Core.DI. 

В конфигурации примеров его применения нет.

 

Показать все комментарии

Добрый день, коллеги! Подскажите, как правильно реализовать видимость/скрытие кнопки на странице редактирования по условию? Есть очень похожий пример по видимости деталей:

https://community.terrasoft.ru/questions/vidimostskrytie-detali-v-zavis…

но появляется проблема в том, что при формировании страницы сначала формируются кнопки а потом уже поля и их значения и детали, соответственно до отрисовки кнопок невозможно считать, например, "Тип" записи. Подскажите, есть ли варианты решения?

Нравится

1 комментарий
Лучший ответ

Антон, для деталей (а также вкладок, групп полей и ) с 7.16.3 предусмотрено управление видимостью в бизнес-правилах.

 

Но для кнопок такого пока нет, заведена идея.

Антон, для деталей (а также вкладок, групп полей и ) с 7.16.3 предусмотрено управление видимостью в бизнес-правилах.

 

Но для кнопок такого пока нет, заведена идея.

Показать все комментарии

Добрый день, уважаемые коллеги!

Помогите, пожалуйста, решить следующую задачу: в реестре записей мобильного приложения в зависимости от значения определенного поля надо выделять строки жирным шрифтом либо подсвечивать. Т.е. требуется форматирование стиля строки по условию.

Попыталась поискать решение по материалам сообщества, но так и не разобралась, можно ли реализовать такую потребность и каким образом.

https://community.terrasoft.ru/articles/susestvuet-li-v-79-sposob-zadat-cvet-stroke-v-reestre-mobilnogo-prilozenia

https://community.terrasoft.ru/questions/napisanie-stilei-dla-mobilnoi-versii

https://community.terrasoft.ru/articles/kak-v-mobilnoi-versii-prilozenia-vyvesti-dopolnitelnye-kolonki-v-reestra-razdela

 

Подскажите, пожалуйста, понять как работает Terrasoft.util.writeStyles:

  1. можно ли и как в данном случае использовать Terrasoft.util.writeStyles (сложилось впечатление, что стиль определяется для реестра/схемы в целом)?
  2. Если реализация возможна, то на каком типе схемы для реестра надо обращаться к Terrasoft.util.writeStyles ?

Благодарю за помощь

Нравится

4 комментария
Лучший ответ

Марина, это немного нетривиальная задача, но она реализуема.

 

Как подобное можно реализовать. Для этого нужно по сути реализовать свой компонент реестра\грида, расширив базовый компонент list. Именно так сделано в разделе «Лента»\”Feed” (см. MobileFeedList, MobileSocialMessageGridPageView).

  1. Создать свой компонент, расширив базовый list. Например, если нужно менять стиль только основного выводимого поля, то можно реализовать в нем только метод getApplyItemTplPrimaryColumnFn. Что-то типа:

 

Ext.define("Terrasoft.configuration.MyList", {
   extend: "Ext.Terrasoft.List",
   xtype: "cfmylist",
 
   getApplyItemTplPrimaryColumnFn: function() {
      return function(values) {
         var config = this.primaryColumnConfig;
         var value = this.getValueByConfig(config, values);
         var typeId = values["Type"];
         var isRed = false;
         if (typeId === "some_type_value") {
            isRed = true;
         }
         if (value) {
            return "&lt;div class=\"x-list-title\" " + isRed ? "style=\"color: red;\"" : "" + "&gt;" + value + "&lt;/div&gt;";
         }
         return "";
      };
   }
 
});

 

  1. Во view страницы реестра своего раздела указать в качестве используемого компонента свой разработанный компонент из п.1.
Ext.define("Terrasoft.configuration.view.ContactGridPage", {
   extend: "Terrasoft.view.BaseGridPage.View",
   xtype: "contactgridpageview",
   config: {
      grid: {
         xtype: "cfmylist",
      },
   },
  1. Прописать в манифесте в CustomSchemas схему, в которой реализовали свой компонент.

Марина, это немного нетривиальная задача, но она реализуема.

 

Как подобное можно реализовать. Для этого нужно по сути реализовать свой компонент реестра\грида, расширив базовый компонент list. Именно так сделано в разделе «Лента»\”Feed” (см. MobileFeedList, MobileSocialMessageGridPageView).

  1. Создать свой компонент, расширив базовый list. Например, если нужно менять стиль только основного выводимого поля, то можно реализовать в нем только метод getApplyItemTplPrimaryColumnFn. Что-то типа:

 

Ext.define("Terrasoft.configuration.MyList", {
   extend: "Ext.Terrasoft.List",
   xtype: "cfmylist",
 
   getApplyItemTplPrimaryColumnFn: function() {
      return function(values) {
         var config = this.primaryColumnConfig;
         var value = this.getValueByConfig(config, values);
         var typeId = values["Type"];
         var isRed = false;
         if (typeId === "some_type_value") {
            isRed = true;
         }
         if (value) {
            return "&lt;div class=\"x-list-title\" " + isRed ? "style=\"color: red;\"" : "" + "&gt;" + value + "&lt;/div&gt;";
         }
         return "";
      };
   }
 
});

 

  1. Во view страницы реестра своего раздела указать в качестве используемого компонента свой разработанный компонент из п.1.
Ext.define("Terrasoft.configuration.view.ContactGridPage", {
   extend: "Terrasoft.view.BaseGridPage.View",
   xtype: "contactgridpageview",
   config: {
      grid: {
         xtype: "cfmylist",
      },
   },
  1. Прописать в манифесте в CustomSchemas схему, в которой реализовали свой компонент.

Зверев Александр,

 

Александр, огромное спасибо за подробное описание алгоритма с примерами. Стала пытаться реализовать алгоритм и столкнулась с проблемой во 2-м пункте :)

 

В конкретной ситуации рассматривается реестр Контрагентов. Сейчас отображается MobileAccountGridPage, который надо изменить и в коде которого:

Ext.define("AccountGridPage.View", {
	extend: "Terrasoft.view.BaseGridPage.View",
	xtype: "accountgridpage",
	config: {
		id: "AccountGridPage",
		navigationPanel: {
			id: "AccountGridPage_navigationPanel",
			title: LocalizableStrings["AccountGridPage_navigationPanel_title"]
		},
		grid: {
			id: "AccountGridPage_grid",
			iconCls: "user",
			store: "AccountGridPage.Store"
		}
	}
});

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

- расширение от вышеуказанного класса "AccountGridPage.View", но в этом случае возникает ошибка - Uncaught Error: [Ext.Loader] Failed loading 'AccountGridPage/View.js', please verify that the file exists

- расширение от класса "Terrasoft.view.AccountGridPage.View" , возникает ошибка - sencha-touch-all-debug.js:8634 Uncaught Error: [Ext.Loader] Failed loading 'app/view/AccountGridPage/View.js', please verify that the file exists,

- расширение от "Terrasoft.view.BaseGridPage.View", но в этом случае ничего не происходит.

Ext.define("Terrasoft.configuration.view.UsrAccountGridPage", {
 // extend: "Terrasoft.view.AccountGridPage.View", //  Failed loading 'app/view/AccountGridPage/View.js'
 // extend: "AccountGridPage.View", // ошибка Failed loading 'AccountGridPage/View.js
  extend: "Terrasoft.view.BaseGridPage.View", // ничего не происходит
   xtype: "usraccountgridpage",
   config: {
      grid: {
         xtype: "cfmylist",
      },
   }
});

Как правильно выполнить расширение в данном случае? Благодарю за помощь

Можно скопировать текст текущей view (MobileAccountGridPage, если не ошибаюсь), создать свою схему, вставить туда скопированный текст, у свойства grid указать свой новый xtype компонента грида и не забыть указать эту схему в манифесте в свойстве Grid у модели Account.

Зверев Александр,

 

Александр, попробую. Благодарю Вас за ценные рекомендации

Показать все комментарии