Привет всем !,

возникает ошибка при создании нового раздела,

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



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

Нравится

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": [],
                "wrapClass": ["filters-container-wrapClass"]
	}
},
{
	"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' of undefined
    at constructor.<anonymous> (ProfileUtilities.js:90)
    at constructor.nextStep (commonutils.js:103)
    at commonutils.js:488
    at Object.execCb (require.js:1693)
    at Module.check (require.js:881)
    at Module.enable (require.js:1173)
    at Module.init (require.js:786)
    at require.js:1457
(anonymous) @ ProfileUtilities.js:90
nextStep @ commonutils.js:103
(anonymous) @ commonutils.js:488
execCb @ require.js:1693
check @ require.js:881
enable @ require.js:1173
init @ require.js:786
(anonymous) @ require.js:1457
setTimeout (async)
req.nextTick @ require.js:1812
localRequire @ require.js:1446
requirejs @ require.js:1794
Terrasoft.utils.common.require @ commonutils.js:487
(anonymous) @ ProfileUtilities.js:86
nextStep @ commonutils.js:103
Terrasoft.utils.common.chain @ commonutils.js:106
getSectionDefaultGridSettings @ ProfileUtilities.js:84
initSectionProfile @ ProfileUtilities.js:101
(anonymous) @ ProfileUtilities.js:121
(anonymous) @ commonutils.js:488
execCb @ require.js:1693
check @ require.js:881
(anonymous) @ require.js:1136
(anonymous) @ require.js:134
(anonymous) @ require.js:1186
each @ require.js:59
emit @ require.js:1185
check @ require.js:936
enable @ require.js:1173
init @ require.js:786
(anonymous) @ require.js:1011
(anonymous) @ require.js:134
requestObject.onreadystatechange @ profile.js:39
XMLHttpRequest.send (async)
profileRequest @ profile.js:44
load @ profile.js:50
(anonymous) @ require.js:1092
(anonymous) @ require.js:134
on @ require.js:515
callPlugin @ require.js:953
fetch @ require.js:822
check @ require.js:854
enable @ require.js:1173
enable @ require.js:1554
(anonymous) @ require.js:1158
(anonymous) @ require.js:134
each @ require.js:59
enable @ require.js:1110
init @ require.js:786
(anonymous) @ require.js:1457
setTimeout (async)
req.nextTick @ require.js:1812
localRequire @ require.js:1446
requirejs @ require.js:1794
Terrasoft.utils.common.require @ commonutils.js:487
requireProfile @ ProfileUtilities.js:30
getProfile @ ProfileUtilities.js:113
initSchemaProfile @ SchemaBuilderV2.js:162
nextStep @ commonutils.js:103
(anonymous) @ SchemaBuilderV2.js:156
(anonymous) @ commonutils.js:488
execCb @ require.js:1693
check @ require.js:881
enable @ require.js:1173
init @ require.js:786
(anonymous) @ require.js:1457
setTimeout (async)
req.nextTick @ require.js:1812
localRequire @ require.js:1446
requirejs @ require.js:1794
Terrasoft.utils.common.require @ commonutils.js:487
getEntitySchema @ SchemaBuilderV2.js:94
initSchemaEntitySchema @ SchemaBuilderV2.js:154
nextStep @ commonutils.js:103
(anonymous) @ SchemaBuilderV2.js:142
(anonymous) @ commonutils.js:488
execCb @ require.js:1693
check @ require.js:881
enable @ require.js:1173
init @ require.js:786
(anonymous) @ require.js:1457
setTimeout (async)
req.nextTick @ require.js:1812
localRequire @ require.js:1446
requirejs @ require.js:1794
Terrasoft.utils.common.require @ commonutils.js:487
getSchemaResources @ SchemaBuilderV2.js:89
initSchemaResources @ SchemaBuilderV2.js:140
nextStep @ commonutils.js:103
initSchemaCustomAttributes @ SchemaBuilderV2.js:134
nextStep @ commonutils.js:103
requireSchema @ SchemaBuilderV2.js:114
nextStep @ commonutils.js:103
(anonymous) @ SchemaBuilderV2.js:221
nextStep @ commonutils.js:103
Terrasoft.utils.common.chain @ commonutils.js:106
requireAllSchemaHierarchy @ SchemaBuilderV2.js:219
buildSchemaHierarchy @ SchemaBuilderV2.js:317
(anonymous) @ SchemaBuilderV2.js:286
(anonymous) @ commonutils.js:488
execCb @ require.js:1693
check @ require.js:881
(anonymous) @ require.js:1136
(anonymous) @ require.js:134
(anonymous) @ require.js:1186
each @ require.js:59
emit @ require.js:1185
check @ require.js:936
enable @ require.js:1173
init @ require.js:786
callGetModule @ require.js:1200
completeLoad @ require.js:1587
onScriptLoad @ require.js:1714
core.js:581 user: BPMOutsource2/aa3ba720-d1cd-46f3-9cce-33ccc71e0113
 file: https://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;
});

 

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

Добрый день.

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

В BaseSectionV2 используются атрибуты: "sortColumn", "SortColumnIndex", "GridSortDirection".

Так же в свойствах объекта есть свойство "Сортировка в списках".

Но установка значений этих атрибутов и свойства не решила задачу.

Прошу подсказать как решить данный кейс

Нравится

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

Добрый день

В BaseSection есть метод initQuerySorting, в котором происходит установка колонок сортировки. Возможно вы меняли атрибуты после того, как эта функция отработала. Попробуйте продебажить

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