Добрый день! 

Вопрос следующий: как редактировать значения в справочнике лукап-поля? К примеру мини-карточка добавления активности. В мастере раздела выяснил что значения берутся из справочника Контакты. Но, в таком случае там отображаются не все контакты, а только какая то часть (!) наших сотрудников. Мне необходимо либо добавить в этот справочник новые значения контактов, либо поменять лукап-поле на другое, но в этом случае, будет проблема при фильтрации сотрудников по колонке Ответственный. Подскажите, пожалуйста, что можно сделать?

 

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

Нравится

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

Добрый день!

 

Вы можете реализовать это с помощью преднастроенных страниц в бизнес-процессах и написанием логики схожей с методом refreshAmount в BaseOrderPage.

 

С уважением,

Юлия Гриценко

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

Всем привет, хотел бы узнать есть ли возможность добавить деталь на мини-карточку или модальное окно, нужно в основном для отображения данных?

Нравится

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

Добрый день.

 

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

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

 

В планах продукта есть задача на реализацию желаемого функционала в будущих версиях. 

Ivan Kuchma,

Такой вопрос, можно ли добавить уже созданную деталь просто на форму мини-карточки при помощи разработки? И обязательно ли создавать под это контейнер с полями tabs?

Глеб Макаров,

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

Детальнее работе с sandbox можете ознакомится в статье: https://academy.terrasoft.ua/docs/7-18/developer/front-end_development/…

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

Выполняется следующий порядок действий:

 

1) Открывается мини-карточка создания объекта Х

2) На мини-карточке есть справочное поле -- переходим к выбору его значений (открывается лукап объекта Y)

3) В лукапе есть кнопка "добавить" -- нажимаем, для добавления объекта Y

 

Происходит странное: лукап закрывается, остается мини-форма создания объекта X, а под ней полноценная карточка создания объекта Y. Это известная проблема? Есть способы ее решения?

Нравится

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

Добрый день!

 

 

Причина описанного Вами поведения в том, что и окно выбора из справочника, и окно мини карточки являются модальными, а два модальных окна подряд открыть нельзя. По этой же причине в базовых мини-карточках нет справочных полей с выбором в окне, а только выпадающие списки. На команде разработчиков есть задача по изменению текущей логики в будущих версиях.

Рекомендуем в мини-карточках использовать для справочников выпадающий список.

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

При открытии мини-карточки раздела и запуска маски, она не блокирует поля мини-карточки, так как находится за ней. Как сделать что бы мини-карточка закрывалась маской во время ее запуска?

Нравится

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

Если "копнуть" и посмотреть, как работает ShowBodyMask, то можно увидеть, что маска применяется к элементу, переданному в конфиге. Если таковой не указан, то к body. Потому для решения Вашей задачи достаточно примерно такой конструкции:

this.showBodyMask({
	selector: "#MiniPageContentContainer"
});

 

Добрый день, Александр!

Опишите, пожалуйста, более детально (возможно на скриншотах или видео) как воспроизводится кейс, который Вы хотите обойти.

ч 

Жмурко Сергей Николаевич,

Есть мини карточка, есть вызов сервиса и ожидание его ответа

. Пока ожидаем, нужно заблокировать карточку от изменений (как это делаем в обычных карточках "MaskHelper.ShowBodyMask()"). Но при вызове "MaskHelper.ShowBodyMask()" блокировку и затенение получаем за миникарточкой а не поверх нее.

Если "копнуть" и посмотреть, как работает ShowBodyMask, то можно увидеть, что маска применяется к элементу, переданному в конфиге. Если таковой не указан, то к body. Потому для решения Вашей задачи достаточно примерно такой конструкции:

this.showBodyMask({
	selector: "#MiniPageContentContainer"
});

 

Если нужно заблокировать и кнопки, то id будет уже AlignableMiniPageContainer

Лопатин Константин,

спасибо большое. В принципе так и пробовал, но упустил что нежно еще слово "Container"

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

