Скачала приложение Zoom Meeting https://marketplace.terrasoft.ua/app/zoom-meeting-connector-creatio, прошла все этапы настройки и столкнулась с проблемой что не могу установить признак 'Создать ZOOM Конференцию' в Активности, галочка заблокирована, как ее разблокировать? может что то сделала  не верно?

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

Нравится

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

Всем привет! 
При вызове метода onButtonClick необходимо проверять права у текущего юзера. Столкнулся с проблемой чтения прав. Похожая проблема обсуждалась тут, но линк неактивен.
https://community.terrasoft.ua/questions/kak-poluchit-dostup-do-sysadmi…

Есть такой код: 

initData: function() {
					this.initializeActionButtons();
					this.callParent(arguments);
					this.isUserInRole(JSConst.SYS_ADMIN_UNIT_ROLE.ROLE.SALES_MANAGER);
					this.isUserInRole(JSConst.SYS_ADMIN_UNIT_ROLE.ROLE.SALES_DEPARTMENT_MANAGER);
					this.isUserInRole(JSConst.SYS_ADMIN_UNIT_ROLE.ROLE.SYS_ADMIN);
				},
 
 
isUserInRole: function(roleId) {
					var currentUserId = Terrasoft.core.enums.SysValue.CURRENT_USER;
 
					var esqCheckUserPossibility = Ext.create("Terrasoft.EntitySchemaQuery", {
						rootSchemaName: "SysAdminUnitInRole"
					});
					esqCheckUserPossibility.addColumn("id");
                    esqCheckUserPossibility.filters.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
                    var currentUserInRole = esqCheckUserPossibility.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.EQUAL, 
						"SysAdminUnit",
						currentUserId);
                    var isBelongToRoleFilter = esqCheckUserPossibility.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.EQUAL, 
						"SysAdminUnitRoleId", 
						roleId);	
 
					esqCheckUserPossibility.filters.add("UserFilter", currentUserInRole);
					esqCheckUserPossibility.filters.add("isBelongToRoleFilter", isBelongToRoleFilter);
 
                    esqCheckUserPossibility.getEntityCollection(function (response) {
                        if (!response && !response.success) {
		             		return;
	        	    	}
						if(!response.collection.isEmpty()) {
							if(roleId == JSConst.SYS_ADMIN_UNIT_ROLE.ROLE.SALES_MANAGER) {
								this.$IsUserHasSalesManagerRole = true;
							}
							else if(roleId == JSConst.SYS_ADMIN_UNIT_ROLE.ROLE.SALES_DEPARTMENT_MANAGER) {
								this.$IsUserHasSalesDepartmentManagerRole = true;
							}
							else if(roleId == JSConst.SYS_ADMIN_UNIT_ROLE.ROLE.SYS_ADMIN) {
								this.$IsUserHasSysAdminRole = true;
							}
							return;
                    	}
						/*
                        if (callback) {
                            callback.call(scope || this);
                        }
						*/
                    },this);
				},
 
onUpdateServiceProvisionClick: function() {
					if(this.$IsUserHasSalesManagerRole || this.$IsUserHasSalesDepartmentManagerRole) {
						if(this.$IsUserHasSysAdminRole) {
							this.callServiceProvisionService(this.$MasterRecordId, this.onCallServiceProvisionServiceCallback, this);
						}
						else { 
                          	var message = this.get("Resources.Strings.MessageDependsOnUserRoleCaption");
							this.showInformationDialog(message);
						}
                    }
					else { 
						this.callServiceProvisionService(this.$MasterRecordId, this.onCallServiceProvisionServiceCallback, this);
					}
                },

в методе isUserInRole(roleId) беру id текущего юзера 
var currentUserId = Terrasoft.core.enums.SysValue.CURRENT_USER;
При подстановке тестовых айдишников в переменную currentUserId все ок, логика отрабатывает как надо потому что я под своей учеткой. Если зайти под учеткой менеджера при первом вызове метода ловлю в консоли ошибку "Недостаточно прав на чтение из таблицы SysAdminUnitInRole"

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

Нравится

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

Владислав, добрый день!
Доступ к объекту SysAdminUnitInRole происходит через веб-сервисы. Это связано с безопасностью – по этой причине через ESQ получить данные не получится. Для решения Вашей задачи рекомендую обратить внимание на схему детали SysFuncRoleInUserDetailV2. Выборка данных происходит по объекту SysUserInRole, а не по объекту SysAdminUnitInRole. Попробуйте работать с другим объектом.

