Вопрос

Хочу отловить двойной клик по записи в разделе.

Зачем - раздел отформатирован специальным образом (стилями) и кнопки туда добавлять нельзя, а действие сделать нужно.

Вопрос как?

У меня такой же вопрос

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

Добрый день. В 7.13 или 7.13.1 это есть уже в коробке. Можете посмотреть, как реализовано там. Работает и в разделах, и в деталях.

 

Проверьте метод onGridDoubleClick, возможно это то, что вам нужно

Пример работы с этим методом есть на детали «Пользователи» раздела «Организационные роли». По двойному клику открывается карточка пользователя. Логика реализована в схеме UsersDetailV2.

Добрый день. В 7.13 или 7.13.1 это есть уже в коробке. Можете посмотреть, как реализовано там. Работает и в разделах, и в деталях.

 

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

Привет всем !,
возникает ошибка при создании нового раздела,
Ошибка: Ссылка на объект не указывает на экземпляр объекта..

У меня такой же вопрос

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

1. Какой пакет у Вас указан в системной настройке 'CurrentPackageId'?

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

Алла Савельева, 
1. Значение по умолчанию: Custom
2. Права Системного Администратора

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

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

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

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

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

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

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

Как можно в bpm'online перевести кроме элементов интерфейса на несколько языков еще и данные?
Необходимо отображать на языке пользователя некоторые поля справочников (Name, Description), а также некоторые поля разделов (например, названия, описания сервисов или продуктов)

У меня такой же вопрос

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

В схеме таблицы для тех полей, которые хотите локализировать, установить признак 'Локализируемый текст' (Localizable Text):

 

По умолчанию для таблиц, которые наследованы от Base lookup, для полей Name и Description эти признаки уже установлены.

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

Для примера на скриншоте ключ выглядит следующим образом: Data:Contact.OfficialName:82d21f9f-4cec-4ff7-aeee-9255cc4f37f3. Contact - это название таблицы, OfficialName - название локализируемого поля, 82d21f9f-4cec-4ff7-aeee-9255cc4f37f3 - Id записи в таблице Contact, для которой делается перевод.

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

В схеме таблицы для тех полей, которые хотите локализировать, установить признак 'Локализируемый текст' (Localizable Text):

 

По умолчанию для таблиц, которые наследованы от Base lookup, для полей Name и Description эти признаки уже установлены.

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

Для примера на скриншоте ключ выглядит следующим образом: Data:Contact.OfficialName:82d21f9f-4cec-4ff7-aeee-9255cc4f37f3. Contact - это название таблицы, OfficialName - название локализируемого поля, 82d21f9f-4cec-4ff7-aeee-9255cc4f37f3 - Id записи в таблице Contact, для которой делается перевод.

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

Спасибо!

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

А как все уже существовавшие записи добавить для перевода?

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

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

Привет всем !
Кто нибудь знает как убрать обязательное заполнение поля Ответственный в разделе Аналитика при выборе фильтров для построения отчета ?

У меня такой же вопрос

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

Сначала нужно найти схему этой страницы, как описано тут. Затем в ней смотреть, как сделано это поле. У меня такого отчёта по счетам нет, а в отчёте по задачам поле «Ответственный» выглядит так же, но не является обязательным, отчёт строится и с пустым.

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

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

 

 

У меня такой же вопрос

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

Такие отчёты привязываются к разделу записями в SysModuleAnalyticsReport, где в полях указаны Id схемы отчёта и схемы его параметров. Для этого отчёта окно параметров задаётся в ContactAnniversariesReportFilter.

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

Спасибо, я разобрался и сделал такую же страницу в разделе котором мне нужно.

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

Всем привет!

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

У меня такой же вопрос

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

Здравствуйте!

По функциональной части: рекомендую переопределить в Section метод getFilters и там в зависимости от выбранного фильтра в разделе добавлять или удалять фильтры.

По части отображения: добавить свой контейнер в фильтры.

Вот пример для добавления галочки в раздел фильтров:

