Добрый день

Контекстное меню в реестре "Перейти к": как сделать, чтобы ссылки на объекты открывались в новом окне?

Нравится

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

Здравствуйте, Антон!
Переход осуществляется в скрипте "MoveToModuleScript" страницы "MainPage". Можно попробовать его модифицировать так, чтобы страница открывалась в новой вкладке.

Показать все комментарии
TreeGrid
Технические вопросы
5.x

Добрый день!
Столкнулся с проблемой перехвата события TreeGridDblClick: при создании пустого скрипта с кодом "return true;" окно редактирования открывается. Если вместо true вовзращать false - открывет 2 окна редактирования.
Соседние темы смотрел, GetRegisterTreeGridDblClickScript пробовал переопределять.
Подсткажите, в чём может быть проблема?
Версия 5.2.0.660

Нравится

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

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

Здравствуйте, Андрей.

Уточните задачу, которую пытаетесь выполнить. Вам необходимо запретить действие по событию или расширить обработку?

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

Андрей, в 5.2 Вы можете переопределить GetRegisterEditPageScript для запрета обработки двойного нажатия по реестру, но нажатие на кнопку тоже обрабатываться не будет.

Его переопределять в базовом классе?
Или наследовать и переопределять?

В наследнике. Открываете процесс страницы реестра, находите метод в структуре, выделяете, там будет чекбокс Переопределен и memoedit с телом скрипта. Добавляете в начале

returm string.Empty;

и публикуете.

Спасибо, работает.

Показать все комментарии
7.x
веб-сервис
Технические вопросы

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

Нравится

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

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

Здравствуйте, Эмин!
В продолжение комментария Максима Гриценко

"Maxim Gritsenko" написал:

Здравствуйте, Эмин.

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

Теперь это представление в БД (VwRemindingsCount), которое хранит данные по уведомлениям. Из модуля панельки (LeftPanelTopMenuModule) отправляется запрос сервису напоминаний (RemindingService), который запускает процесс (GetRemindingCounters) выполняющий выборку из представления раз в минуту и передающий ответным запросом модулю панельки, который подписан на сообщения от этого процесса и получив сообщение обновляет счетчик.

По открытию страницы через веб-сервис ориентировок нет, это не приоритетная задача и в спринтах разработчиков я ее пока вообще не вижу.

можно переопределить LeftPanelTopMenuModule и в обработчике сообщения от процесса можно переходить на необходимую страницу. Однако, в 7.х это вызовет неудобства в работе пользователя, поэтому лучше открывать страницу активности хотя бы в другой вкладке, чтобы пользователь смог закончить работу на текущей странице, или просто вызывать "alert()" со ссылкой на страницу активности.

"Андрей Каспаревич" написал:

Здравствуйте, Эмин!


Спасибо за помощь.
Опишите, пожалуйста, как правильно переопределить LeftPanelTopMenuModule. Только начал разбираться с 7 версией BPM
При создании замещающего модуля и добавлении в него кода из родительского, кнопочки панели пропали

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

"Андрей Каспаревич" написал:


Огромное спасибо за помощь.

Показать все комментарии
Как можно отключить проверку на прав в EntitySchemaQuery (Terrasoft.Core.DB.QueryJoinRightLevel.Disabled)
Технические вопросы
5.x

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

Terrasoft.Core.DB.QueryJoinRightLevel.Disabled;

Мне нужно отключать в

EntitySchemaQuery
, примерный скрипт ниже:

var entitySchemaManager = UserConnection.EntitySchemaManager;
var activitySchema = entitySchemaManager.GetInstanceByName("Activity");
var callEntity = activitySchema.CreateEntity(UserConnection);
if (callEntity.FetchFromDB(NewCallId))

Версия 5.1.1.159

Нравится

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

Здравствуйте, Баглан.

Отключить проверку прав доступа на основной запрос нельзя. Можно воспользоваться insert-ом:

var now = System.DateTime.Now;
var insert = new Insert(UserConnection).Into("Activity")
	.Set("Title", Column.Const("My Activity"))
	.Set("StartDate", Column.Parameter(now));