Владислав, добрый день!
Доступ к объекту SysAdminUnitInRole происходит через веб-сервисы. Это связано с безопасностью – по этой причине через ESQ получить данные не получится. Для решения Вашей задачи рекомендую обратить внимание на схему детали SysFuncRoleInUserDetailV2. Выборка данных происходит по объекту SysUserInRole, а не по объекту SysAdminUnitInRole. Попробуйте работать с другим объектом.

Дима Вовченко,
Спасибо! 

или же написать вызов сервиса на c# и там все решить и вернуть ответ

Стас Гаврилюк,

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

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

Всех приветствую!
Подскажите, пожалуйста, как изменить статично значение заголовка на странице редактирования?


Страница унаследована от BaseModulePageV2, версия 7.17.2
 

getHeader: function() {
            	return this.get("Resources.Strings.PageSettingsCaption");
            },
 
            initHeaderCaption: Ext.emptyFn,
 
			init: function() {
				this.getHeader();
				this.callParent(arguments);
			},

 

Нравится

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

Здравствуйте Владислав,

 

Если необходимо изменить значение "Новая запись" на какое-либо другое, то необходимо изменить значение локал.строке "DefaultPageHeaderCaption". Само проставление значения происходит в subscribeSandboxEvents методе MainHeaderSchema здесь:

this.sandbox.subscribe("UpdatePageHeaderCaption", function(args) {
					if (args.hasOwnProperty("pageHeaderCaption")) {
						this.set("PageHeaderCaption", args.pageHeaderCaption ||
							this.get("Resources.Strings.DefaultPageHeaderCaption"));
					}
				}, this);

Это подписка на сообщение, которое отправляется из метода updatePageHeaderCaption модуля BasePageV2:

updatePageHeaderCaption: function(changedColumnName) {
				if (this.getIsFeatureDisabled("OldUI")) {
					if (!changedColumnName || this.get("PageHeaderColumnNames").indexOf(changedColumnName) > -1) {
						if (this.get("IsEntityInitialized")) {
							var caption = this.getPageHeaderCaption();
							this.sandbox.publish("UpdatePageHeaderCaption", {
								pageHeaderCaption: caption
							});
						}
					}
				}
			},

Если же Вам необходимо изменить заголовок только одной странице, то необходимо в методах модуля этой страницы заместить метод updatePageHeaderCaption. Например вот так (это я в разделе контактов отключил миникарточку и добавил этот метод в ContactPageV2):

updatePageHeaderCaption: function() {
        this.callParent(arguments);
        this.sandbox.publish("UpdatePageHeaderCaption", {
								pageHeaderCaption: "For contacts"
							});
      }
 

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

И последнее: как правило в заголовке отображается значение в колонке, которая выбрана как Displayed value в настройках объекта, которую страница отображает:

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

 

С уважением,

Олег

Здравствуйте Владислав,

 

Если необходимо изменить значение "Новая запись" на какое-либо другое, то необходимо изменить значение локал.строке "DefaultPageHeaderCaption". Само проставление значения происходит в subscribeSandboxEvents методе MainHeaderSchema здесь:

this.sandbox.subscribe("UpdatePageHeaderCaption", function(args) {
					if (args.hasOwnProperty("pageHeaderCaption")) {
						this.set("PageHeaderCaption", args.pageHeaderCaption ||
							this.get("Resources.Strings.DefaultPageHeaderCaption"));
					}
				}, this);

Это подписка на сообщение, которое отправляется из метода updatePageHeaderCaption модуля BasePageV2:

updatePageHeaderCaption: function(changedColumnName) {
				if (this.getIsFeatureDisabled("OldUI")) {
					if (!changedColumnName || this.get("PageHeaderColumnNames").indexOf(changedColumnName) > -1) {
						if (this.get("IsEntityInitialized")) {
							var caption = this.getPageHeaderCaption();
							this.sandbox.publish("UpdatePageHeaderCaption", {
								pageHeaderCaption: caption
							});
						}
					}
				}
			},

Если же Вам необходимо изменить заголовок только одной странице, то необходимо в методах модуля этой страницы заместить метод updatePageHeaderCaption. Например вот так (это я в разделе контактов отключил миникарточку и добавил этот метод в ContactPageV2):

updatePageHeaderCaption: function() {
        this.callParent(arguments);
        this.sandbox.publish("UpdatePageHeaderCaption", {
								pageHeaderCaption: "For contacts"
							});
      }
 

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

И последнее: как правило в заголовке отображается значение в колонке, которая выбрана как Displayed value в настройках объекта, которую страница отображает:

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

 

С уважением,

Олег

Oleg Drobina,

Спасибо большое за помощь! 

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

Добрый день.

