Подскажите, как перенести права данные объекту на администрирование по записям?
В конкретном моем случае, это розданное право на объект детали по визированию.

Нравится

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

Добрый день, Михаил!

Перенос прав Вы можете выполнить запросом в бд через команду 'insert', указав корректное название нужного Вам объекта. Для примера возьмем таблицу прав доступа на объект 'Contact':
insert into SysContactRight
('RecordId', 'SysAdminUnitId', 'Operation', 'RightLevel', 'Position', 'SourceId')
Values
('2A4E69EF-FF58-4FE4-BAF4-FB71FF19AA4C', '63B4D9F5-3811-4384-8EDF-94BC44C97CD5', '0', '2', '2', '4220CFBA-0514-44CE-ADD0-109B54B52084')
Значение нужных Вам колонок Вы можете узнать просто выполнив запрос 'select' к объекту, из которого собираетесь выполнить перенос.

Валерий, дело в том что для объекта, например, CustomVisa при добавлении прав на администрирование по записям создается таблица CustomVisaRight.
До создания этой таблицы я не могу заинсертить в неё изменения какие либо.
Вопрос состоит в том, как предусмотреть чтобы при установке этого пакета в конце всех процессов генерации и компиляции создавалась эта таблица.

Добрый день.

"Башаров Андрей Викторович" написал:

Валерий, дело в том что для объекта, например, CustomVisa при добавлении прав на администрирование по записям создается таблица CustomVisaRight.

До создания этой таблицы я не могу заинсертить в неё изменения какие либо.

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

1) В дизайнере объекта включить администрирование. При публикации автоматически будет сгенерирована таблица прав (В Вашем случае, например, CustomVisaRight)
2) Устанавливаем необходимые права и сохраняем полученые привязки данных в пакете.
3) При установке данного пакета сперва обновится структура таблиц (в т.ч. будет создана CustomVisaRight), привязки данных выполняются на завершающем этапе, когда структура БД уже обновлена. Поэтому никаких проблем не должно возникнуть.

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

Добрый день!
У нас возникли проблемы с фильтрацией получаемых через odata данных.
Мы пробовали несколько вариантов:
client.AccountCollection.Where(x => x.CgrDistributorId == DistributorId).ToList();

также через LINQ:
var result = from account in (client.AccountCollection as IQueryable)
where account.CgrDistributorId == DistributorId
select account;
result.ToList();
Эти варианты выдают ошибку "Элемент коллекции с именем CgrDistributorId не найден", хотя данная колонка есть. Мы обновляли ServiceReference, а данные из неё получаються если загрузить список не используя фильтр.

работает только:
client.AccountCollection.ToList().Where(x => x.CgrDistributorId == DistributorId).ToList();
Но он не подходит, т.к. он перед фильтрацией подгружает весь список и фильтрует данные уже в ОЗУ, что не корректно.

Нравится

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

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

Выполните фильтрацию в самом обращение к ODATA:
using (var response = (HttpWebResponse)authRequest.GetResponse()) {
// Создание запроса на получение данных от сервиса OData.
//var dataRequest = HttpWebRequest.Create(serverUri + "ContactCollection?$select=Id, Name, Gender&$expand=Gender&$filter = Id eq guid'" + contactId + "'") as HttpWebRequest;
var dataRequest = HttpWebRequest.Create(serverUri + "ContactCollection?$select=*&$filter = Id eq guid'" + contactId + "'") as HttpWebRequest;
// Для получения данных используется HTTP-метод GET.
dataRequest.Method = "GET";
// Добавление полученных ранее аутентификационных cookie в запрос на получение данных. ,Products&$expand=Products/Suppliers
dataRequest.CookieContainer = bpmCookieContainer;
// Получение ответа от сервера.
using (var dataResponse = (HttpWebResponse)dataRequest.GetResponse()) {
// Загрузка ответа сервера в xml-документ для дальнейшей обработки.
XDocument xmlDoc = XDocument.Load(dataResponse.GetResponseStream());
// Получение коллекции объектов контактов, соответствующих условию запроса.
var contacts = from entry in xmlDoc.Descendants(atom + "entry")
select new {
Id = new Guid(entry.Element(atom + "content")
.Element(dsmd + "properties")
.Element(ds + "Id").Value),
Name = entry.Element(atom + "content")
.Element(dsmd + "properties")
.Element(ds + "Name").Value
};
foreach (var contact in contacts) {
// Выполнение действий с контактами.
}
}
}

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

