Добрый день, коллеги! Хотел узнать есть ли возможность переопределить командную строку, чтобы отображать реестр КОНТАКТ не по отображаемому полю ФИО, а по полю МОБИЛЬНЫЙ ТЕЛЕФОН.

 

Попытался переопределить метод getFilters в ContactSectionV2, но при открытие переходит раздела КОНТАКТЫ он вновь сбивает и делает по ФИО. Добавил в раздел КОНТАКТЫ колонку (секцию) МОБИЛЬНЫЙ ТЕЛЕФОН, но все равно переходит на ФИО.

Пример взял отсюда:

https://community.terrasoft.ru/questions/kastomizaciya-stroki-poiska-co…

 

После попробовал переопределить первичную колонку по этому примеру, но при открытие и фильтр отрабатывает корректно, но при открытие любой карточки требует обязательного заполнения МОБИЛЬНЫЙ ТЕЛЕФОН:

https://community.terrasoft.ru/questions/komandnaya-stroka

 

Может кто-то решил подобную проблему?

 

 

 

Нравится

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

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

В указанном вами примере в коде переопределённого метода есть условие на выполнение фильтра 
if (emailFilter && emailFilter.includes("@")). Скорее всего следует копать именно в этом месте, поскольку вместо вашего фильтра используется базовый.  Рекомендую сделать что-то наподоби регулярного выражения на номер телефона, вместо наведённого в примере символа "@".

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

Необходимо убрать кнопку из верхнего меню раздела где написано запустить процесс, оставить эту кнопку нужно только для деталей. Нашел инструкцию по diff, но какое имя у этой кнопки в схеме найти не могу, подскажите где взять имена элементов? И можно ли вообще скрыть кнопку для общего раздела и оставить только для деталей?

Нравится

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

В карточке у кнопки имя "ProcessButton".

В секциях либо "ProcessButton", либо "ProcessRunButton", либо "DataGridRunProcessAction" в зависимости от положения

В карточке у кнопки имя "ProcessButton".

В секциях либо "ProcessButton", либо "ProcessRunButton", либо "DataGridRunProcessAction" в зависимости от положения

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

Всем доброго времени суток.

Есть класс SideBar и я создал модуль NrbSideBarWithCountersModule который наследуется от него. 

define("NrbSideBarWithCountersModule", ["terrasoft", "ext-base"], function() {
	Ext.define("Terrasoft.controls.NrbSideBarWithCountersModule", {
		extend: "Terrasoft.SideBar",
		alternateClassName: "Terrasoft.NrbSideBarWithCountersModule",
		Ext: null,
		sandbox: null,
		Terrasoft: null,
		itemTplMap: [
			"caption",
			"imageUrl",
			"href",
			"domAttributes",
			"availableEntities"
		],
 
		itemTpl: [
			"<tpl if=\"visible != false\">",
			"<li data-item-index=\"{itemIndex}\"",
			"<tpl if=\"isSelected == true\">",
			"class=\"ts-sidebar-selected-item\"",
			"</tpl>",
			">",
			"<span class=\"vertical-strip\"></span>",
			"<tpl if=\"href\"><a target=\"_self\" class=\"sidebar-item-link\" href=\"{href}\"></tpl>",
			"<div id=\"sidebar-item-wrapper-{itemIndex}\" class=\"ts-sidebar-item-wrapper\">",
			"<div id=\"sidebar-item-image-{itemIndex}\" class=\"ts-sidebar-item-image\" data-item-marker=\"{caption}\" " +
			"style=\"background-image:url({imageUrl})\" <tpl foreach=\"domAttributes\">{$}=\"{.}\"</tpl>></div>",
			"<div id=\"sidebar-item-text-{itemIndex}\" class=\"ts-sidebar-item-text\"> {caption} ",
			"<div id=\"sidebar-item-counter-{itemIndex}\" class=\"ts-sidebar-item-counter\"> {availableEntities} ",
			"</div>",
			"</div>",
			"<tpl if=\"href\"></a></tpl>",
			"</li>",
			"</tpl>"
		],
 
	});
	return Terrasoft.NrbSideBarWithCountersModule;
});

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