insert.Execute();

Прямые инсерты игнорируют права доступа.

Показать все комментарии
DataTreeGridOnDragDrop
DataTreeGridOnDragDropSystemObjects
DataTreeGridOnDragOver
Технические вопросы
Разработка

Не срабатывают события на контроле tree-grid связанные с DragDrop. События попроще работают.

function DataTreeGridOnDragDrop(DataGrid, SourceDataGrid, DataGridColumn, RowIDs, DestinationRowID, DropMode, WithCtrl) {
    debugger;
}

function DataTreeGridOnDragDropSystemObjects(DataGrid, DataGridColumn, SystemObjectsList, DestinationRowID, DropMode, WithCtrl) {
debugger;
}

function DataTreeGridOnDragOver(DataGrid, SourceDataGrid, DataGridColumn, RowIDs, DestinationRowID, DropMode, WithCtrl, Accept) {
        debugger;
}

Версия: 3.4.0.141

Нравится

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

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

Михаил, проверила на версии 3.4.0.141 - события отрабатывают корректно.
Тестирование выполняла для сервиса wnd_OfferingsDetailTreeArea.

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

Показать все комментарии
OData P2 Contact
Технические вопросы
5.x

Подскажите, пожалуйста - иногда, при сохранении контакта через OData получаем вот такую ошибку: Для параметра "P2" со значением null необходимо указать тип данных.
Подскажите, чего ей не хватает?

version="1.0" encoding="utf-8"?> xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"> /> xml:lang="ru-RU">An error occurred while processing this request.>>>Для параметра "P2" со значением null необходимо указать тип данных>>Terrasoft.Common.InvalidObjectStateException>>   at Terrasoft.DB.MSSql.MSSqlExecutor.AddQueryParameterToSqlParameters(SqlParameterCollection sqlParameters, QueryParameter queryParameter)
   at Terrasoft.DB.MSSql.MSSqlExecutor.QueryParametersToDBParameters(QueryParameterCollection queryParameters, DbParameterCollection dbParameters)
   at Terrasoft.Core.DB.DBExecutor.Execute(String sqlText, QueryParameterCollection parameters)
   at Terrasoft.Core.DB.Query.Execute()
   at Terrasoft.Configuration.ContactEventsProcess`1.UpdateCampaignTargetCustomerScriptExecute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
   at Terrasoft.Configuration.ContactEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
   at Terrasoft.Configuration.ContactEventsProcess`1.OnExecuted(Object sender, ProcessActivityAfterEventArgs e)
   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
   at Terrasoft.Configuration.ContactEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
   at Terrasoft.Configuration.ContactEventsProcess`1.OnExecuted(Object sender, ProcessActivityAfterEventArgs e)
   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
   at Terrasoft.Configuration.ContactEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
   at Terrasoft.Configuration.ContactEventsProcess`1.OnExecuted(Object sender, ProcessActivityAfterEventArgs e)
   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
   at Terrasoft.Configuration.ContactEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
   at Terrasoft.Configuration.ContactEventsProcess`1.OnExecuted(Object sender, ProcessActivityAfterEventArgs e)
   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
   at Terrasoft.Configuration.ContactEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
   at Terrasoft.Configuration.ContactEventsProcess`1.OnExecuted(Object sender, ProcessActivityAfterEventArgs e)
   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
   at Terrasoft.Configuration.ContactEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
   at Terrasoft.Configuration.ContactEventsProcess`1.ThrowEvent(ProcessExecutingContext context, String message)
   at Terrasoft.Core.Entities.Entity.ThrowEvent(String message, EventArgs eventArgs)
   at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
   at Terrasoft.Core.Entities.Entity.OnSaved(EntityAfterEventArgs e)
   at Terrasoft.Core.Entities.Entity.Save(Boolean validateRequired)
   at Terrasoft.Core.Entities.Services.EntityLazyProxy.SaveChanges()
   at Terrasoft.Core.Entities.Services.ServiceContext.SaveChanges()
   at System.Data.Services.DataService`1.BatchDataService.HandleBatchContent(Stream responseStream)>>>

Нравится

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

