Раздел создан сторонним пользователем

ошибка вылетает в методе, когда он пытается обратиться к элементу name контейнера в файле all-combined.js

needFlatten: function(e, t) {
        var a = t || !1;
        return (a = !Ext.isEmpty(e.name)) || (Ext.isArray(e) && e.length > 0 ? a = !Ext.isEmpty(e[0].name) : Ext.isObject(e) && Terrasoft.each(e, function(e) {
            a = this.needFlatten(e, a)
        }, this)),
        a
    },

трэйс начинается условно от ViewModelSchemaValidationMixin.js в методе getSchemaDuplicates 

здесь соотвественно всё останавливается на методе Terrasoft.JsonDiffer.getFlatObject

getSchemaDuplicates: function(schema) {
				const viewConfig = schema.viewConfig;
				const messageConfig = {};
				const result = [];
				const pathDelimiter = Terrasoft.JsonDiffer.pathDelimiter;
				const flatViewConfig = Terrasoft.JsonDiffer.getFlatObject(viewConfig, {identifyItemByPath: true});
				Object.keys(flatViewConfig).forEach(function(path) {
					const name = path.split(pathDelimiter).pop();
					const formattedPath = path.split(pathDelimiter).join(".");
					const diffObject = flatViewConfig[path];
					const caption = diffObject.caption ||
						(diffObject.labelConfig && diffObject.labelConfig.caption) ||
						"";
					messageConfig[name] = messageConfig[name] || [];
					messageConfig[name].push({
						path: formattedPath,
						caption: caption
					});
				});
				Object.keys(messageConfig).forEach(function(name) {
					if (messageConfig[name].length > 1) {
						result.push({
							name: name,
							items: messageConfig[name]
						});
					}
				});
				return result;
			},

В чем может быть причина? И буду рад советами по отладке такого клиентского кода, когда я пытался в all-combined.js ставить брэйкпоинты, у меня словно всё зависало просто

Нравится

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

Посмотрите тут и тут

Григорий Чех,

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

"contentType": Terrasoft.ContentType.DROPDOWN

после того, как закомментировал его, всё заработало. Только теперь я не могу найти что это за свойство и какие значения оно может принимать помимо DROPDOWN и есть ли вообще у него такое значение?

{
	"operation": "insert",
	"name": "ITExecutor",
	"values": {
		"enabled": false,
		"layout": {
			"contentType": Terrasoft.ContentType.DROPDOWN,
			"colSpan": 12,
			"rowSpan": 1,
			"column": 12,
			"row": 0,
			"layoutName": "Header"
				  },
		"bindTo": "ITExecutor"
				},
	"parentName": "Header",
	"propertyName": "items",
	"index": 1
}

 

Григорий Чех,

разобрался. свойство "contentType" должно находится внутри "values", а не "layout"

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

Добрый день!
Я создал в настройках пользователя CheckBox

который сохраняет в таблицу UsrTakeMail уникальный идентификатор пользователя (GUID) и значение моего CheckBox (Flag)

Существует процесс "Отправка email сообщения группе о назначении обращения"
В нём есть блок задание-сценарий "Prepare Recipient Emails"

var emailSelect = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "SysAdminUnit");
var emailColumn = emailSelect.AddColumn("Contact.Email");
var groupId = ReadCaseData.ResultEntity.GetTypedColumnValueGuid>("GroupId");
emailSelect.Filters.Add(emailSelect.CreateFilterWithParameters(FilterComparisonType.Equal, "[SysUserInRole:SysUser].SysRole", groupId));
var collection = emailSelect.GetEntityCollection(UserConnection);
IsNeedSendEmail = collection.Count > 0;
RecipientEmails = string.Empty;
foreach(var entity in collection) {
        var email = entity.GetTypedColumnValuestring>(emailColumn.Name);
        if (!string.IsNullOrEmpty(email)) {
                RecipientEmails += string.Format("{0};", email);
        }
}
return true;

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

Проблема:
Для того чтобы сделать замещающий бизнес-процесс я скопировал процесс "Отправка email сообщения группе о назначении обращения".
Отключил основной процесс через кнопку действия
Но при попытке создать обращение, видно что в журнале процессов выполняется основной процесс а не замещенная копия.
Подскажите что я делаю не так?

Нравится

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

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

Процесс "Отправка email сообщения группе о назначении обращения" вызывается в процессе "Запуск процесса Отправка email сообщения группе о назначении обращения". Для решения вам необходимо:
1) Скопировать процесс "Запуск процесса Отправка email сообщения группе о назначении обращения"
2) Изменить логику копии, чтобы запускался созданный вами процесс
3) Отключить процесс "Запуск процесса Отправка email сообщения группе о назначении обращения"

В результате базовый процесс запускаться не будет.

"Демьяник Алексей" написал:

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