define("NrbSectionMenuModule", ["ServiceHelper", "NrbSectionMenuModuleResources", "ModuleUtils", "MaskHelper",
		"LeftPanelUtilitiesV2", "CheckModuleDestroyMixin"],
	function (resources, ModuleUtils, ServiceHelper, MaskHelper, LeftPanelUtilities) {
		Ext.define("Terrasoft.configuration.NrbSectionMenuModule", {
			alternateClassName: "Terrasoft.NrbSectionMenuModule",
			override: "Terrasoft.SectionMenuModule",
			render: function (renderTo) {
				if (!Ext.isEmpty(viewModel) && !Ext.isEmpty(sideBar)) {
					sideBar.destroy();
				}
				sideBar = Ext.create("Terrasoft.NrbSideBarWithCountersModule", Terrasoft.deepClone(sideBarConfig));
				sideBar.bind(viewModel);
				sideBar.render(renderTo);
				MaskHelper.HideBodyMask();
			},
			getSideBarItems: function () {
				var config = [];
				var moduleStructure = Terrasoft.configuration.ModuleStructure;
				var modules = info && info.modules ? info.modules : Object.keys(moduleStructure);
				if (!modules) {
					return;
				}
				var availableSections = info.AvailableSections;
				var defaultIconUrl = Terrasoft.ImageUrlBuilder.getUrl(resources.localizableImages.DefaultIconSvg);
				modules.forEach(function (module) {
					if (module.moduleId !== Terrasoft.GUID_EMPTY) {
						var moduleName = module.moduleName ? module.moduleName : module;
						var moduleConfig = moduleStructure[moduleName];
						if (moduleConfig.hide !== "true") {
							if (!Ext.isArray(availableSections) || availableSections.indexOf(moduleName) >= 0) {
								var caption = moduleStructure[moduleName].moduleCaption;
								var tag = ModuleUtils.getModuleTag(moduleName);
								var imageId = moduleStructure[moduleName].imageId;
								var imageUrl = imageId ? getImageUrl(imageId) : defaultIconUrl;
								var itemUrl = Terrasoft.workspaceBaseUrl + "/Nui/ViewModule.aspx#" + tag;
								var count = this.getCountOfAvailableProjects();
								var itemConfig = {
									caption: caption,
									tag: tag,
									imageUrl: imageUrl,
									href: itemUrl,
									domAttributes: { "module-name": module.moduleName },
									availableEntities: count
								};
								if (!Terrasoft.Features.getIsEnabled("SectionMenuLink")) {
									itemConfig.href = null;
								}
								config.push(itemConfig);
							}
						}
					}
				});
				return config;
			},
 
			getCountOfAvailableProjects: function () {
				var requestConfig = {
					serviceName: "NrbProjectCounterService",
					methodName: "GetNumberOfAvailableProjects",
					callback: this.showResult
				};
				this.callService(requestConfig, this);
			},
 
			showResult: function (result) {
				console.log(result);
			},
		});
 
		return Terrasoft.NrbSectionMenuModule;
	});

Переопределение не даёт нужного результата и возник такой вопрос. Правильно ли тут использовать переопределение или лучше использовать наследование? 
И как я понял мне надо будет переопределить все модули которые взаимодействовали с SectionMenuModule и поменять на NrbSectionMenuModule?

Нравится

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

Модули не замещаются как карточки. То что создали свой модуль NrbSideBarWithCountersModule это ваш модуль. А левую панель так и продолжает выводить SectionMenuModule.

Динар, для того, чтобы Ваш класс заменил стандартный, нужно в нём указать override и название того, что он замещает. А затем упомянуть название Вашего модуля в замещённом BootstrapModulesV2, который загружается при старте. Более подробно о таком подходе см. пример в этой теме.

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

Требуется создать на пункте левого меню Проекты счётчик доступных текущему пользователю проектов.

Под доступными подразумеваются те проекты, которые удовлетворяют следующим условиям (фиксированным фильтрам раздела + права + статусы):

Ответственный = текущий пользователь

И

текущий пользователь имеет права на чтение

И

Состояние проекта не равно (Завершён, Отменён)

 

Выглядеть должно следующим образом.

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

 

Нравится

5 комментариев

Не факт что туда можно влезть. Левую панель с разделами отрисовывает модуль SideBarModule.

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

Уже есть настроенный показатель «Активных проектов», можно изменить его условие фильтрации:

Или ещё проще, настроить динамическую группу с нужным фильтром, включить в разделе итог «Отображать количество записей» и при нахождении внутри группы над реестром будет видно интересующее число.

Зверев Александр, Спасибо за предложение, но всё-таки мне требуется выводить это число в панели разделов

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

Динар, кажется, придумал ещё один способ.

Из JS доступна структура Terrasoft.configuration.ModuleStructure, где хранится информация по разделам, в том числе и названия. Если там вручную из консоли браузера сменить название, дописав цифру, то при обновлении перечня разделов, например, при смене рабочего места, она появится. Можно менять её программно, а потом вызывать перестройку списка разделов, как при смене рабочего места. Эта структура генерируется на серверной стороне в схеме ConfigurationSectionHelper.

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

Есть необходимость записывать в объект File поля Name и Notes через всплывающее окно. Не могу определить что нужно использовать, ModalBox или MiniPage. Вкратце задача состоит в том, чтобы при вводе поля Name генерировать ссылку и записывать её в поле Notes. 

Получилось создать ModalBox, но не удалось найти как сохранять поля в базу данных, также как через метод this.save(); в BasePage.

А вызывать MiniPage своей же кнопкой, совсем не удалось

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

Нравится

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

Здравствуйте, Илья!

 

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

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

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

 

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

 

По умолчанию используются следующие цвета:

- синий - для запланированных визитов;

- серый - для завершённых и отменённых;

- оранжевый - для просроченных.

 

Я же хочу эту цветовую схему изменить, сделав выполненные визиты зелёными, чтобы отличались от отменённых.

 

Нравится

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