{
	"operation": "insert",
	"name": "CustomContainer",
	"parentName": "LeftGridUtilsContainer",
	"propertyName": "items",
	"index": 0,
	"values": {
		"id": "CustomContainer",
		"itemType": this.Terrasoft.ViewItemType.CONTAINER,
		"items": []
	}
},
{
	"operation": "insert",
	"name": "CustomFlag",
	"parentName": "CustomContainer",
	"propertyName": "items",
	"values": {
		"caption": {
			"bindTo": "Resources.Strings.CustomFlagCaption"
		},
		"bindTo": "CustomAttribute",
		"controlConfig": {
			"className": "Terrasoft.CheckBoxEdit",
			"checkedchanged": {
				"bindTo": "onCustomFlagChanged"
			}
		}
	}
}

UPD: Точно, ещё для того, чтобы фильтр применялся после изменения фильтра в разделе необходимо в приведённом выше примере в методе onCustomFlagChanged инициировать обновление реестра (this.reloadGridData();).

Так же на момент вызова метода getFilters аттрибут CustomAttribute не изменял своего значения, поэтому был введён новый аттрибут, значение которого менялось так же в методе onCustomFlagChanged.
И, есть вероятность, что придётся помучиться со стилями для того, чтобы фильтр отображался адекватно, при необходимости могу поделиться кодом опять-таки для примера выше.

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

Добрый день!

Был создан обьект как справочник унаследован от (базовый справочник (base))

и мног где использовался в других обьектах

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

(BPM 7.11)

Собственно вопрос как это сделать из справочника раздел?

У меня такой же вопрос

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

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

Для того, чтоб справочник можно было отобразить как раздел, необходимо создать соответствующие связи в системных таблицах SysModule, SysModuleEdit, SysModuleEntity. Так как у базовых разделов есть схема карточки редактирования и схема раздела, ниже алгоритмы по созданию и регистрации данных схем.

1) Создание страницы редактирования

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

Либо создать по аналогии как в справочнике «Источник лида» (см. Схему «LeadSourcePageV2»).

Либо же попробовать вручную (см. приближенный пример, который по необходимости нужно «дебажить»):

Создаем схему модели представления карточки, наследуемся от «BaseModulePageV2» вводя ее имя заголовка в поле «родительский объект», в разных конфигурациях может быть переведена по-разному, в нашем примере это «Страница активности V2».

Заполняем ее нужными полями, в нашем примере только Name, а объект в нашем примере называется «UsrAccStage»:

define("UsrAccStagePageV2", ["AccountPageV2Resources", "GeneralDetails"],
function(resources, GeneralDetails) {
    return {
        entitySchemaName: "UsrAccStage",
        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
        diff: /**SCHEMA_DIFF*/[
               {
                "operation": "insert",
                "name": "Name",
                "parentName": "Header",
                "propertyName": "items",
                "values": {
                       "bindTo": "Name",
                       "layout": {
                           "column": 0,
                           "row": 0,
                           "colSpan": 12
                      }
                }
            }
        ]/**SCHEMA_DIFF*/,
        attributes: {},
        methods: {},
        rules: {},
        userCode: {}
    };
});

Далее нашей целью является зарегистрировать связь страницы редактирования в базе данных в таблице «SysModuleEdit» через развязочную таблицу «SysModuleEntity» с сущностью объекта, в котором хранится информация. В нашем случае «UsrAccStage». Листинг SQL приводим ниже:

SELECT * FROM SysSchema Where Name = 'UsrAccStagePageV2'
-- UId карточки редактирования = 064A98B5-E6FE-47E7-B9A6-499561BD1347

SELECT * FROM SysSchema Where Name = 'UsrAccStage"

-- колонка UId объекта = E894EBA6-9FBB-4AA7-90E4-6A99B6CD5329
-- проверяем развязочную таблицу

SELECT * FROM SysModuleEntity
WHERE SysEntitySchemaUId = 'E894EBA6-9FBB-4AA7-90E4-6A99B6CD5329'

-- если нет там записи, добавляем:
INSERT INTO SysModuleEntity (SysEntitySchemaUId) VALUES ('E894EBA6-9FBB-4AA7-90E4-6A99B6CD5329')

-- проверяем развязочную таблицу

SELECT * FROM SysModuleEntity
WHERE SysEntitySchemaUId = 'E894EBA6-9FBB-4AA7-90E4-6A99B6CD5329'

