Сторонняя система вызывает бизнес-процесс, передавая в него входящие параметры:

http://my.site.name/0/ServiceModel/ProcessEngineService.svc/UsrTestProcess/Execute?Number=123456



Далее процесс производит некоторую обработку, создаёт активность и открывает страницу с ней с помощью скрипта:

 

Guid activityId = Get<Guid>("UsrActivityId");
 
string messageText = "{\"hash\": \"CardModuleV2/ActivityPageV2/edit/" + activityId.ToString() + "\"}";
MsgChannelUtilities.PostMessageToAll("PushHistoryState", messageText);
 
return true;

Всё работает, но страница открывается не в той вкладке, в которой была открыта ссылка (а она остаётся пустой). Как сделать так, чтобы страница открывалась в той же вкладке браузера, в которой и произошёл вызов процесса?

Нравится

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

Владимир, если я правильно поняла вашу задачу, то при вызове сервиса из новой вкладки страница не откроется, поскольку в данной вкладке не установлено активное web-сокетное подключение с приложением. Вызывая сервис указанным способом вы отправляете get запрос.

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

При работе с ESQ на стороне сервера столкнулся с проблемой при добавлении фильтров.

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

var esq = new EntitySchemaQuery("AdaptationActivities");
 
esq.CreateFilter(FilterComparisonType.Equal,
 
                "AdaptationsSettings.[Adaptations:Status:Status].Employee.Job",
 
                "AdaptationsSettings.EmployeeJob");

Вместо AdaptationsSettings.EmployeeJobId на выходе при запросе в бд я получаю AdaptationActivities.EmployeeJobId.

Это баг в esq? Или так этот инструмент нельзя использовать?

Нравится

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

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

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

Было создано ручками более сотни Привязок данных, автоматический более 500 штук с типом Данных в Конфигурациях. Кто-нибудь решал вопрос с актуализацией данных? Как массово их актуализировать? Во время разработки куча изменений и очень трудоемко каждый запись актуализировать отдельно.

Нравится

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

Специального механизма массовой актуализации данных в интерфейсе нет.

 

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

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

Есть необходимость настроить сортировку в выпадающем списке редактируемого реестра. 

 

На обычной странице мы решаем эту проблему через атрибут:

"State": {

              lookupListConfig: {

                orders: [{columnPath: "SortCode"}]

              }

            },

 

однако очевидно на детали это не отрабатывает.

 

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

Нравится

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

Если нужно сортировать список в колонке MyColumn по полю справочника SortCode, нужно описать такой метод в схеме детали

getGridRowViewModelConfig: function(config) {
                var result = this.callParent(arguments);
                if (result &amp;&amp; result.rowConfig &amp;&amp; result.rowConfig.MyColumn) {
                    result.rowConfig.MyColumn.lookupListConfig = {
                        orders: [{columnPath: "SortCode", direction: Terrasoft.OrderDirection.DESC}]
                    };
                }
                return result;
            },

 

 

 

Если нужно сортировать список в колонке MyColumn по полю справочника SortCode, нужно описать такой метод в схеме детали

getGridRowViewModelConfig: function(config) {
                var result = this.callParent(arguments);
                if (result &amp;&amp; result.rowConfig &amp;&amp; result.rowConfig.MyColumn) {
                    result.rowConfig.MyColumn.lookupListConfig = {
                        orders: [{columnPath: "SortCode", direction: Terrasoft.OrderDirection.DESC}]
                    };
                }
                return result;
            },

 

 

 

Вадим Курунов,

Спасибо!

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

Добрый день!

У меня есть два разных пакета, в которых происходит замещение модуля BasePageV2, в каждом модуле замещается функция onSaved().

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

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

Нравится

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

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

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

Татьяна, для перекрытия логики по родительскому сигналу ещё вы можете в дочернем БП объекта подписаться на аналогичное событие объекта и в скрипте перед return true  добавить ActivatedEventElements.Remove ("Событие").

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

Добрый день!



Вывод значения из справочника достаю с помощью this.loadLookupDisplayValue("Account", this.$InitialAccountId); (поле Контрагент нового документа) :

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

Возник такой вопрос : как вывести на страницу значение справочника, как значение по которому можно перейти как по ссылке (как у поля ответственный менеджер)?

Нравится

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

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

 

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

Алла Савельева,

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

У меня создан раздел под этот справочник, но гиперссылка не выводится.



Возможно нужно добавить дополнительный параметр в блоке diff для этого элемента?

Сергей Уделов,

В разделе, на который ссылается поле "Контрагент нового документа",  есть ли возможность перейти на запись с указанным названием?

Сергей Уделов пишет:

Возможно нужно добавить дополнительный параметр в блоке diff для этого элемента?

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

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

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

Добрый день.

После перехода на ExchengeListener Service, появилась проблема с определением входящих писем в таблице Activity: для исходящих писем в поле MessageTypeId указывается правильный тип письма "Outgoing", а для входящих писем данное поле не заполняется вообще, т.е. имеет значение null.

Подскажите, пожалуйста, в чем может быть проблема?