Добрый день, подскажите, может кто уже решал этот вопрос.

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

Я добавил новое поле "Следующий платёж" и отражаю его только при указанной категории и выбранном результате активности. Я хочу, чтобы он как и поле "Отложить до" вызывался на мини-версии этой мини-карточки. 

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

Место указал. Подскажите как это делается и почему не отражается. Добавил поле во всех 3-х видах мини-карточки - "Добавление" "Редактирование" и "Просмотр", но не помогло. Куда дальше смотреть не знаю.

Нравится

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

Александр, перезапуск, чистка Redis и кэша браузера не помогли?

Как именно добавили для разных видов?

Зверев Александр, Добавил через мастер раздела, в редактировании мини-карточки сначала. А затем нашёл вот такой код:  

Но и с его помощью получилось добиться лишь такого результата: 

 

То есть поле показывается, но становится не редактируемым. Но если нажать карандашик справа вверху, то там это поле показано как необходимо. Но нужно чтобы оно здесь уже работало. То есть до раскрытия полной мини-карточки.

 

Что Вы имеете в виду под «мини-версией этой мини-карточки», режим просмотра (третий в мастере)?

Если так, то зачем там вообще возможность редактирования?

У Вас проблема, что поля нет или что оно заблокировано?

 

Если открыть в мастере стандартную карточку, например, контакта, видно, что в режиме просмотра нет большинства добавленных в мастере полей, а есть разработанные кодом блоки, например, JobInfoContainer. В схеме ContactMiniPage в пакете UIv2 видно его логику:

{
	"operation": "insert",
	"name": "JobInfoContainer",
	"parentName": "MiniPage",
	"propertyName": "items",
	"values": {
		"id": "JobInfoContainer",
		"visible": {"bindTo": "isViewMode"},
		"selectors": {"wrapEl": "#JobInfoContainer"},
		"itemType": Terrasoft.ViewItemType.CONTAINER,
		"wrapClass": ["jobinfo-mini-wrap"],
		"items": [],
		"layout": {
			"column": 0,
			"row": 10,
			"colSpan": 24
		}
	}
},
{
	"operation": "insert",
	"parentName": "JobInfoContainer",
	"propertyName": "items",
	"name": "JobInViewMode",
	"values": {
		"labelConfig": {
			"visible": false
		},
		"bindTo": "JobViewValue",
		"isMiniPageModelItem": true
	}
},
{
	"operation": "insert",
	"parentName": "JobInfoContainer",
	"propertyName": "items",
	"name": "AccountInViewMode",
	"values": {
		"labelConfig": {
			"visible": false
		},
		"bindTo": "Account",
		"isMiniPageModelItem": true
	}
},
...
/**
 * Job value in view mode.
 * @type {String}
 */
"JobViewValue": {
	"dataValueType": Terrasoft.DataValueType.TEXT,
	"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN
},

В них для чтения отображается либо текст обычного поля (Account), либо вычисляемого при открытии в onEntityInitialized виртуального поля JobViewValue.

 

Для мини-карточки активности, которую дорабатываете, должно быть аналогично.

 

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

 

Или нужно там иметь именно редактирование? Стандартные поля в этом виде карточки тоже все недоступны для изменений?

 

Проверил по стандартным разделам, таких карточек просмотра с редактируемыми полями не встречается.

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

Как из действий CTI панели при запуске бизнес процесса открывать мини карточку?

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

 

Прикрепленные файлы

Нравится

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

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

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

Автогенерируемая страница не подойдет, нужна именно миникарточка.

Если использовать "преднастроенную страницу" и туда указывать мини карточку, то из CTI панели мини карточка не открывается. Просто по нажатию проставляется url типа CallMiniPage/add/GUID и ничего больше не происходит.

А какие-то ошибки при этом пишутся в консоли?

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

Добрый день!

 

А можно ли как-то сделать, чтобы при добавлении записи из раздела не использовалась мини-карточка (а открывалась сразу полноценная), а из других объектов (например, создание контакта из лида) добавлялось с помощью мини-карточки (как и сейчас происходит)?

 