После обновления до 7.18.5 на среде on-site перестали открываться карточки редактирования по БП, открываются только через CTI панель. В статье https://academy.terrasoft.ua/docs/user/razvertyvanie_onsite/windows_net_framework/nastroika_vebsoketov/nastroit_vebsokety указанны 3 способа проверки корректной настройки WebSocket-тов. 2 из них у меня проходят успешно, а 3-й как раз открытие карточек из БП. Все рекомендации из статьи выполнил.

Возможно есть еще настройки на которые надо обратить внимание?

Спасибо.

Нравится

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

Добрый день.
Для корректной работы Websockets нужно проверить:
1)Убедиться что в Windows установлен компонент: Application Development - WebSocket Protocol
2) Во всех байндингах сайта должен быть указан один и тот же порт.
3) Настройка пула [Maximum Worker Process] должна иметь значение "1"
4) В Web.config загрузчика и приложения, на всех нодах фермы, должен быть указан один и тот-же machineKey
5) TenantId не должны дублироваться с разными значениями, как в одном и том-же web.config, так и web.config загрузчика и приложения одной ноды.
6)Установлен ли протокол использования вебсокетов для прокси-сервера, если он используется в вашей локальной сети.
7) Настройки антивируса и Firewall. Если нет возможности отключить на сервере эти программы, добавьте IP-адрес и порт вашего сайта Creatio в список исключений для входящих и исходящих потоков.
8) Наличие расширений и надстроек web-браузера, в том числе VPN. Расширения могут блокировать работу вебсокетов.

Если websocket-ы работают корректно, а страница редактирования не открывается, то нужно проверить параметр "portForClientConnection" в web.config.
Укажите в нем порт на котором работает приложение.

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

 В кастомном веб-сервисе есть метод создания договора, иногда срабатыват, а иногда нет, и пишет ошибку:
Terrasoft.Core.ProcessRunBySignalException: Ошибка при запуске процесса "Типовой договор", инициируемого событием "начальный сигнал". 

Кто-нибудь сталкивался с этим? Пытался найти процесс такой, но безуспешно.

Нравится

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

код метода создания договора можно?

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

Нужно для правильной возвращаемой структуры типов CompositeObject, без Key/Value, а нативно - {"key": value}

 

Нравится

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