Нравится

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

Добрый день.

Вы можете сделать join из таблицы ActivityParticipantRole по колонке RoleId таблицы EmailMessageData.

Таблица ActivityParticipantRole хранит в себе нужные Вам данные. 

Была такая же проблема - поддержка посоветовала не использовать MessageType, а работать с таблицей EmailMessageData

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

А как из таблицы EmailMessageData понять какое письмо входящее, а какое исходящее?

Добрый день.

Вы можете сделать join из таблицы ActivityParticipantRole по колонке RoleId таблицы EmailMessageData.

Таблица ActivityParticipantRole хранит в себе нужные Вам данные. 

Cherednichenko Nikita,

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

Действительно если построить join, то по полю ActivityParticipantRole.Code можно определить входящее или исходящее письмо(From/To).

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

Добрый день!

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

Данная ошибка актуальна только для определённого логина.

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

Нравится

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

Runtime Error

Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.



Details: To enable the details of this specific error message to be viewable on remote machines, please create a <customErrors> tag within a "web.config" configuration file located in the root directory of the current web application. This <customErrors> tag should then have its "mode" attribute set to "Off".

 

&lt;!-- Web.Config Configuration File --&gt;
 
&lt;configuration&gt;
    &lt;system.web&gt;
        &lt;customErrors mode="Off"/&gt;
    &lt;/system.web&gt;
&lt;/configuration&gt;



Notes: The current error page you are seeing can be replaced by a custom error page by modifying the "defaultRedirect" attribute of the application's <customErrors> configuration tag to point to a custom error page URL.

 

&lt;!-- Web.Config Configuration File --&gt;
 
&lt;configuration&gt;
    &lt;system.web&gt;
        &lt;customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/&gt;
    &lt;/system.web&gt;
&lt;/configuration&gt;

Валерий Шишкин,

Для выяснения причины понадобится дополнительная информация, та как сейчас отображается общая ошибка. Что можно сделать:

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

2. В файле \web.config, которые лежит в папке приложения, установить значение Off параметру customErrors:

 

customErrors mode="Off"

 

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

 

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

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

Добрый день!

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

Нравится

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

Если вы про упоминание в ленте, то отлавливайте в процессе событие объекта SocialMention. Мы таким образом тегнутых добавляем в участники активности

Если вы про упоминание в ленте, то отлавливайте в процессе событие объекта SocialMention. Мы таким образом тегнутых добавляем в участники активности

Владимир Соколов,

да, это то, что нужно, спасибо!)

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

у меня есть процесс, который синхронизирует РУССКИЕ названия контрагентов, проблема в том, что если мы заходим под английской культурой, то название на английском, становятся на русском, после выполнения моего процесса, как задать привязку к культуре в esq запросе на шарпе

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

 

esqAccount.SetLocalizationCultureId(new Guid("1a778e3f-0a8e-e111-84a3-00155d054c03"));

что бы было понятно каким образом я делаю апдейт колонки прикладываю код ниже 

var esqAccount = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Account");
esqAccount.AddAllSchemaColumns();
//устанавливаем RU
esqAccount.SetLocalizationCultureId(new Guid("1a778e3f-0a8e-e111-84a3-00155d054c03"));
var accounts = esqAccount.GetEntityCollection(UserConnection);
foreach (var accountItem in accounts) {
               accountItem.SetColumnValue("Name", description);
              accountItem.Save(false);
}

 

Нравится

3 комментария
Лучший ответ
EntitySchemaQuery esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Account");
esq.AddAllSchemaColumns();
 
esq.Filters.LogicalOperation = LogicalOperationStrict.Or;
esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Id", id));
EntityCollection entities = esq.GetEntityCollection(UserConnection);
 
var localizableString = new LocalizableString();
localizableString.SetCultureValue("ru-RU", "Синий");
localizableString.SetCultureValue("en-US", "Blue");
 
foreach (Entity entity in entities)
{
	entity.SetColumnValue("Name", localizableString);
	entity.Save(false);
}

 

EntitySchemaQuery esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Account");
esq.AddAllSchemaColumns();
 
esq.Filters.LogicalOperation = LogicalOperationStrict.Or;
esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Id", id));
EntityCollection entities = esq.GetEntityCollection(UserConnection);
 
var localizableString = new LocalizableString();
localizableString.SetCultureValue("ru-RU", "Синий");
localizableString.SetCultureValue("en-US", "Blue");
 
foreach (Entity entity in entities)
{
	entity.SetColumnValue("Name", localizableString);
	entity.Save(false);
}

 

у setculturevalue нет перегрузки с строкой, верно будет подать следующий объект 

CultureInfo cultureRu = CultureInfo.GetCultureInfo("ru-RU");

качестве культуры первым аргументом

Dima Avdoshin,

 

да, так верно

localizableString.SetCultureValue(new CultureInfo("ru-RU"), "Синий");

пример из документаций https://academy.terrasoft.ru/docs/developer/back-end_development/localizable_resources/operatsii_s_lokalizuyemymi_resursami#title-2174-7

 

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