Вопрос

Добрый день! 

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

Рассмотрели возможные варианты:
1. Default rights на Activity

2. Allow shared access в настройках почтового ящика

3. Access rights в настройках почтового ящика

Но всё равно в письме появляется не только владелец почтового ящика (что, наверное, логично), но и All employees, от которых надо избавиться

И второй вопрос - почему на исходящие письма с общего почтового ящика не действует такое же распределение прав? Там только автор права получает

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

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

Владимир, нужно искать в скриптах то место, где при синхронизации создаётся запись. Видимо, там выдаются и права. Смотрите в сторону LoadExchangeEmailsProcess, из него ExchangeUtility, ExchangeEmailSyncProvider, ExchangeEmailMessage. Возможно, это тут (в последней):

public Activity GetActivityInstance(SyncContext context, LocalItem localItem, EntitySchema schema,
	Exchange.EmailMessage message, string subject) {
	var instance = (Activity)schema.CreateEntity(context.UserConnection);
	SyncEntity instanceSync = GetActivityInstanceSync(context, message, subject, instance);
	if (instanceSync.Action != SyncAction.Create && !context.UserConnection.GetIsFeatureEnabled("MailboxRightsForEmail")) {
UpdateEmailRelations(context.UserConnection, instance);
	}
	localItem.AddOrReplace(schema.Name, instanceSync);
	return instance;
}

 

Краткое резюме - этих настроек оказалось достаточно. Просто, система не сразу реагировала на их изменение. И получая письма в течение нескольких минут после изменения, всё ещё действовали старые настройки.

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

TLS

Добрый день!

появилась ли возможность использования TLS в 7.11?

в 7.12? если да, то где можно ознакомиться с описанием?

Для обеспечения безопасности со стороны пользователя нужно устанавливать сертификат. Часто предлагается такое решение, что на приветственной странице сайта идет проверка установлен ли у клиента нужный сертификат. Если не установлен, то происходит переадресация на страницу с инструкцией по установке сертификата.

Вопрос:

Можем ли мы такое реализовать в bpm?

Как это можно реализовать? 

 

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

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

TLS — протокол на смену SSL. В bpm'online должен поддерживаться. Как настроить HTTPS в IIS для сайта — описано тут.

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

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

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

1. Создается объект UsrVwTest , который наследуется от базового, в нем не добавляется ни одного поля (в view будет 1 колонка с идентификаторами контакта), у него устанавливается признак, что это представление в базе, он сохраняется и публикуется.

2. После этого, через расширение SqlExecutor выполняется что-то в духе

create view UsrVwTest as select top 1 Id as 'Id' from Contact

3. После это прямо из консоли пробую посчитать записи, которые там есть, выполняя следующее:

var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "UsrVwTest" });
esq.addColumn("Id");
esq.getEntityCollection(function (result) {
	if (!result.success) {
		// обработка/логирование ошибки, например
		this.showInformationDialog("Ошибка запроса данных");
		return;
	}
	console.info(result.collection.getCount());
}, this);

Консоль выдает мне 1, то есть проблем с доступом к view нет, там одна строка, как и должно быть.

После этого я повторяю тот же алгоритм на on-site проекте 7.11, в том же порядке. После этого я на аналогичное обращение к view из консоли получаю 500 (InvalidObjectStateException). Запрос в Network падает также с кодом "ErrorCode":"InvalidObjectStateException". Обработка результата падает в ветку с !result.success. Пробовал дополнительно компилировать конфигурацию на разных этапах алгоритма, создавать view различными способами (напрямую в базе, через установку скрипта в конфигурации и т.д.), получаю тот же ответ. Названия view в базе и в конфигурации совпадают, название и количество колонок тоже.  Кроме того, на проекте уже есть view, реализованные ранее, с которыми ведется работа, они реагируют по-разному. Некоторые так же выдают 500, некоторые послушно пишут количество записей внутри себя. 

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

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

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

Поправка:

По всей видимости, все уже существующие представления ошибок не вызывают. Случаи, когда запрос к ним из консоли выдает 500 - превышение 20 000 записей на выгрузку. 

 

Все получилось. Оказалось, что view нужно создавать именно как dbo.ViewName, а не просто ViewName, иначе InvalidObjectName

 

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

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

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

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

Выдачу прав в зависимости от типа можно сделать при помощи БП, срабатывающего при вставке. А невозможность добавить нужного типа — или кодом дорабатывать, или включить в объекте справочника администрирование по записям и выдать права.

Спасибо, можете, подробнее пояснить как задать права на определенный тип объекта, в Управлении Конфигурацией увидел права ко всему объекту, 

А задать права на конкретные записи можно попробовать через базу.

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

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

Возможно ли в разделе динамически менять entitySchemaName?

Допустим в фильтр добавить кнопку, по нажатию на которую перегружать грид данными другого объекта?

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

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

Скорее всего вы столкнётесь с тем, что колонки будут настроены неправильно. Может лучше 2 грида? 