В ядре, в scedule-item.js есть функция GetStatusCls, которая в зависимости от статуса выдаёт нужный CSS-стиль. Там для завершённого и отменённого и так разные стили: x-cancel и x-done. Цвет одинаковый, но у первого текст перечёркивается. Для изменения цветов можно на вкладке LESS переопределить нужные стили, как описывается тут или тут.

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

 

Этот файл только из файловой системы доступен? А то у нас облако, а в списке схем конфигурации не нахожу такого.

 

Это файл ядра, в конфигурации его нет.

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

Доброго времени суток

Создал замещающую схему для Section base schema ( NUI ) в новом пакете (не Custom). В схеме добавляется фильтр для EntitySchemaQuery через esq.filters.addItem(). Фильтр рабочий, т.к. проверялся на локальной машине с последующим пушем на препрод.

На препроде фильтр не работает. Вероятно, не хватает какой-то генерации или чего-то еще. Но вопрос, чего именно.

Я делал генерацию source code для выбранного файла, в котором прописан скрипт, делал генерацию для модифицированных, в общем, я по очереди делал все виды генераций и после этого компилил. Результата нет.

Нравится

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

Добрый день.

Попробуйте выполнить компиляцию всей конфигурации через меню [Скомпилировать все].

Если после этого фильтр не заработает, попробуйте отладиться и посмотреть, какие ошибки возникают в консоли.

Добрый день.

Попробуйте выполнить компиляцию всей конфигурации через меню [Скомпилировать все].

Если после этого фильтр не заработает, попробуйте отладиться и посмотреть, какие ошибки возникают в консоли.

Попробуйте очистить кэш браузера или проверить в другом броузере или в приват моде, проверьте наличие ошибок в консоли браузера

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

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

Например, убрать кнопки (Открыть, Копировать) по нажатию на элемент, вывести несколько элементов в строке и т.д.

Возникает вопрос - как отменить базовые стили раздела (т.к. они применяются еще и к тэгам)? Как убрать названия и кнопки и т.д.?

Нравится

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

Андрей, здравствуйте! 

Вам необходимо переопределять базовые стили, которые есть в различных схемах. Например, схема "SectionModuleV2" или "CommonCSSV2" (вкладка LESS)

Похожие топики можете поискать на community - https://community.terrasoft.ru/search?search_api_fulltext=%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C+%D1%81%D1%82%D0%B8%D0%BB&field_tags=&sort_by=search_api_relevance

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

Добрый день.

Прошу помощи, т.к. сама не сильно разбираюсь в данном вопросе. Если код корявый, подскажите как поправить, я новичок в этом.
Задача была поставлена следующая, в разделе "Обращения" выделить записи просроченные по реакции или по разрешению. Я добавила в методы схемы Section page schema - Cases, код:

                prepareResponseCollectionItem: function(item) {
                        this.callParent(arguments);
                        item.customStyle = null;
                        //var running = item.get("ResponseOverdue");
                        if (item.values.ResponseOverdue) {
                                item.customStyle = {"background": "#EB3D51"};
                        }
                        //var running = item.get("SolutionOverdue");
                        if (item.values.SolutionOverdue) {
                                item.customStyle = {"background": "#EB3D51"};
                        }
                }

Записи выделились, но отображается только под моим пользователем, как сделать что бы это видели все?

У нас стоит service enterprise версии 7.8.1

Нравится

5 комментариев

Пускай другие пользователи почистят кеш браузера и перезайдут на сайт ;)

Максим, спасибо, Вы навели меня на мысль, что записи подсветятся только если эти колонки выведены в реестр. Это подтвердилось.
У пользователей, колонки Просрочен по реакции и по разрешению не выведены в реестр, можно сделать выделение, не зависящем от отображения этих колонок в реестре?

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

Добрый день.
У меня колонки выведены, далее не делала.

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

1) Заместить схему секции.
2) Переопределить метод initQueryColumns.
3) В замещающем методе в параметр esq добавлять нужную колонкую

Пример:

initQueryColumns: function(esq) {
	this.callParent(arguments);
        // проверка на присутствие необходимой колонки в esq
	entitySchemaQuery.addColumn("имя колонки");
},
Показать все комментарии

Добрый день, друзья!
Есть необходимость вести учет занятости кабинетов предприятия (по аналогии с переговорками), с получением итогов - какие кабинеты больше используются.
У меня возникла идея создать кастомный тип активности "Кабинет", и привязать к нему 10 кабинетов, каждый из которых, является категорией данного типа с именем "Кабинет №1", "Кабинет №2" и .т.д.
Таким образом можно создавать в расписании эти активности, перетаскивать их и динамическими группами смотреть загрузку по кабинетам.
Однако я предвижу проблему, что разные пользователи смогут накладывать на одно и то же время активности одинаковой категории и может возникнуть путаница.
Подскажите, может я изобретаю велосипед, и все можно решить иначе и проще.
Спасибо!

Нравится

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

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

Спасибо

А почему просто не создать контакт с названием "Кабинет 1" и т.д. и добавлять его в деталь "участники активности". Тогда при фильтрации по отвественному "Кабинет 1" можно смотреть расписание, когда кабинет занят, а когда свободен. Также можно в последующем выстраивать аналитику по загруженности кабинетов.

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