-- берем от туда Id = 671F61D8-2E72-47A4-95C7-D67E2C8B723F
INSERT INTO SysModuleEdit (SysModuleEntityId, CardSchemaUId, ActionKindCaption, ActionKindName, PageCaption) VALUES ('671F61D8-2E72-47A4-95C7-D67E2C8B723F', '064A98B5-E6FE-47E7-B9A6-499561BD1347', 'Добавить нашу сущность',
'UsrAccStage','Стадия контрагента')

SELECT * FROM SysModuleEdit WHERE SysModuleEntityId = '671F61D8-2E72-47A4-95C7-D67E2C8B723F'

2) Вопрос по регистрации схемы раздела и самого раздела уже обсуждался на комьюнити (например, https://community.terrasoft.ru/node/26721)

 

Одеяненко Юлия,

Спасибо за оперативность. Пробую.

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

Добрый день.

Хочу создать раздел из детали Средство связи контакта (ContactCommunication) для того, чтобы было удобно делать экспорт в excel (по сути мне не хватает поля Id контакта при экспорте из справочника).

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

Заранее благодарен.

Станислав

У меня такой же вопрос

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

По идее, ничего страшного не должно случиться. Можно создавать разделы на основе существующих объектов, правда, не стандартным образом. Но тем не менее, всё нормально работает. Это всего лишь объект с данными.

Кузнецов Сергей,

Понял, большое спасибо.

Кузнецов Сергей,

Ковынёв Станислав,

Подскажите, пожалуйста, есть ли гайд по такой переделке?

Добрый день. Вот здесь описано: https://community.terrasoft.ru/questions/rucnaa-registracia-razdela

 

А если Вам не срочно - terrasoft обещают сделать это функцию в ближайших релизах (на счет сроков не подскажу):
https://academy.terrasoft.ru/documents/upcoming-releases?_ga=2.22342261…

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

Пытаюсь отсортировать активности по дате начала и получаю вот что:

Никаких дополнений в код секции не вносилось. Версия 7.11.2 Sales Enterprise + Marketing

У меня такой же вопрос

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

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

 

Данная проблема была решена в версии 7.12.0 

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

А есть ли способ проще? Например, сделать замещающую схему и что-то в нее внести?

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

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

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

Возникла необходимость доработать раздел шаблонов email сообщений. Добавил замещающую схему для раздела и страницы. Если входить в раздел из справочников, то всё работает нормально, но если зайти в раздел напрямую из меню разделов, то страница падает с ошибкой 

Uncaught TypeError: Cannot read property 'primaryDisplayColumn'//msk10crm3.simple.ru:886/0/configuration/69de87c92ca4b610d0b1c9948902105fru-RU/ProfileUtilities.js
 line: 90
 column: 45
 message: Uncaught TypeError: Cannot read property 'primaryDisplayColumn' of undefined 
 date: Tue Dec 19 2017 19:47:38 GMT+0300 (Russia TZ 2 Standard Time)
 stack: TypeError: Cannot read property 'primaryDisplayColumn' of undefined
    at constructor.<anonymous> (https://msk10crm3.simple.ru:886/0/configuration/69de87c92ca4b610d0b1c9948902105fru-RU/ProfileUtilities.js:90:45)
    at constructor.nextStep (https://msk10crm3.simple.ru:886/0/core/hash/Terrasoft/utils/common/commonutils.js:103:10)
    at https://msk10crm3.simple.ru:886/0/core/hash/Terrasoft/utils/common/commonutils.js:488:12
    at Object.execCb (https://msk10crm3.simple.ru:886/core/c3a883e5c39cffb863b2f781f396c705/requirejs/require.js:1693:33)
    at Module.check (https://msk10crm3.simple.ru:886/core/c3a883e5c39cffb863b2f781f396c705/requirejs/require.js:881:51)
    at Module.enable (https://msk10crm3.simple.ru:886/core/c3a883e5c39cffb863b2f781f396c705/requirejs/require.js:1173:22)
    at Module.init (https://msk10crm3.simple.ru:886/core/c3a883e5c39cffb863b2f781f396c705/requirejs/require.js:786:26)
    at https://msk10crm3.simple.ru:886/core/c3a883e5c39cffb863b2f781f396c705/requirejs/require.js:1457:36

Также возникла проблема при попытке скрыть действие активной строки в зависимости от значения атрибута на странице. Если привязать видимость действия к атрибуту, то оно вообще перестаёт отображаться вне зависимости от его значения. Значение атрибута определяется при помощи запроса к сервису, сам метод вызывает из onRender. 

//attributes
            CanAddOrEdit: {
                type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                dataValueType: Terrasoft.DataValueType.BOOLEAN,
                value: false
            },
//diff
            {
                "operation": "merge",
                "name": "DataGridActiveRowCopyAction",
                "values": {
                    "visible": {"bindTo": "CanAddOrEdit"}
                }
            }

Кто-то либо сталкивался с подобными проблемами?

У меня такой же вопрос

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

Добрый день!
На счет первого вопроса: можете уточнить что именно вы дорабатывали, т.к. не совсем ясен характер ошибки. Если можете - представьте ваш код раздела шаблонов email.

А на счет второго вопроса - сложность в том, что строчка реестра - это чаще всего BaseSectionGridRowViewModel (если он для раздела не переопределен) и он не видит атрибуты и методы, которые определены в разделе. Для того, чтобы переопределить свой SectionGridRowViewModel необходимо для начала сообщить разделу, что у него будет другой SectionGridRowViewModel, переопределив метод в разделе:

getGridRowViewModelClassName: function() {
	return "Terrasoft.UsrEmailTemplateSectionGridRowViewModel";
}

В данном примере имя одной строки раздела будет определено как UsrEmailTemplateSectionGridRowViewModel. diff остается такой же, как указан у вас.

После этого необходимо уже непосредственно создать обьект UsrEmailTemplateSectionGridRowViewModel, который должен расширять базовый BaseSectionGridRowViewModel. В нем же и нужно определить тот метод (либо атрибут) CanAddOrEdit, который и будет вызываться при выборе строчки реестра. Для примера, если у нас есть метод, который будет определять видимость кнопки, то обьект выглядит примерно так:

define("UsrEmailTemplateSectionGridRowViewModel", ["ext-base",
	"terrasoft", "BaseSectionGridRowViewModel"],
	function(Ext, Terrasoft) {
 
	Ext.define("Terrasoft.configuration.UsrEmailTemplateSectionGridRowViewModel", {
		extend: "Terrasoft.BaseSectionGridRowViewModel",
		alternateClassName: "Terrasoft.UsrEmailTemplateSectionGridRowViewModel",
		CanAddOrCopy: function() {
			var result = ... //логика для определения видимости кнопки
			return result;
		}
	});
	return Terrasoft.UsrEmailTemplateSectionGridRowViewModel;
});

Таким образом можно методом или атрибутом управлять видимостью кнопок действий для активной строки.

Напишите, получилось ли у вас и уточните более подробно на счет первого вопроса, будем разбираться :)

Золотарев Артем Андреевич, Ошибку с замещением удалось исправить, проблема была в том, что в коде замещающей схемы не было явно указано значение entitySchemaName.

Спасибо за пример со строками реестра. Он заработал. Но у меня такой вопрос, как можно задать значение извне или самой RowViewModel взять его? У меня возможность добавлять, изменять или копировать определяется единоразово при обращении к сервису. Не хотелось бы делал вызов к сервису при клике на каждую строку.

В общем, удалось сделать через статические методы класса. Для моего случая достаточно и такой реализации. И соответственно, надо вызвать в коде реестра установку значения.

define("SxEmailTemplateSectionGridRowViewModel", ["ext-base",
    "terrasoft", "BaseSectionGridRowViewModel"],
    function(Ext, Terrasoft) {
 
    Ext.define("Terrasoft.configuration.SxEmailTemplateSectionGridRowViewModel", {
        extend: "Terrasoft.BaseSectionGridRowViewModel",
        alternateClassName: "Terrasoft.SxEmailTemplateSectionGridRowViewModel",
        statics: {
            _canAddOrEdit: false,
            setCanAddOrEdit: function(value) {
                _canAddOrEdit = value;
            },
            getCanAddOrEdit: function() {
                return _canAddOrEdit;
            }
        },
        getCanCopy: function() {
            return Terrasoft.SxEmailTemplateSectionGridRowViewModel.getCanAddOrEdit();
        }
    });
    return Terrasoft.SxEmailTemplateSectionGridRowViewModel;
});

 

Войдите или зарегистрируйтесь, чтобы комментировать