Процесс "Отправка email сообщения группе о назначении обращения" вызывается в процессе "Запуск процесса Отправка email сообщения группе о назначении обращения". Для решения вам необходимо:

1) Скопировать процесс "Запуск процесса Отправка email сообщения группе о назначении обращения"

2) Изменить логику копии, чтобы запускался созданный вами процесс

3) Отключить процесс "Запуск процесса Отправка email сообщения группе о назначении обращения"

В результате базовый процесс запускаться не будет.

Большое спасибо! Получилось!
Только нужно уточнить 2 пункт:
В скопированном запуске процесса необходимо изменить GUID процесса который он будет запускать.
GUID процесса можно узнать в строке браузера, зайдя в сам процесс.

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

SysUserInRole - потрібно завести архів ролей користувача, щоб можна було визначити чи входив користувач до складу підрозділу в заданий період.

Створив супутній об'єкт [SysUserInRoleHistory] для того, щоб у нього писати вилучені ролі користувача.
Далі спробував створити обробник для SysUserInRoleDeleting, але при натисненні відповідної кнопки обробник не створився.

Перевірив для декількох таблиць типу [Sys*] - ситуація аналогічна.

В самому об'єкті присутні повідомлення
SysUserInRoleInserted
SysUserInRoleSaving
SysUserInRoleSaved
SysUserInRoleDeleting

Але, як вже написав, при натисненні кнопки переходу до відповідного обробника в дизайнері процесів нічого не створюється. Спробував створити обробники вручну - не спрацьовують.

Як вийти з положення?

Нравится

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

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

А почему не отслеживать изменения не через обработчик событий объекта, а через обычный бизнес процесс?

Начальный элемент - сигнал по событию добавления/изменения/удаления записи по объекту "Роль пользователя", а дальше уже стандартными элементами бизнес процесса организовать чтение записи, по которой запустился процесс, а также добавление записи о событии в созданный Вами объект.

Стереотип спрацював - тріггер на таблицю :)

А если действительно триггер, на уровне SQL?

Ну це, начебто не в стилі ?..

Зато гарантированно. Логика на объекте не сработает, если удалять при помощи класса Delete или вообще прямо из базы.

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

а зачем удалять напрямую из базы. А как же проверка (перед удалением) имеет право пользователь выполнять удаление или нет. Если создавать триггеры, бизнес-процессы, то считаю, что будет полная каша. Лучше уже или C# или на худой конец, что-то небольшое выполнить на клиенте на JavaScript. Привыкать считаю нужно к хорошему, пока лучше чем C# в мире не придумали.

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

Добрый день!
При распределении прав доступа для подразделения (группы) "Менеджеры" столкнулся со следующей задачей:
В разделах «Контакты» группа видит контакты контрагентов с типом Партнер и типом Наша компания, и тех контактов, которых он создал;
в разделе «Контрагенты» группа видит контрагентов с типом Наша компания и типом Партнер, и тех контрагентов, которых он создал;
в разделах «Активности» и «Продажи» группа видит только те записи, у которых является автором или ответственным.
Запрет удаления записей, где автор не является ответственным.

Каким образом можно распределить права доступа по типу сущности или другому справочному полю

Буду благодарен за любую информацию.

Нравится

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

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

Добрый день, Игорь!

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

А если использовать такой вариант:
Выполнить фильтрацию реестра раздела в зависимости от группы в которую входит текущий пользователь?

А если использовать такой вариант:
Выполнить фильтрацию реестра раздела в зависимости от группы в которую входит текущий пользователь?

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

Существует ли пример предложенного решения?

Здравствуйте, Игорь!

Как Вам писал ранее Александр, штатными средствами приложения нет возможности настроить права доступа именно к типам записей. Касательно предложенного варианта про создание БП и раздачи прав с помощью элемента [Изменить права доступа], то ознакомится с работой данного элемента Вы сможете в "Руководстве пользователя". Игорь, учитывая то, что у каждого клиента свои бизнес-задачи, то соответственно, БП у каждого настроены по разному. Готового универсального примера нет. Но, по вопросам:
1) В разделах «Контакты» группа видит контакты контрагентов с типом Партнер и типом Наша компания -- просто создайте группу в разделе [Контакты] и раздайте ей права доступа.
2) ...и тех контактов, которых он создал - вопрос решается с помощью настройки права доступа по умолчанию раздел "Инструменты администрирования"
3) в разделе «Контрагенты» группа видит контрагентов с типом Наша компания и типом Партнер, и тех контрагентов, которых он создал -- аналогично пункту 1 и 2.
3) Запрет удаления записей, где автор не является ответственным - штатными средствами настройки прав доступа не реализуется, но можно создать процесс, который будет запускаться при событии изменения ответственного, в рамках которого раздавать права доступа на удаление записи, элемент [Изменить права доступа] (писал ранее).