Спасибо!

 

Нравится

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

Здравствуйте! В нужном Вам разделе перейдите в мастер разделов(https://prnt.sc/tr326c), затем уберите галочки(https://prnt.sc/tr32qw) - это что касается первой части вопроса.

Касательно второго, прочтите данное обсуждение

Я бы наоборот. Галочки оставил, но в разделе что-то поменял бы. Так как раздел - это как раз исключение из правила (в остальных многочисленных местах мини-карточка должна работать).

Владимир, в таком случае нужно смотреть, где в коде отрисовки разделов идёт считывание поля MiniPageModes из SysModuleEdit (точнее, из представления VwSysModuleSchemaEdit) и вносить там правку, чтобы для конкретного раздела читало одно, а действовало, как будто бы там другое.

 

Пока нашёл схему ConfigurationSectionHelper, которая генерирует  Terrasoft.configuration.ModuleStructure с информацией о всех разделах, доступной из JS. Возможно, поможет правка в этой схеме в функции GetModuleStructure, где читают свойства каждого зарегистрированного раздела, в том числе и MiniPageModes, и другой функции GetQuickAddConfig в этой же схеме. Вот она:

  /// <summary>
  /// Gets quick add menu items configuration.
  /// </summary>
  /// <param name="userConnection">User connection.</param>
  /// <returns>Quick add menu items configuration.</returns>
  public virtual string GetQuickAddConfig(UserConnection userConnection) {
   Dictionary<Guid, string> quickItems = new Dictionary<Guid, string> ();
   string tpl = @"{{QuickAddMenu: [{0}]}}";
   string itemTpl = @"{{itemId:'{0}',SysEditId:'{1}',name:{2},EditPageName:'{3}',TypeColumnValue:'{4}',TypeColumnName:{5},ModuleName:'{6}',EntitySchemaName:'{7}',miniPageSchema:'{8}',hasAddMiniPage:{9}}}";
   bool useMultilanguageData = !userConnection.GetIsFeatureEnabled("DoNotUseMultilanguageData");
   Select quickAddMenuItemsSelect = GetQuickAddMenuItemsSelect(userConnection);
   using (DBExecutor dbExecutor = userConnection.EnsureDBConnection()) {
    using (IDataReader dataReader = quickAddMenuItemsSelect.ExecuteReader(dbExecutor)) {
     while (dataReader.Read()) {
      Guid itemId = dataReader.GetColumnValue<Guid>("Id");
      Guid sysModuleEditId = dataReader.GetColumnValue<Guid>("SysModuleEditId");
      Guid typeColumnValue = dataReader.GetColumnValue<Guid>("TypeColumnValue");
      string editPageName = dataReader.GetColumnValue<string>("EditPageName");
      string name = dataReader.GetColumnValue<string>("Name");
      string caption = useMultilanguageData ? dataReader.GetColumnValue<string>("Caption") : string.Empty;
      name = Json.Serialize(caption.IsNullOrEmpty() ? name : caption);
      string typeColumnName = Json.Serialize(String.Empty);
      Guid sysEntitySchemaUId = dataReader.GetColumnValue<Guid>("SysEntitySchemaUId");
      string entitySchemaName = dataReader.GetColumnValue<string>("EntityName");
      string moduleName = dataReader.GetColumnValue<string>("ModuleName");
      // TODO CRM-53025
      bool rightLevel = string.IsNullOrEmpty(entitySchemaName) ? true :
       userConnection.DBSecurityEngine.GetIsEntitySchemaAppendingAllowed(entitySchemaName);
      Guid columnUId = dataReader.GetColumnValue<Guid>("TypeColumnUId");
      Guid miniPageSchemaUId = dataReader.GetColumnValue<Guid>("MiniPageSchemaUId");
      string miniPageModes = dataReader.GetColumnValue<string>("MiniPageModes");
      bool hasAddMiniPage = HasSchemaEditAddMiniPage(userConnection, entitySchemaName, miniPageModes);
      if (columnUId != null && columnUId != Guid.Empty) {
       typeColumnName = Json.Serialize(userConnection.EntitySchemaManager.GetInstanceByUId(sysEntitySchemaUId).Columns.GetByUId((Guid)columnUId).Name);
      }
      if (!quickItems.ContainsKey(itemId) && rightLevel) {
       quickItems.Add(itemId, string.Format(itemTpl, itemId, sysModuleEditId, name, editPageName, typeColumnValue, typeColumnName, moduleName, entitySchemaName, miniPageSchemaUId, hasAddMiniPage.ToString().ToLower()));
      }
     }
    }
   }
   var items = string.Join(",", quickItems.Select(x => x.Value));
   return string.Format(tpl, items);
  }

Первую функцию не привожу, она слишком длинная, но суть та же, формируется запрос в базу и из него читаются свойства. В этот момент и можно для конкретного раздела (определив по Id) попробовать подменить результат из базы.

 

Главное, не забыть потом.

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

На текущий момент очень хорошо реализовано создание нескольких страниц редактирования для одного раздела, но для создания записи все так же используется только одна мини-карточка. Было бы отлично если бы реализовали возможность создания нескольких мини-карточек через мастер (так как через привязку в базе данных можно подставить разные мини-карточки на сколько я заметил), тогда для разных страницы можно было бы делать разные миникарточки, и это было супер

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

Здравствуйте, Александр!

Передали данное пожелание команде разработки для анализа возможности внедрения такой возможности в будущих версиях продукта.

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

Добрый день!



Возможно ли реализовать добавление файлов (или хотя бы одного файла) на мини-карточке при создании записи?

Учитывая, что файлы хранятся в детали, а деталь требует уже сохраненной записи, это как-то решаемо по-другому?

Спасибо!

Нравится

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

НУ как то выкрутится конечно можно создать какойто объект к которому прикреплять файлы (сохранять их Id)  и после создания основной записи переприкрпеплять файы к ней.

Есть пример противоположного, мини-карточка со скачиванием из неё файлов.

В Вашем случае, с учётом отсутствия основной записи для привязки к ней записи детали файлов, может, лучше посмотреть в сторону БП с преднастроенной страницей?

 

НУ как то выкрутится конечно можно создать какойто объект к которому прикреплять файлы (сохранять их Id)  и после создания основной записи переприкрпеплять файы к ней.

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

Коллеги, возникло желание (очень справедливое) при создании контакта из лида не вбивать заново информацию, которую уже занесли в систему.

Соответственно, вопрос: как в мини-карточке (второй вопрос - в нормальной карточке) создания нового контакта заполнить поля имеющейся информацией?

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

 

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

Нравится

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

Владимир,

Вы можете воспользоваться кнопкой "Квалифицировать" (скриншот) для автоматической генерации Контакта и Контрагента на основе регистрационных данных (скриншот). Эта кнопка также доступна из реестра записей раздела (скриншот).

Более подробная информация о квалификации лида находится на сайте академии в статье Квалификация лида.

"(очень справедливое)" - справедливости в этом мире нет. Поэтому придётся ручками на странице лида подписываться вот на это сообщениеНу и возвращать список дефолтных значений.



Или по рекомендации выше - жмакать кнопку квалификации и по дефолту сгенерируются контакт и контрагент. И если надо будет изменить набор полей, то придётся допиливать скрипт в бп "квалификация лида", что не комильфо, как по мне.

Соротюк Татьяна пишет:

Вы можете воспользоваться кнопкой "Квалифицировать" (скриншот) для автоматической генерации Контакта и Контрагента на основе регистрационных данных (скриншот). Эта кнопка также доступна из реестра записей раздела (скриншот).

Автоматически генерировать - это хорошо, но не всегда правильно. Хотелось бы перенести это на контролируемый способ, но упростить работу пользователей.



Будем пробовать предложенный вариант. Спасибо!

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