Существует ли возможность управлять настройкой колонок в окне выбора из справочника на уровне кода схемы из которой он вызывается, например через LookupUtilities.Open ?

Нравится

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

Добрый день!
К сожалению, такой возможности в системе нет, выбранные для отображения колонки хранятся в БД в бинарном виде, как и прочие настройки. Вы можете настроить необходимые колонки во вкладке Вид модального окна.

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

Создал колонку на детали Связи Активности, на пейдже она отображается и работает, а вот в редакторе БП её нету.
Существует ли какой-то способ добавить её туда?

Нравится

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

Добрый день!

Деталь Связи Активности формируется динамически, в нее добавляются все справочные поля данного объекта. В редактор БП автоматически подтягивает все lookup'ы которые есть в системе. Рекомендую перепроверить что Ваша колонка присутствует в объекте и ее можно найти в разделе Справочники.

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

Возможно я неправильно выразился, когда сказал, что колонки нету в редакторе БП: я имел ввиду элемент "Выполнить задачу", мне колонка нужна там, а если использовать "Добавить данные" (Активность), то там колонка есть, но это не то, что мне нужно. Справочник и колонка в объекте существуют, очистка кеша и редиса не помогли.

Здравствуйте,
Колонка к сожалению, там автоматически не появится, т.к. элемент «Выполнить задачу» это схема (ActivityUserTask), которая создает служебную задачу (аквтивность), и оперирует параметрами что описаны в этой схеме. Рекомендую вам за элементом «Выполнить задачу» использовать элемент «Изменить данные» и по id созданной задачи, изменять эту активность. Там (в элементе Изменить данные) ваша колонка будет.

Добрый день. Может кому актуально будет, но я нашел ответ на этот вопрос.

В БП в новых элементах "Выполнить задачу" связь появляется, а в уже имевшихся, т.е. созданных до добавления новой связи, - нет. Это связано с метаданными схемы БП, он их никогда не обновляет.

Решение напрашивается само собой: нужно в БП/Кейсе удалить старый элемент выполнить задачу, создать новый элемент, и настроить как только что удалённый. Связь появится.

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

Степин Константин Владимирович,

Константин идея хорошая, но есть одно большое НО. Если в БП есть зависимые элементы БП. То править нужно будет и их. и если представить что ветвление очень огромное, то это займет очень много времени.

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

Коллеги, добрый день! Выполняли настройку вебсокетов по мануалу https://academy.terrasoft.ru/documents/service-enterprise/7-9/nastroyka-...
Все, что нужно, во всех конфигах указали, но после их сохранения и перезапуска IIS все равно появляется оповещение, что вебсокеты настроены некорректно. В чем может быть причина?
P.S. Указывали пользовательский порт для подключения "0" как в документации, и 443, т. к. сайт работает на https

Нравится

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

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

При работе по защищенному протоколу (https) для работы веб-сокетов по 443 порту необходимо в веб-конфиге указать следующие параметры:

<wsService type="Terrasoft.Messaging.MicrosoftWSService.MicrosoftWSService,Terrasoft.Messaging.MicrosoftWSService" encrypted="false" portForClientConnection="0" maxConnectionNumber="100" clearIdleSession="false" clearIdleSessionInterval="120" />

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

Илья, спасибо. Вопрос решен!

Илья, еще раз здравствуйте! Настраивала вебсокеты в соответствии с документацией и вашими рекомендациями для двух приложений. На одном, как я выше писала, вопрос решился. Для 2го все настраивала по аналогии, но все равно вебсокеты настроены некорректно. В чем еще может быть проблема?

Добрый день, Елена.

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

Также, на работу Websockets может влиять наличие антивируса, который блокирует подключение (необходимо включить адрес bpm'online в список надежных, либо отключить антивирус), Firewall на сервере приложения блокирует подключение (необходимо создать два исключения - для входящего потока и для исходящего потока для порта, по которому происходит подключение), наличием расширений браузера Chrome (необходимо отключить расширения, которы блокируют работу).

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

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

Добрый день.

У нас возник выопрос, можно ли изменть значение системных настроек через Odata?
При попытке сохранить изменения под супервизором через odata нам выдаёт ошибку Forbidden.
Мы предполагаем, что это может быть связано с тем, что доступ к ним через Odata закрыт.
Подскажите, может кто то сталкивался с подобной проблемой.

Нравится

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

Здравствуйте, Богдан!

Изменение значений системных настроек через OData не предусмотрено.

Есть два варианта решения этой задачи:
1) Создать собственный web сервис, который будет менять значения системных настроек в таблице SysSettingsValue
2) Создать объект, к которому будут идти обращения по OData. Логикой в созданном объекте (или триггерами в БД) необходимо будет переносить новые значения в таблицу SysSettingsValue.