Варфоломеев Данила,

Данила, там пока не понятно, сколько их может быть.. вот и хотелось бы прояснить разные варианты.

Если данные из разных разделов однотипной структуры, можно сделать в базе view с кучей union из разных таблиц и работать с ней, как с обычной сущностью, при необходимости фильтруя. В Terrasoft 3.Х такой подход использовался в окне уведомлений, где выводилась информация о записях разных разделов, включая самодельные.

Ближайший аналог - это, наверно, журнал изменений.

https://academy.terrasoft.ru/sites/default/files/documents/docs/product…

Там переключение сделано в интерфейсе 5.Х на странице реестра ChangeLogGridPage. Логика загрузки данных при смене схемы реализована в функции InitializeDataSourceCurrentStructure.

Но в 7.Х движок страниц реестра совсем другой.

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

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

Существует следующая проблема:

В реестре [Обращения] выделяются сообщения от VIP клиентов, но при выборе этих строк в реестре, они перекрашиваются в дефолтный голубой цвет (цвет выделенной строки). Каким образом можно осуществить замену дефолтного цвета активной строки реестра на тот, что мне нужен, в зависимости от того, является ли клиент VIP или нет. Где определяется стиль выделенной строки реестра?

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

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

Есть бесплатное дополнение «Records color highlighting».

1) Оно абсолютно не решает текущую задачу
2) Оно не работает с логическими полями (только со справочными)

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

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

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

В css выделенная запись задаётся стилем grid-row-selected, там явно прописан этот цвет.

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

Похожая задача и похожая проблема ( https://community.terrasoft.ru/questions/zapros-ne-vozvrasaet-znacenie ). Используя запрос:

var vip = 0;
var recordId = item.get("Id");
var esqCase = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "Case"
});
esqCase.addColumn("UsrVIPobr");
esqCase.getEntity(recordId, function(result) {
if (result.success) {
vip = result.entity.get("UsrVIPobr");
}
}, this);

Получаю корректный Id (по базе находится нужное обращение с нужным id и полем UsrVIPObr). В карточке обращения есть логическое поле UsrVIPobr (1 или 0), но почему-то переменная vip не меняется. Прошу помочь разобраться. 

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

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

Быстров Сергей,

Добро пожаловать в мир async вычислений, коллбеков и промисов)

Вам надо весь код(который за скриншотом) перенести в коллбек-функцию getEntity. грубо говоря:

var vip=null;
esq.getEntity(id, function(p) {
     //тут vip будет не null
     var vip=...;
 
     if (vip) {....}
}, this);
//тут vip все ещё null, следующие строки кода отработают ДО результата функции getEntity
var a = ...;
....

 

То, что у вас скриншот обрывается на esq.getEntity - уже подозрительно :)

Вы используете переменную vip после выполнения getEntity?

Варфоломеев Данила,

Да, используется для сравнения с константой

Там же асинхронное выполнение. В getEntity добавляется функция, которая запустится где-то потом, а код пошёл выполняться дальше.

Быстров Сергей,

Добро пожаловать в мир async вычислений, коллбеков и промисов)

Вам надо весь код(который за скриншотом) перенести в коллбек-функцию getEntity. грубо говоря:

var vip=null;
esq.getEntity(id, function(p) {
     //тут vip будет не null
     var vip=...;
 
     if (vip) {....}
}, this);
//тут vip все ещё null, следующие строки кода отработают ДО результата функции getEntity
var a = ...;
....

 

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

Быстров Сергей,

нет. только упаковать всё в Terrasoft.chain (те же коллбеки, только в более удобоваримом виде)

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

Есть такой пример в Документации:
Для раздела [Заказы] реализовать выделение тех записей реестра, которые находятся на стадии [Исполнение].

Подскажите: как определять константы для других разделов (интересует выделение Обращений в реестре по их приоритету)?

В этом примере проверятся по стадии [Исполнение] в разделе [Заказы]:

if (running.value === OrderConfigurationConstants.Order.OrderStatus.Running)

 

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

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

Возможно несколько вариантов.

1. По аналогии с сервисом OrderConfigurationConstant, реализовать сервис, в котором будут храниться значения констант приоритетов обращений.

2. Либо сразу же сравнивать с нужным значением Id записи в справочнике приоритетов обращений.

Id нужных значений записей можно получить из базы данных.

Если у Вас приложение on-site, то заходите на сервер баз данных и пишите запрос к таблице CasePriority и получаете нужные значения, если on-demand, то можно обратиться за помощью в службу поддержки.

Также можно себе в конфигурацию установить бесплатное приложение SQL Executor, с помощью которого можно получить значения из нужной таблицы непосредственно из приложения bpm'online.

А вообще, очень похоже, что для Вашей задачи подойдет другое бесплатное приложение Records color highlighting.