Здравствуйте, Леонид!
Во-первых ,обращаю Ваше внимание, что Вы создаете темы в форуме "Terrasoft CRM 2.8", что несколько сбивает с толку.
Во-вторых, по поводу самого сообщения. Судя по тексту ошибки, это исключение SQL-сервера. Нужно смотреть, какой запрос идет на сервер, чтобы понять, что не так.

Простите, Андрей, не туда запостил.
Так вот, я создаю новый контакт через Odata, а судя по тексту ошибки в этот момент зачем-то пытается вызваться некий UpdateCampaignTargetCustomerScriptExecute, хотя никаких кампаний/воздействий e нас нет.

Леонид, этот скрипт выполняется каждый раз при сохранении контакта. в нем создается запрос, в котором, вероятно, возникает ошибка:

var contactId   = Entity.GetTypedColumnValue<string>("Id"); 
new Update(UserConnection, "CampaignTarget")
	.Set("Customer", Column.Parameter(contactName))
	.Where("ContactId").IsEqual(Column.Parameter(contactId))
	.Execute();

Думаю, в этом моменте значение в поле "Id" может отсутсвовать. Вы присваиваете значение для жтого поля при создании контакта?
Можно перед выполнением скрипта добавить проверку типа

var contactId   = Entity.GetTypedColumnValue<string>("Id");
if (contactId != string.Empty)
{ 
new Update(UserConnection, "CampaignTarget")
	.Set("Customer", Column.Parameter(contactName))
	.Where("ContactId").IsEqual(Column.Parameter(contactId))
	.Execute();
}
Показать все комментарии

Добрый день
Есть задача на основе существующего объекта "договоры" сделать новое рабочее место с разделом, где колонки будут другие в реестре по умолчанию.

Я как понял такая связь:
Рабочее место-Раздел-Реестр

Моя идея динамически подменять в разделе страницу реестра в зависимости от параметра.
Сейчас в private метода UpdateGrid есть:
Grid.PageSchemaUId = new Guid("dbb0c287-e452-4d51-99c1-6cd55f1fe1a8");
Хочу PageSchemaUId динамически ставить.

На какое событие лучше всего это делать?
Или есть проще варианты?

Нравится

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

Здравствуйте, Антон!
Подменять страницу реестра нужно в обработчике события "Init". Как вариант, можно создать новую страницу раздела, унаследовав ее от базовой страницы раздела договоров, в ней поменять страницу реестра на свою, и при регистрации раздела в рабочем месте уже использовать свою страницу раздела.

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

Антон, посмотрите "ScriptFindSelectedModuleSubProcess" в странице "MainPage". Там есть получение вкладки рабочего места:

var entitySchemaManager = Page.Schema.SchemaManagerProvider.GetManager("EntitySchemaManager") as Terrasoft.Core.Entities.EntitySchemaManager;
var entitySchemaQuery = new EntitySchemaQuery(entitySchemaManager, "SysModule");
EntitySchemaQueryColumn pageColumn = entitySchemaQuery.AddColumn("SysPageSchema.Id");
entitySchemaQuery.Filters.Add(entitySchemaQuery.CreateFilterWithParameters(FilterComparisonType.Equal, "Id", SelectedModuleId.ToString()));
var modulesCollection =	entitySchemaQuery.GetEntityCollection(userConnection);
if (modulesCollection.Count > 0)
{
	var selectedPageSchemaId = modulesCollection[0].GetColumnValue(pageColumn.Name);
	var workspaceId = Page.MultiLevelTabs.ActiveTab.Tag.Split('|')[0];
....

Думаю, это должно подойти.

Спасибо, разобрался.
Еще один вопрос:
Пытаюсь настроить колонки в дизайнере у реестра DataSource, но в нем не отображаются подчиненные объекты, а мне нужна колонка из него.
При этом, когда делаю настройку реестра через настроить колонки, там они есть.
Как то можно отобразить подчиненные объекты в дизайнере у DataSource ? Или как можно добавить в DataSource колонку из подчиненного объекта?

Антон,
1:

2:

"Андрей Каспаревич" написал:

Антон,

1:

2:

С уважением,

Каспаревич Андрей

Эксперт 3-й линии поддержки


Это понятно, я не об этом)
У datasource нет выбора колонок подчиненных объектов (напр Мониторинг).