Приятного дня!

Спасибо, буду пробовать.

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

Как получить список пользователей в Terrasoft 3.3.2.84?

Нравится

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

Здравствуйте Максим,
tbl_AdminUnit таблица в которой хранятся данные о пользователях и группах
sq_AdminUnit – соответствующий табилице SelectQuery в котором есть признак compare filter ‘IsGroup’, в случае выбора только пользователей, необходимо установить в false
ds_AdminUnit - датасет для вышеперечисленных объектов

"Яворский Алексей" написал:

Здравствуйте Максим,

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

sq_AdminUnit – соответствующий табилице SelectQuery в котором есть признак compare filter ‘IsGroup’, в случае выбора только пользователей, необходимо установить в false

ds_AdminUnit - датасет для вышеперечисленных объектов

С уважением,

Яворский Алексей

Эксперт 3-й линии поддержки


Спасибо

Что означает ...

[12.02.22 19.28.55.677]	(E)	
[12.02.22 19.29.45.306]	(E)	

А что Вы пытаетесь сделать ?
Данную ситуацию можно получить например

	try {
         ...
             } 
        catch(err) {
        Log.Write(2,  err.description);
                          }

когда err.description пусто, или значение переменной которое вы пытаетесь вывести через Log.Write(2, MyVar); является undefined

"Яворский Алексей" написал:

А что Вы пытаетесь сделать ?

Данную ситуацию можно получить например

        try {

         ...

             }

        catch(err) {

        Log.Write(2,  err.description);

                          }

когда err.description пусто, или значение переменной которое вы пытаетесь вывести через Log.Write(2, MyVar); является undefined

С уважением,

Яворский Алексей

Эксперт 3-й линии поддержки


Сначала создал свой раздел
Потом сделал форму
А эта ошибка появилась когда хотел удалить поле ввода с формы ...
Как удалить раздел? ([12.02.22 21.25.46.668] (E) Невозможно удалить 'Custom\Workspaces\Dov\'. При удалении объекта 'Custom\Workspaces\Dov\Details\Groups\tbl_DovGroup' из базы данных, возникла ошибка:
Разрушительный сбой «Call Stack»)

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

Для корректного удаления раздела необходимо удалть ссылку на tbl_DovGroup во всех сервисах tbl_ конфигурации.

"Alimova Anna" написал:

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

Для корректного удаления раздела необходимо удалть ссылку на tbl_DovGroup во всех сервисах tbl_ конфигурации.

С уважением, Анна Алимова

Специалист II линии технической поддержки Terrasoft


можно подробнее?

Здравствуйте, Максим!

Если одна таблица ссылается на содержимое другой (как, например, в случае со справочниками), добавляются ключи на уровне СУБД, которые позволяют сохранить целостность данных.

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

Самый эффективный способ определить, какой ключ ссылается на таблицу - попробовать удалить ее запросом на уровне СУБД. В этом случае в лог ошибки выведется имя ключа.

Сделать это можно запросом следующего вида:

 drop table tbl_DovGroup

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

После этого необходимо удалить ключ в соответствующей таблице:
01

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

"Alimova Anna" написал:После этого Вам следует проанализировать название ключа. Как правило, в нем содержится имя текущей таблицы и имя таблицы, которая на него ссылается.

Что-то все равно не понятно :(

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

Адрес технической поддержки - support@terrasoft.ru

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

Привет, Коллеги!

Вот и подошел к завершению наш тренинг по Social CRM. Как и первый день, он был крайне насыщен информацией. Выступали с докладами:

  • Джеф Таннер на тему sMarketing (Social Marketing)
  • Пол Гринберг об управлении опытом клиентов
  • Представитель компании Jive (спонсора мероприятия) - с примерами использования их продуктов

Джеф подробно рассказывал про то, как в современном мире клиенты выражают свои потребности и получают знания в социальных медиа.
В качестве иллюстрации Джеф использовал одно очень интересное видео (смотреть после рабочего дня, ссылка на youtube).
Опять речь шла о создании положительного опыта для клиента при работе с Компанией или Продуктом. Клиенты не хотят чтобы им продавали, мы не используем фразы "Смотри какой классный телефон мне продали", нужно создавать удобную и приятную среду для общения и обмена опытом, которая уже приведет к сделкам.
Много внимания обращали на обмен положительным и отрицательным опытом. Положительный опыт очень ценен, особенно в задокументированной форме, т.к. люди привыкли делиться только тем опытом, когда они были недовольны.

Пол много рассказывал про тему напрямую не связанные с Social CRM, но оказывающих сильное влияние.
Речь шла о профилировании клиентов для понимания их потребностей, интересов, которые в дальнейшем должны лечь в основу нашей стратегии взаимодействия.
Опять шла речь о непрямых коммуникациях.

В обед состоялась большая панельная дискуссия с четырьмя докладчиками тренинга: Гринберг, Таннер, Кольски, Кулберт.
Большим открытием для нас было то, что гуру сошлись во мнении, что стратегия работы с B2B клиентами, фактически ничем не отличается от работы с B2C. Основное отличие - набор данных, с которым нам приходится сталкиваться.

Большую часть второй половины дня Пол рассказывал о практических инструментах и реальных кейсах использования социальных медиа как мощного коммуникационного канала.
Среди таких примеров особо запомнились P&G с инициативой Connect + Develop и проектом для Мам.
Особняком стоит кейс телекоммуникационной компании из Шри-Ланки - Dialog Telekom.

Много говорили про NPS и его критиковали.
Обсуждали идеи доктора V Kumar, который предложил дополнить традиционный вопрос "С какой вероятностью Вы порекомендуете нашу Компанию или Продукт?" еще тремя:

  1. Рекомендовали Вы нашу Компанию или Продукт кому-то еще?
  2. Стала ли клиентом компания, которой Вы дали рекомендую?
  3. Является/являлся ли прибыльным клиентом та компания, которую Вы порекомендовали?

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

Нравится

Поделиться

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

"Евгений Лемеш" написал:предложил обязательно пообщаться позднее - после подведения итогов конкурса CRMIdol.

Cool! Это знак! Он что-то знает. :)