Дополнение "Records color highlighting" облегчает навигацию по записям в разделах bpm'online, фокусируя внимание пользователя на элементах, выделенных цветом по предварительно настроенному правилу. Для создания правила выделения можно использовать одно из справочных полей в любом разделе bpm'online и широкую цветовую палитру.

Возможно несколько вариантов.

1. По аналогии с сервисом OrderConfigurationConstant, реализовать сервис, в котором будут храниться значения констант приоритетов обращений.

2. Либо сразу же сравнивать с нужным значением Id записи в справочнике приоритетов обращений.

Id нужных значений записей можно получить из базы данных.

Если у Вас приложение on-site, то заходите на сервер баз данных и пишите запрос к таблице CasePriority и получаете нужные значения, если on-demand, то можно обратиться за помощью в службу поддержки.

Также можно себе в конфигурацию установить бесплатное приложение SQL Executor, с помощью которого можно получить значения из нужной таблицы непосредственно из приложения bpm'online.

А вообще, очень похоже, что для Вашей задачи подойдет другое бесплатное приложение Records color highlighting.

Дополнение "Records color highlighting" облегчает навигацию по записям в разделах bpm'online, фокусируя внимание пользователя на элементах, выделенных цветом по предварительно настроенному правилу. Для создания правила выделения можно использовать одно из справочных полей в любом разделе bpm'online и широкую цветовую палитру.

Остается только один не решенный вопрос - как обратиться к колонке, которой нету в отображении Реестра, но есть в самом обращении. Используемый код:

var vip = item.get("нужная колонка");
if (vip.value === *константа*) {
item.customStyle = {
"color": "black",
"background": "#A52A2A"
};

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

Можно брать Id обращения и получать значение нужной колонки из базы.

Быстров Сергей,

В смысле? Добавляете её, когда формируется запрос на выборку в реестр (см addGridDataColumns из GridUtilities). Далее в updateLoadedGridData точно будет ваша колонка в выборке.

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

Добрый день!

 Нужно загрузить в систему объекты связанные с Контрагентом. Например, договоры.

мы можем подготовить 2 файла.

1 с данными о контрагентах, другой с данными о договорах.

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

можно ли настроить импорт так, чтобы поиск справочных полей был по кастомным полям, например, по ИНН и КПП?

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

 

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

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

Насколько я знаю, то система позволит Вам обратиться к одному полю в контрагенте, чтобы определить его уникальность. Например, к полю ИНН. (но оно ведь не всегда уникально). Так что, придется по другому полю проверить уникальность или убедиться, что все ИНН уникальны. А потом, когда сопоставляю колонки договора при импорте с моим файлом excel, при выборе контрагента "проваливаюсь" в него плюсиком и ищу там ранее проимпортированное поле с кодом.

Насколько я знаю, то система позволит Вам обратиться к одному полю в контрагенте, чтобы определить его уникальность. Например, к полю ИНН. (но оно ведь не всегда уникально). Так что, придется по другому полю проверить уникальность или убедиться, что все ИНН уникальны. А потом, когда сопоставляю колонки договора при импорте с моим файлом excel, при выборе контрагента "проваливаюсь" в него плюсиком и ищу там ранее проимпортированное поле с кодом.

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

Привет всем!

Система не получает сообщения из почтового ящика( MS Exchange) до тех пор пока в систему не войдет Supervisor, только после этого система начинает прием и обработку сообщений.

 

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

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

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

Для исправления данного кейса необходимо установить для пула приложений IIS, на котором работает приложение, Idle Timeout = 0

1. Настроить автоматический мониторинг Loader'a и приложения, ниже варианты:

  • С помощью бесплатного сервиса мониторинга https://uptimerobot.com/ настроить автоматический мониторинг c периодичностью 5-10 минут - наиболее быстрый путь
  • С помощью автоматического запуска скрипта мониторинга приложения. Шаблон скрипта PowerShell в приложении Ping.ps1, в нем необходимо изменить адрес приложения. После этого, нужно запланировать выполнение этого скрипта через планировщик Windows c периодичностью 5-10 минут. Автоматический запуск можно настроить по инструкции http://windowsnotes.ru/powershell-2/zapusk-powershell-skripta-po-raspisaniyu/.

 

2. Настроить автоматический запуск SQL-скрипта очистки \ перезапуска зависших заданий, скрипт в приложении ResetErrorQuartzTriggers.sql - с периодичностью 30 минут

  • Настроить автоматический запуск задания MSSQL, выполняющего этот скрипт - наиболее простой способ

Скрипты можно скачать по данной ссылке:https://dropmefiles.com/QhuAh

Shevchenko Andrey,

добрый день! скрипты выложите еще раз.

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

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

Shevchenko Andrey,

не скачиваются скрипты. На dropmefiles пишет что файлы удалены, по самому скрипту - web страница недоступна

Ольга Кондратьева,

Добрый день! Можете скачать по ссылке - 

https://www.dropbox.com/sh/re9v0093hflrmuf/AADQ1_2KNUQgLJS2DnkB0Gyia?dl…

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