Раньше было нельзя, только несколько таблиц с префиксом Sys открыты на запись

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

Метод onEntityInitialized очевидно не работает в схемах секции, я подразумеваю что для них существует специфический метод-аналог, но беглым поиском по исходникам однозначной информации полцчить не удалось.
Метод "init" отрабатывает когда карточка еще не инициализирована, в частности детали на странице, мне же требуется взаимодействие с ними, в коде карточки в методе onEntityInitialized - отлично отрабатывает моя логика, но вот в секции - аналогичный трюк "не проходит", точка останова внутри onEntityInitialized вообще не передается на исполнение.

Нравится

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

Просто в странице в методе init описан onEntityInitialized, а в разделе - нет. Как вариант можно заместить базовую схему страницы и написать что-то своё:

init: function(callback, scope) {
	var performanceManagerLabel = "";
	if (scope && scope.hasOwnProperty("sandbox")) {
		performanceManagerLabel = scope.sandbox.id;
	} else if (this && this.hasOwnProperty("sandbox")) {
		performanceManagerLabel = this.sandbox.id;
	}
	performanceManager.start(performanceManagerLabel + "_Init");
	this.callParent([function() {
		Terrasoft.chain(
			this.checkAvailability,
			this.initViewModelValuesFromSysSettings,
			this.initActiveViewSettingsProfile,
			this.initData,
			this.initLeftSectionContainerSize,
			function(next) {
				this.canUseWizard(function(result) {
					this.set("CanUseWizard", result);
				}, this);
				this.checkCanManageAnalytics();
				this.initSectionFiltersCollection();
				this.initSortActionItems();
				this.initDataViews();
				this.initActionButtonMenu("Separate", this.getSectionActions());
				this.initSectionViewOptionsButtonMenu(this.getViewOptions());
				this.initDcmActionsDashboardVisibility(function() {
					this.initCanUseDcmDesigner();
				}, this);
				this.initEditPages();
				this.initCardContainer();
				this.initContextHelp();
				this.initAddRecordButtonParameters();
				this.initFolders();
				this.initRowCount();
				this.initIsPageable();
				this.initIsActionButtonsContainerVisible();
				this.initUpdateAction();
				this.initResetAction();
				this.subscribeInitFilterFromStorage();
				this.initActionsButtonHeaderMenuItemCaption();
				this.subscribeSandboxEvents();
				this.mixins.GridUtilities.init.call(this);
				this.subscribeIsCardVisibleChange();
				this.subscribeGetRunProcessesProperties();
				this.initRunProcessButtonMenu(false);
				this.subscribeCanShowTags();
				this.initActionsButtonCaption();
				this.subscibeOnMultiSelectChange();
				this.subscibeOnSelectedRowsChange();
				this.initTags(this.entitySchemaName);
				this.initSectionHeaderContainerVisibility();
				next();
			},
			function(next) {
				this.onSectionInitialized();
				next();
			},
			function() {
				performanceManager.stop(performanceManagerLabel + "_Init");
				performanceManager.start(performanceManagerLabel + "_BeforeRender");
				callback.call(scope);
			}, this);
		this.initHelpUrl(this.Terrasoft.emptyFn, this);
		this.initPrintButtonsMenu(this.Terrasoft.emptyFn, this);
	}, this]);
},
onSectionInitialized: function() {
	debugger;
}

Но работать будет немного криво (пр.: у меня при остановке на дебагере в "GridData" валяется пустая коллекция. Инициализируется она, видимо, позже). Посмотрите, может вам подойдёт.

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

Добрый день. Проблема при переносе из SVN. Был изменен базовый раздел "Продукты" с одной страницы редактирования, на несколько. Все это залито в svn, а потом перенесено на чистое приложение(версии одинаковые 7.9.1.3284) и при открытии раздела "Продукты" мастером раздела стоит галка "Использовать одну страницу для всех записей" => все работает не корректно(поля справочника к которому было привязано несколько страниц не заполняется, первая страница не открывается)

Нравится

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

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

После установки пакета из SVN необходимо выполнить следующие действия:
 