:smile: точно!

Йухху!!!! Мы в полуфинале!!!

The Semi-Finalists - EMEA

ABCrm
BPMOnline
Dimelo
IKO System
IntouchCRM
workbooks.com
Zestia

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

Здравствуйте, Уважаемые партнеры,
Те, с кем мы уже познакомились на Партнерской конференции 2010 в Крыму, и с кем, надеюсь, еще познакомимся:smile:

Меня зовут Федор Нестеров, я директор по развитию компании Double Service, а также бизнес-консультант, управленец и бизнесмен.
Наша команда только начинает свой бизнес с продуктами Террасофт, и поэтому мы искренне благодарны за Ваш опыт и советы, размещенные на Community и полученные в личной беседе.

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

По просьбе Ланы Чубахи я собирался выступить на партнерской конференции с мастер-классом. И участники даже выбрали интересующую их тему. Но не хватило времени...
Поэтому, как и было обещано во время конференции мы проведем не мастер-класс, а вебинар.

Тема: «Как не стать кузницей кадров для конкурентов?»

Дата: 16 декабря в 11:00 по московскому времени.

На вебинаре вместе с Вами будут обсуждаться такие вопросы:

  • • Где искать хороших сотрудников?
  • • Как сделать так, чтобы сотрудники не уходили из компании?
  • • Как сделать так, чтобы сотрудники не уходили из компании к конкурентам и сами не создавали конкурирующие компании?

При регистрации Вам необходимо ответить на вопрос:
Какая на Ваш взгляд самая большая проблема в повышении эффективности Вашего бизнеса?

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

https://www2.gotomeeting.com/register/836578355
После регистрации Вам пришлют уже другую ссылку на сам семинар. Для участия нужно будет в указанное время перейти по ссылке, которую Вы получите после регистрации.

У меня ушло более 10 лет на то, чтобы собрать этот опыт. Вы хотите сэкономить это время?

Нравится

Поделиться

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

Федор, с удовольствием сэкономим свое время :) и примем участие в Вашем online-тренинге.

Благодарю за анонс!

Федор, буду рад послушать! Спасибо, за анонс!

Присоединяюсь!

Уверен, что тема вызовет большой интерес!

Поучаствуем. Какая продолжительность вебинара?

Присоединяюсь!
С удовольствием послушаю Ваш практический опыт!

Планируемая продолжительность вебинара 40-60 мин, включая ответы на вопросы. А там - как пойдет :wink:

Мы будем!!!

Обязательно поучаствуем. Очень интересная тема.

Хотелось бы увидеть в ветке краткие результаты и самые интересные вопросы-ответы вебинара.
Ну или хотя бы ссылку на запись.

"Старун Юлия" написал:Ну или хотя бы ссылку на запись.

Ссылка (98 mb).

Показать все комментарии
Публикация

Представляю Вашему вниманию: функция, которая модально окрывает окно выбора из справочника. Минимум обязательных входящих параметров, только датасет - всё остальное можно не указывать, функция сама определит. В скрипте описаны все парамтры + пример использования.
P.S. Функция возвращает объект такой структуры:
ResObject.KeyValue //выбранное ключевое значение
ResObject.KeyValues // массив выбранных значений
ResObject.Result// результат окна
ResObject.Result == 1 // пользователь нажал OK
ResObject.Result == 2 // пользователь нажал Cancel

Нравится

Поделиться

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