Елси я правильно понял посыл Ваших скриншотов, то Мониторинг - это колонка обратной связи, поэтому ее нельзя вытащить в реестр. Как Вы себе представляете должен выглядеть реестр, если для одной записи главного объекта будет 1000 записей связанного?

"Андрей Каспаревич" написал:

Елси я правильно понял посыл Ваших скриншотов, то Мониторинг - это колонка обратной связи, поэтому ее нельзя вытащить в реестр. Как Вы себе представляете должен выглядеть реестр, если для одной записи главного объекта будет 1000 записей связанного?

С уважением,

Каспаревич Андрей

Эксперт 3-й линии поддержки


Я предполагал поведение, как если настраивать не через дизайнер колонки, т.е. идет агрегация данных(max, min, avg и т.п.).

Антон, такого поведения не предусмотрено базовой логикой для источника данных страницы.
Если Вам нужно эти данные использовать в коде, то их можно легко получить с помощью EntitySchemaQuery, например, или класса Select.

"Андрей Каспаревич" написал:

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

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

С уважением,

Каспаревич Андрей

Эксперт 3-й линии поддержки

А можете подсказать пример реестра в базовой конфигурации где DataSource определялся на основе EntitySchemaQuery?

Антон, источник данных не определяется на основе EntitySchemaQuery. С помощью EntitySchemaQuery Вы можете считать данные из БД. Зачем они Вам непосредственно в источнике данных?

Я думал у DataSource страницы на основе базовой страницы реестра как то можно привязать к EntitySchemaQuery.
Ок не будем углубляться) Сейчас я нашел решение на базе объектов-представлений и их уже к DataSource цепляю.

Спасибо.

Показать все комментарии
Как в процессе завершить взокон автоматом
Технические вопросы
5.x

Добрый день!
В процессе создается звонок и ее надо сразу же завершить, с результатом который я вставляю сам как константу?
Версия 5.1.1.159

Нравится

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

Здравствуйте, Баглан!
Можно сразу создавать активность в стадии "Завершена", либо использовать элемент "Изменить данные" для изменения стадии, или получать нужный экземпляр объекта с помощью "FetchFromDB", менять в нем нужные поля и сохранять.

"Андрей Каспаревич" написал:

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

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

С уважением,

Каспаревич Андрей

Эксперт 3-й линии поддержки


либо использовать элемент "Изменить данные" для изменения стадии ----- не понял, как это сделать можно, есть примеры

Баглан, пошу прощения, в 5.1 такого элемента как "Изменить данные" нет, поэтому этот вариант отпадает.
Вы можете модифицировать действие "CallUserTask", добавив в него параметр "Состояние активности" и при создании экземпляра объекта устанавливать свойство "Status" из этого параметра. Таким образом можно будет создавать звонок сразу в состоянии "Завершен".

Спасибо большое Андрей, получилось сделать.

Показать все комментарии
Технические вопросы
5.x

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

Мы перешли на летное время. На Windows сервере время автоматически поменялось. Но вот почему то текущая время на BPMOnline-не применяется. Дата регистрации запроса все еще указывает на зимнее время. Не значит ли это что, где-то на BPMOnline нужно поменять настройки?

Заранее спосиба.
C уважением,
Гюнель

Нравится

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

Здравствуйте, Гюнель!

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

Здравствуйте, Гюнель.

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

Показать все комментарии
ошибка публикация
Технические вопросы
5.x

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

Вопрос: Как убрать эту ошибку?

Нравится

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

Обновление структуры предлагает при наличии разности в объектной модели и табличной.
Удалив новое поле в дизайнере удается опубликовать объект? Если нет, рекомендую сравнить структуру в студии и в дизайнере.
Помочь будет проще, если Вы предоставите обезличенную копию БД в техническую поддержку.

Удалив новое поле также не удалось опубликовать, публикация прошла только после того как на проблемном поле установил галочку "не проверять целостность"

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