1. Сгенерировать для требующих генерации.
2. Компилировать все.
3. Выбрать элементы, структура которых менялась. Обновить для них структуру БД.
4. На вкладке Данные отобразить колонки Текст последней ошибки и Требует установки в БД. Установить выбранные элементы.
5. На вкладке SQL сценарии Установить выбранные элементы.

?

+ добавить в пакет привязку данных со справочника на который идет типизация.

Все это сделал и не один раз(чистую базу разворачивал, снова заливал пакет).
Данный к справочнику привязаны. Он же переносит и почему то показывает 3 из 4х, а первый пункт меняет на стандартный "

Добрый день, Павел.

Уточните пожалуйста к каким схемам привязанные данные, которые вы переносите?

Мария, добрый день. Не совсем понял вопрос. Данные привязаны в данных (создавался объект(родитель базовый справочник), добавил в справочники этот объект, заполнил и привязал данные из этого объекта).

Здравствуйте, Павел.

"Павел И" написал:

Мария, добрый день. Не совсем понял вопрос. Данные привязаны в данных (создавался объект(родитель базовый справочник), добавил в справочники этот объект, заполнил и привязал данные из этого объекта).

Прикрепленный файлРазмер

123.jpg
17.72 кб

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

3 из 4х было перенесено, а которая работает не корректно как раз не перенеслась. При редактировании мастером раздела эти данные должны создаваться автоматически? Если нет, то можно инструкцию как правильно привязать данные после редактирования.

))) смешно...но сам столкнулся с такой проблемой.
В пакете- данные отражаются. Но после компиляции их все равно в БД нет. 7.9.1

Павел, если при установке данных не возникло ошибок проблема может быть в не корректной привязке данных. Рекомендуем ознакомиться с инструкцией привязки данных: https://academy.terrasoft.ru/documents/technic-sdkmp/7-9/privyazka-dann….

Для более детального анализа проблемы не достаточно данных. Рекомендуем вам провести отладку кода и обратиться в Техническую поддержку Террасофт.

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

В рабочее место не добавляются созданные разделы, после создания в пакете объект появляется но в списке разделов добавляемых рабочему месту этих разделов нет.

Я вам предоставлю скриншот в комментарии, мы находимся в рабочем месте "Продажи".
Через мастер разделов я создал 2 раздела, Смета и Материалы, (Estimate, Materials), и в пакете они отображаются а при добавлении в рабочее место "Продажи" в списке всех разделов этих двух разделов нет.

1.Пакет по умолчанию стоит мой для разработки. (не Custom)
2.В SVN комитов не делал.
3.Разделы спокойно удаляются и снова создаются с тем же именем, но добавить их нельзя, их нет в списке.

Нравится

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

Иногда разделы создаются "недоконца", сам сталкивался пару раз.

Я делал так http://www.community.terrasoft.ru/forum/topic/25155 (внутри ссылка на faq)

только обратите внимание чтобы объекты не были заблокированы перед удаление

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

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

"Мотков Илья" написал:
Максим, здравствуйте!

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


Пакет по умолчанию стоит мой для разработки. (не Custom)

Добры день.

При создании нового раздела в таблицу SysModule должна добавиться запись для созданного раздела. Рекомендуем вам проверить наличие записей в таблице SysModule для разделов Смета и Материалы, (Estimate, Materials). Если в указанной таблице существуют записи для этих разделов, выполните компиляцию в Конфигурации. В случае возникновения ошибок при компиляции их необходимо проанализировать и выполнить шаги по их исправлению.

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

Начну, пожалуй, с описания кейса.
Есть некий раздел, который называется "Заявки АХО".
В этом разделе необходимо добавить функционал визирования (как в договорах, например).

Что готово на данный момент:
1. Полностью реализованы бизнес-процессы (главный и саб-процесс).
2. Готовы нужные системные настройки.
3. Добавлено администрирование по записям, для объекта визы.
4. Настроен шаблон email уведомления (не совсем уверен, что настроен правильно).

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

Итак прилагаю все возможные скриншоты и готов приложить больше если потребуется.
Так же прикрепляю два файла:
1. HTML-код шаблона для уведомления.
2. C# код для провайдера, тот самый с которым нужна помощь.

Нравится

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

Дополнение.
Список и содержимое localizableStrings:
BodyTemplate - Заявка АХО {0} от {1} требует визы.
TitleTemplate - Требуется утверждение.
DateMacros - dd.MM.yyyy

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

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

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