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

Подскажите, есть ли возможность определить роли текущего пользователя в мобильном приложении? Если делать запрос то выдает ошибку - Uncaught Error: [ERROR][Ext.data.Store#setModel] Model with name "SysUserInRole" does not exist.

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

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

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

Нравится

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

Мобильное приложение не загрузило метаданные модели SysUserInRole.

Добавьте в манифест вот такую секцию:

ApplicationRequiredModels: ["SysUserInRole"]

Кривонос Максим,

 Благодарю, сработало.

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

По входящему письму в системе регистрируется обращение, тема этого письма меняется, в него подставляется номер обращения.

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

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

Вопрос: как ответить на письмо чтобы в тему подставилось "fw: тема письма из которого пишу ответ"?

Нравится

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

Добрый день, может кто-нибудь подскажет, в каком формате правильно передавать данные в DataService, для поля с типом varbinary(max), т.е. байты файла. Сейчас при попытке создания записи детали файлы и ссылки, возникает след. ошибка: 'Ссылка на объект не указывает на экземпляр объекта'.

                  "Items": {
                        "Name": {
                            "ExpressionType": 2,
                            "Parameter": {
                                "DataValueType": 1,
                                "Value": "test.doc"
                            }
                        },
                        "Data": {
                            "ExpressionType": 2,
                            "Parameter": {
                                "DataValueType": 13,
                                "Value":   base64.encodebytes(fi).decode('ascii')
                            }
                        }
                    }

или так 

                  "Items": {
                        "Name": {
                            "ExpressionType": 2,
                            "Parameter": {
                                "DataValueType": 1,
                                "Value": "test.doc"
                            }
                        },
                        "Data": {
                            "ExpressionType": 2,
                            "Parameter": {
                                "DataValueType": 13,
                                "Value": 0x504B030414000600080000002100DFA4D26C...
                            }
                        }
                    }

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

Нравится

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

Я думаю что DataService не работает с varbinary(max), посмотрите как реализована загрузка и скачивание файлов на детали [Файлы и ссылки].

В догонку в документации, указано что

контакт UploadFile - Класс выгрузки файла. Не рекомендуется использовать.

Для работы с файлами используется не DataService, а FileService и FileApiService. Вот пример скачивания, а вот — загрузки.

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

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

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

Нравится

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

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

 

 

Возможно вам будут полезны эти приложения 1 2 3 доступные на меркетплэйсе

 

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

 

 

Возможно вам будут полезны эти приложения 1 2 3 доступные на меркетплэйсе

 

В первом, Advanced schedule for bpm'online, как раз есть то, что Вы хотите:

Дополнение платное, но есть «тест-драйв», можно установить и посмотреть, как оно сделано.

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

Всем привет,

Есть кусок кода, который корректно работает в системе:

var hash = NetworkUtilities.getEntityUrl("SomeObject", record.get("SomeObject.Id"));
this.sandbox.publish("PushHistoryState", {hash: hash});

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

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

Нравится

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

Проверьте что у пользователей портала есть права на доступ к объекту (хотя бы на чтение), а так же что ваш объект добавлен в справочник  [Список объектов, доступных пользователям портала]  и что нужные колонки указаны а справочнике [Список доступных полей объектов на портале]

При необходимости внесите изменения, сбросьте рэдис и перезайдите в систему.

Код этой функции getEntityUrl можно открыть в конфигурации, в схеме NetworkUtilities:

/**
 * Creates a relative URL to open the card of the entity.
 * @throws {Terrasoft.ArgumentNullOrEmptyException} Throws an exception if not specified the schema name or
 * the entity ID.
 * @inheritdoc NetworkUtilities#getEntityConfigUrl
 */
getEntityUrl: function(config) {
	if (arguments.length > 1) {
config = {
	entitySchema: arguments[0],
	primaryColumnValue: arguments[1],
	typeColumnValue: arguments[2],
	operation: arguments[3]
};
	}
	let url = "";
	var entityConfig = this.getEntityConfigUrl(config);
	if (entityConfig) {
url = Terrasoft.combinePath(
	entityConfig.cardModule,
	entityConfig.cardSchema,
	entityConfig.operation,
	entityConfig.primaryColumnValue
);
	}
	return url;
},

А она вызывает getEntityConfigUrl:

/**
 * Creates a configuration object values for the U R L to a card entity.
 * @throws {Terrasoft.ArgumentNullOrEmptyException} Throws an exception if not specified
 * the schema name or the entity ID.
 * @param {Object} config Config object.
 * @param {String} config.entitySchema The name or ID of the schema entity.
 * @param {String} [config.entitySchemaName] The name of the schema entity. Alias for @entitySchema.
 * @param {String} config.primaryColumnValue The entity identifier.
 * @param {String} [config.typeColumnValue] The value of the column type.
 * @param {String} [config.typeId] The value of the column type. Alias for @typeColumnValue.
 * @param {String} [config.operation] Operation.
 * @return {Object} Returns the configuration object values for the U R L to a card entity.
 */
getEntityConfigUrl: function(config) {
	const configArg = arguments.length === 1;
	const entitySchema = configArg ? config.entitySchema || config.entitySchemaName : arguments[0];
	const primaryColumnValue = configArg ? config.primaryColumnValue : arguments[1];
	const typeColumnValue = configArg ? config.typeColumnValue || config.typeId : arguments[2];
	const operation = configArg ? config.operation : arguments[3];
	var entitySchemaName = Terrasoft.isGUID(entitySchema)
? this.getEntitySchemaName(entitySchema)
: entitySchema;
	if (!entitySchemaName) {
throw Ext.create("Terrasoft.ArgumentNullOrEmptyException");
	}
	var moduleStructure = Terrasoft.ModuleUtils.getModuleStructureByName(entitySchemaName);
	var entityStructure = Terrasoft.ModuleUtils.getEntityStructureByName(entitySchemaName);
	if (!entityStructure && !moduleStructure) {
return null;
	}
	var pages = entityStructure.pages;
	if (typeColumnValue && moduleStructure && moduleStructure.attribute && !Ext.isEmpty(pages)) {
var typePage = Terrasoft.where(pages, {"UId": typeColumnValue});
pages = Ext.isEmpty(typePage) ? pages : typePage;
	}
	var cardModule = moduleStructure && moduleStructure.cardModule ? moduleStructure.cardModule : "CardModuleV2";
	var cardSchema = pages[0].cardSchema;
	var configUrl = {
cardModule: cardModule,
cardSchema: cardSchema,
entitySchemaName: entitySchemaName,
operation: operation || Terrasoft.ConfigurationEnums.CardOperation.EDIT,
primaryColumnValue: primaryColumnValue
	};
	return configUrl;
},

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

Проверьте что у пользователей портала есть права на доступ к объекту (хотя бы на чтение), а так же что ваш объект добавлен в справочник  [Список объектов, доступных пользователям портала]  и что нужные колонки указаны а справочнике [Список доступных полей объектов на портале]

При необходимости внесите изменения, сбросьте рэдис и перезайдите в систему.

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

Спасибо за ответ.

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

Тёскин Дмитрий Валерьевич,

Тогда только отлаживатся и смотреть почему возращает пусто или сделать костыль (для портала зашить нужный url)

Ещё точнее, на портале в JS объект Terrasoft.configuration.ModuleStructure содержит только 3 стандартных портальных раздела, и для SomeObject функция ничего не возвращает. Посмотреть наполнение на портале и в обычной системе можно, введя в консоли браузера Terrasoft.configuration.ModuleStructure.

Логика наполнения списка реализована в C#-схеме ConfigurationSectionHelper.

Вероятно, если не прибегать к хакам, поможет добавление на портал этого раздела.

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

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

На новые обращения работает, но на эти 30 обращений не отбираются права. (Вижу обращения с контрагентом "Контрагент №2" через портал под пользователем с контрагентом "Контрагент №1" ) 

Вопрос, что может устанавливать права, кроме этого бизнес процесса? Техподдержка не помогла.

Нравится

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

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



Так мы исключим вариант, что процесс некорректный.



У наших клиентов тоже перераспределяются права на обращения после изменения SLA или Контакта, и всё срабатывает. Правда, там в условии я по старой привычке пишу, что Id должно быть заполнено, но возможно, сейчас такое и не требуется

Если процесс даже не запускается на редактирование полей, то покажите стартовые сигналы

Владимир Соколов, запускается, на каждое изменение, но не отрабатывает, как будто права, кто-то свыше меняет.

 

Rinat,

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

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

Также, возможно, отрабатывает еще какая-то дополнительная логика. Чтобы понять, что это может быть, посмотрите SQL Profiler, какие запросы идут в этот момент в базу данных.

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



Так мы исключим вариант, что процесс некорректный.



У наших клиентов тоже перераспределяются права на обращения после изменения SLA или Контакта, и всё срабатывает. Правда, там в условии я по старой привычке пишу, что Id должно быть заполнено, но возможно, сейчас такое и не требуется

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

Добрый день! Прошу помочь с решением проблемы синхронизаций почты. 

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

Еще мне нужно в одной учетной записи добавить 2 почты, личную почту добавила, а при добавлении корпоративной почты система пишет "Указан неправильный email или пароль.", хотя данные внесены корректные. Заранее благодарю 

Версия системы:7-13-4

Нравится

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

В настройках yahoo включите разрешение на работу с посторонними системами. Отладьте  отправку и получение через дэсктопный почтовый клиент (Outllok express, Windows mail)

В настройках yahoo включите разрешение на работу с посторонними системами. Отладьте  отправку и получение через дэсктопный почтовый клиент (Outllok express, Windows mail)

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

скажите пожалуйста, а что вы имеете ввиду под словом "отладка"? Разрешение на работу с системой bpm'online включила. 

Подозреваю, что Григорий имел в виду просто запустить Outlook или The Bat и попробовать подключиться к почтовому серверу с теми же настройками.

Был случай, что требовалось открыть порт 25, чтобы bpm'online могла послать тестовое сообщение на почтовый сервер

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

Да именно это и имелось в виду

Григорий Чех, Коллеги, благодаря вашей инструкции получилось сделать синхронизацию, но к сожалению, в систему выгрузились входящие письма c почты aygerim***@yahoo.com, а не с корпоративной почты aygerim***@san***.kz. Можете пожалуйста, предоставить детальную инструкцию по добавлению корпоративной почти провайдера yahoo.com 

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

Добрый день. Столкнулся со следующей проблемой: есть 2 пакета (родительский пакет Bot и зависящий от него NewBot). В пакете Bot есть пользовательский элемент БП SendMessage, который на ExecuteElement создает экземпляр класса Worker и вызывает его метод Send. 

Требуется в пакете NewBot заместить этот элемент, чтобы вызывалась другая логика. Я сделал следующим образом: Создал в пакете NewBot схему исходного кода с классом NewWorker

[Terrasoft.Core.Factories.Override]
public class NewWorker : Worker
{
  public override void Send()
  {
  //новая логика элемента БП
  }
}

Метод Send в классе Worker объявлен со спецификатором virtual.

Как я понимаю, при такой записи если на системе будет стоять и пакет Bot и пакет NewBot, то элемент БП SendMessage должен при ExecuteElement вызвать Send из класса NewWorker. Но оно так не работает.... Вызывается все равно метод Send из класса Worker. 

Что я делаю или понимаю не так? И может есть какой другой способ заместить пользовательский элемент БП?

Нравится

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

Victor, В пакете Bot экземпляр класса Worker создается через ClassFactory?

Victor, В пакете Bot экземпляр класса Worker создается через ClassFactory?

Толмачев Дмитрий Юрьевич,

Эмм, нет

Именно поэтому переопределение, на которое вы надеетесь, не происходит.

Толмачев Дмитрий Юрьевич,

Большое спасибо за помощь, сейчас переделаю

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

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

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

 

 

Задача состоит в том чтобы добавить еще быстрый фильтр по дате загрузки товара (поле существует в объекте)

При добавлении быстрого фильтра по статьи в академии выскакивает ошибка 

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

также добавляю скрин исходного кодаИзображение удалено.

 

Нравится

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

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

А именно, на уровне модуля BaseDataView прописана реализация, согласно которой только один элемент с названием PeriodFilter будет выполнять ожидаемые действия.

Если Вам необходимо реализовать несколько быстрых фильтров по дате, следует заместить логику BaseDataView (пакет NUI), предусмотреть возможность работы еще с одним фильтром - добавить строки, аналогичные всем тем, где упоминается PeriodFilter.  

Опишите более детально, если можно то из примерами.

См. в коде BaseDataView, QuickFilterModule,  ReportFilterModule и других схем, где упоминается PeriodFilter, как там работают с этим фильтром.

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

Добрый день.

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

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

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

 

 

 

 

 

 

 

 

 

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

Подскажите, что может влиять еще.

Спасибо

Нравится

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

Для изминения прав на уже созданные объекты воспользуйтесь  этим бесплатным приложением

Приложение замечательное, но для записей. У меня же вопрос касается графиков и диаграмм. И после установки приложения по прежнему открывается стандартное окно настроек прав доступа для итогов.

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

Если раньше было запрещено и настройки прав меняли, может, старое значение закешировалось и поможет очистка профиля пользователя или очистка Redis. Если дело не в этом, нужно смотреть логику в схеме DashboardBuilder и как она выполняется при работе под этим пользователем.

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