нативно, имеешь ввиду через jobject? или имеешь ввиду задать column key кастомный, если оно, то аннотация(не помню как с# это называется) jsonproperty может помочь наверное

[JsonProperty("Ref_Key", NullValueHandling = NullValueHandling.Ignore)]
или имеешь ввиду избавиться от имени метода в возвращаемом объекте?
тогда наверное стоит юзать это BodyStyle = WebMessageBodyStyle.Bare в аннотации

 [OperationContract]

        [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json,RequestFormat =

        WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
в этом случае, тебе не надо будет писать название объекта передаваемого в тело метода и возвращаемом тоже не будет его в названии
типа так user:{name:"3213"} станет {name:"3232"}
 

Dima Avdoshin,

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

 

задача сама в том что возвращать сразу красиво, а не через строку  через - JsonConvert.SerializeObject.

сейчас на такой код в сервисе: 

 

        [OperationContract]
        [WebInvoke(Method = "GET", 
            RequestFormat = WebMessageFormat.Json, 
            BodyStyle = WebMessageBodyStyle.Wrapped,
            ResponseFormat = WebMessageFormat.Json,
            UriTemplate = "/ping/{s}")]
            [return: MessageParameter(Name = "data")]
        public object Pong(string s) {
            var res = new CompositeObject();
            res.Add("ping", "pong");
            return res;
        }

 

получаем такой ответ: 

 

{

"data": [

{

"Key": "ping",

"Value": "pong"

}

]

}

 

а надо: {"data":  [{ "ping": "pong"}]} или если короче, то что возвращает JsonConvert.

Стас Гаврилюк,
не решал такого рода задачу, но вот что нагуглил https://stackoverflow.com/questions/17806811/dynamic-objects-in-wcf-not…

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

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

Нравится

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

Здравствуйте, Олег!

 

В основном приложении, в разделе [Системные настройки] есть настройка с кодом [MobileSectionsWithSearchOnly]. Она отвечает за список разделов в мобильном приложении, данные в которых отображаются только через использование поиска.
Если в поле [Значение по умолчанию] проставить значение "0", то во всех разделах записи будут сразу отображаться, без использования поиска.

Если необходимо, чтобы в некоторых разделах записи отображались лишь через использование поиска, требуется прописать в поле [Значение по умолчанию] список объектов разделов, разделяемых точкой с запятой.
 

Эта логика задействована по нескольким причинам:
- с целью уменьшения потребления трафика на моб. приложении;
- уменьшение запросов к серверу на select, что снижает нагрузку на БД;
- зачастую, в рабочей практике, нет необходимости листать весь список записей, а удобнее просматривать список недавних.
 

На СУБД PostgreSQL нет данной настройки, поэтому есть обходное решение для отображения записей в разделах мобильного приложения.
Так как настройки нет, за основу берется фича UseMobileSearchOnlyInSections и режим работы приложения (онлайн-режим). Если фичу отключить, то данные в разделах будут подгружаться автоматически в моб. приложении в онлайн режиме. В оффлайн режиме все записи в разделах кешируются по умолчанию.

Скрипт по включению/выключению фичей ниже:
https://academy.terrasoft.ua/docs/developer/ehlementy_interfejsa/upravl…

 

Частично описание настроек мобильного приложения есть на Академии:
https://academy.terrasoft.ua/docs/8-0/user/ustanovka_i_administrirovani…

 

Так же некоторые настройки подписаны в самом приложении, если их открыть в разделе "Системные настройки".

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

Подскажите сталкивался ли кто-то с тем, что в правах доступа на объект не удавалось выбрать операцию экспорта (http://joxi.ru/n2Y3DL1ckOyQ5r) список пустой (версия 7.18.5)?

Может кто-то нашел решение?

Нравится

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

Добрый день!

Столкнулись с такой проблемой.

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

При отработки бизнес-процесса пользователю летит письмо с гиперссылкой на конкретную запись в разделе "Встреча".

Пользователь переходит по ссылке - открывается раздел Активности.

 

Дополнительные моменты

1. У пользователя есть доступ к данной записи - он может в нее перейти через уведомления (дополнительная возможность перехода в запись)

2. Раздел скрыт от пользователя

3. Если переходить по гиперссылке под учеткой Supervisor, то запись открывается.

 

Вопрос - почему не открывается запись у обычного пользователя?

Нравится

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

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

 

Пробовали очистить кэш Redis командой flushall?

Работа данного функционала завязана на пользовательский кэш. 

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

Проблему решили. Нужно было раздел показать пользователям.

Но все равно это странно. По уведомлению можно перейти на запись в скрытом разделе, а по гиперссылке из письма нет - почему?

Добрый день!

Прошу пояснить - почему по ссылке из уведомления можно попасть на запись в скрытом разделе, а по гиперссылке нельзя?

Пробуйте передавать ссылку в таком формате:

 

https://site/Navigation/Navigation.aspx?schemaName=Activity&recordId=ab3ea5de-f333-4580-8fa1-70b64db8a2d3
Где schemaName=Название схемы, recordId=id записи

 

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

не помогло

 

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

https://click.mail.ru/redir?u=https%3A%2F%2F_______.creatio.com%2FNavig…

 

а если идти по ссылке из уведомления, то я проваливаюсь на страницу page

https://______.creatio.com/0/Nui/ViewModule.aspx#CardModuleV2/NavEventN…

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

Добрый день.

Разворачиваю на тестовом стенде 7.18.5.1500_SalesEnterprise_Softkey_MSSQL_ENU

Под пользователем Supervisor при первом входе выбивает ошибку:

 

Server Error in '/0' Application.

Configuration Error

Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

Parser Error Message: Не удалось загрузить файл или сборку "Terrasoft.WebApp" либо одну из их зависимостей. Не удается найти указанный файл.

Source Error:
 

Line 656:        </eventMappings>
Line 657:        <providers>
Line 658:          <add name="FileWebEventProvider" type="Terrasoft.WebApp.FileWebEventProvider, Terrasoft.WebApp" />
Line 659:        </providers>
Line 660:        <profiles>

Source File: C:\inetpub\wwwroot\7.18.5.1500_Sales\Terrasoft.WebApp\web.config    Line: 658

 

_________________

Нашёл упоминание о подобное проблеме ранее:

https://community.creatio.com/questions/site-installation-creatio-7162

ndp472-devpack-enu и dotnet-sdk-3.1.301-win-x64 ставил, не помогло.

Есть идеи что не так?

Assembly Load Trace: The following information can be helpful to determine why the assembly 'Terrasoft.WebApp' could not be loaded.

Нравится

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

Добрый день.

 

Проверьте в настройках сайта в IIS у Вас добавлено приложение 0 и правильно ли для него указана директория?

 

В этой инструкции пункт 3 и 4.

Добрый день.

 

Проверьте в настройках сайта в IIS у Вас добавлено приложение 0 и правильно ли для него указана директория?

 

В этой инструкции пункт 3 и 4.

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