Добрый день!

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

Нравится

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

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

Если нет возможности обновится то ищите в стилях  что то типа:

.grid-listed-row div {
	white-space: nowrap;
	text-overflow: ellipsis;
	overflow: hidden;
}

и убирайте (переопределяйте) для вашей страницы

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

Если нет возможности обновится то ищите в стилях  что то типа:

.grid-listed-row div {
	white-space: nowrap;
	text-overflow: ellipsis;
	overflow: hidden;
}

и убирайте (переопределяйте) для вашей страницы

Григорий Чех,

Подскажи, пожалуйста, с какой версии доступен этот функционал?

С 7.14:

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

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

Спасибо.

Зверев Александр пишет:

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

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

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

Также, возможно, это проблема старого дизайнера. 

 

Если необходимо отображать записи в одну строку, вот пример:

Необходимо создать модуль, например UsrCustomCSS. В вкладку LESS вставляем код ниже:

div[data-item-marker*="ContactCareerDetailContainer"] .grid {   // ContactCareerDetailContainer это как пример, используйте маркер вашей детали, чтобы стили применились только для неё

    &.grid-listed {

        .grid-listed-row {

            [class*='grid-cols-'] {

                overflow: hidden;

                text-overflow: ellipsis;

                white-space: nowrap;

            }

        }

    }

}




Далее создайте замещающий клиентский модуль для необходимой детали и укажите в зависимость ваш кастомный модуль:

 

Если необходимо выполнять перенос строк во всех записях - то это тоже можно выполнить через переопределение схем. Общая рекомендация была предоставлена выше. 

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

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

Может возникнуть ситуация, в которой мне нужно принудительно установить значение данного справочника. Я поступаю следующим образом:

 

this.set("Country", {value: "a570b005-e8bb-df11-b00f-001d60e938c6", displayValue: "РОССИЯ"});

В результате значение поля выбора принимает соответствующее значение.



Но у атрибута Country назначены дополнительные колонки кроме value и displayValue. Если в дальнейшем потребуется обратиться к этим колонкам, мы получим ошибку, потому что в реальности значением атрибута установлены только две переменных.



Понятно, что можно принудительно назначить атрибуту больше значений, но можно ли каким-то образом восстановить выбор значения из справочника по одному Guid ? Скажем, я знаю, что Guid нужной мне страны такой то. Я пишу что-то вроде this.set("Country, {value: такой-то}), и получаю доступ к любым строкам записи справочника?

Нравится

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

Добрый день.

Если я правильно понял, вам могут помочь две вещи:

1) Укажите в атрибутах колонки справочника, которые вам необходимы:

"Country": {
    "lookupListConfig": {
         "columns": ["Name", "CreatedOn", "CreatedBy"]
    }
}

2) Используйте метод loadLookupDisplayValue для установки справочных значений.

this.loadLookupDisplayValue("Country", valueId);

 

Добрый день!

Нет, предложенный вами способ не сработает.

Необходимо делать запрос в базу данных и вытаскивать атрибуты объекта.

Пример запроса:

var esqContract = Ext.create("Terrasoft.EntitySchemaQuery", {
	rootSchemaName: "Contract"
});
esqContract.addColumn('CreatedOn');
esqContract.addColumn('SignedOn');
 
esqContract.getEntity(contractId, function(responseContract)
{
	var createdOn = responseContract.entity.get('CreatedOn');
}, scope);

 

Добрый день.

Если я правильно понял, вам могут помочь две вещи:

1) Укажите в атрибутах колонки справочника, которые вам необходимы:

"Country": {
    "lookupListConfig": {
         "columns": ["Name", "CreatedOn", "CreatedBy"]
    }
}

2) Используйте метод loadLookupDisplayValue для установки справочных значений.

this.loadLookupDisplayValue("Country", valueId);

 

Сизов Андрей Андреевич,

доброе утро! Этого метода:

this.loadLookupDisplayValue("Country", valueId);

будет достаточно, чтобы заполнить все выбранные для атрибута колонки (в вашем случае "Name", "CreatedOn", "CreatedBy"), или он позволяет получить только displayValue по valueId?

Developer76,

Да, только что сам проверил - колонки заполняются после выполнения данного метода.

 

Сизов Андрей Андреевич,

спасибо!

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

Добрый день.

Просьба пояснить следующие моменты из документации по разделу "Очереди":

  1. В поле [Процесс] выберите бизнес-процесс, по которому будут формироваться правила обработки записей из очереди на домашней странице - Можно ли где то подробно прочитать каким образом работает штатный бизнес-процесс: "Обработка обращений из очереди в Едином окне" (какие в нем заложены правила обработки записей)
  2. Обрабатывать наполнение очереди могут только те специалисты, для которых на вкладке [Команда] установлен признак [Активен]. По умолчанию данный признак устанавливается для всех физ. лиц, добавленных на деталь. Вы можете снять признак для некоторых специалистов, в таком случае наполнение очереди не будет отображаться для них на домашней странице. Каким образом снимается/ признак "Активен"?

Нравится

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

1. Можно открыть в дизайнере этот процесс «Обработка обращений из очереди в Едином окне» и посмотреть. Он состоит всего из двух элементов: в первом выбирается одна запись из таблицы обращений, отфильтрованная по Id, переданному в параметре, во втором — открывается её карточка.

2. На детали «Команда» открывается карточка из двух полей: справочного с выбранным контактом оператора и галки «Активный», доступной для снятия или проставления.

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

Спасибо за Ваш ответ

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

Добрый день, может кто-нибудь подскажет, в каком формате правильно передавать данные в DataService, для поля с типом varbinary(max), т.е. байты файла. Сейчас при попытке создания записи детали файлы и ссылки, возникает след. ошибка: 'Ссылка на объект не указывает на экземпляр объекта'.

                  "Items": {
                        "Name": {
                            "ExpressionType": 2,
                            "Parameter": {
                                "DataValueType": 1,
                                "Value": "test.doc"
                            }
                        },
                        "Data": {
                            "ExpressionType": 2,
                            "Parameter": {
                                "DataValueType": 13,
                                "Value":   base64.encodebytes(fi).decode('ascii')
                            }
                        }
                    }

или так 

                  "Items": {
                        "Name": {
                            "ExpressionType": 2,
                            "Parameter": {
                                "DataValueType": 1,
                                "Value": "test.doc"
                            }
                        },
                        "Data": {
                            "ExpressionType": 2,
                            "Parameter": {
                                "DataValueType": 13,
                                "Value": 0x504B030414000600080000002100DFA4D26C...
                            }
                        }
                    }

всё равно та же ошибка, может кто-нибудь подскажет как правильно передавать байты.

Нравится

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

Я думаю что DataService не работает с varbinary(max), посмотрите как реализована загрузка и скачивание файлов на детали [Файлы и ссылки].

В догонку в документации, указано что

контакт UploadFile - Класс выгрузки файла. Не рекомендуется использовать.

Для работы с файлами используется не DataService, а FileService и FileApiService. Вот пример скачивания, а вот — загрузки.

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

Добрый день, нужна помощь, есть трудности с построением такого фильтра:

 

Select * from "Contact"
LEFT JOIN "SysAdminUnit" ON "Contact"."Id" = "SysAdminUnit"."ContactId"
where "SysAdminUnit"."Id" IN 
	(Select "SysUserId" from "SysUserInRole" where "SysRoleId" IN 
		(Select FuncRoleId from SysFuncRoleInOrgRole))

Для filterGroup, должно получится что-то вроде такого: (мой вариант не верный).

 

filterGroup.add("ContactList", Terrasoft.createExistsFilter("[SysAdminUnit:Contact].[SysUserInRole:SysUser].SysRole.[SysFuncRoleInOrgRole:FuncRole]"));

 

Нравится

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

Можно сначала вычитать все FuncRoleId из SysFuncRoleInOrgRole удовлетворяющие вашим условиям, а потом построить фильтр createColumnInFilterWithParameters, пример привел ниже (existsDocumentsCollection - массив с коллекциями которые нужно включить в запрос)

var filtersGroup = Terrasoft.createFilterGroup();
filtersGroup.logicalOperation = Terrasoft.LogicalOperatorType.AND;
var existsFilter = this.Terrasoft.createColumnInFilterWithParameters("Id",
	existsDocumentsCollection);
existsFilter.comparisonType = this.Terrasoft.ComparisonType.EQUAL;
existsFilter.Name = "existsFilter";
filtersGroup.addItem(existsFilter);
filtersGroup.addItem(discontListFilter);

 

Можно сначала вычитать все FuncRoleId из SysFuncRoleInOrgRole удовлетворяющие вашим условиям, а потом построить фильтр createColumnInFilterWithParameters, пример привел ниже (existsDocumentsCollection - массив с коллекциями которые нужно включить в запрос)

var filtersGroup = Terrasoft.createFilterGroup();
filtersGroup.logicalOperation = Terrasoft.LogicalOperatorType.AND;
var existsFilter = this.Terrasoft.createColumnInFilterWithParameters("Id",
	existsDocumentsCollection);
existsFilter.comparisonType = this.Terrasoft.ComparisonType.EQUAL;
existsFilter.Name = "existsFilter";
filtersGroup.addItem(existsFilter);
filtersGroup.addItem(discontListFilter);

 

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

Добрый день. Столкнулся со следующей проблемой: есть 2 пакета (родительский пакет Bot и зависящий от него NewBot). В пакете Bot есть пользовательский элемент БП SendMessage, который на ExecuteElement создает экземпляр класса Worker и вызывает его метод Send. 

Требуется в пакете NewBot заместить этот элемент, чтобы вызывалась другая логика. Я сделал следующим образом: Создал в пакете NewBot схему исходного кода с классом NewWorker

[Terrasoft.Core.Factories.Override]
public class NewWorker : Worker
{
  public override void Send()
  {
  //новая логика элемента БП
  }
}

Метод Send в классе Worker объявлен со спецификатором virtual.

Как я понимаю, при такой записи если на системе будет стоять и пакет Bot и пакет NewBot, то элемент БП SendMessage должен при ExecuteElement вызвать Send из класса NewWorker. Но оно так не работает.... Вызывается все равно метод Send из класса Worker. 

Что я делаю или понимаю не так? И может есть какой другой способ заместить пользовательский элемент БП?

Нравится

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

Victor, В пакете Bot экземпляр класса Worker создается через ClassFactory?

Victor, В пакете Bot экземпляр класса Worker создается через ClassFactory?

Толмачев Дмитрий Юрьевич,

Эмм, нет

Именно поэтому переопределение, на которое вы надеетесь, не происходит.

Толмачев Дмитрий Юрьевич,

Большое спасибо за помощь, сейчас переделаю

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

Добрый день! Может кто-нибудь подскажет в чем причина, открываю проект Terrasoft.Configuration, но не подгружаются библиотеки в проекте, на версии приложения 7.12 bank_customer_journey. На версии приложения 7.13 всё ок.

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

Нравится

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

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

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

Здравствуйте! Столкнулись с такой проблемой как создание раздела.

При попытке создания раздела через "мастер разделов", мигом проходит "Сохранение слиентских схем", бодро начинается этам "Сохранение схем объектов" (судя по network), но потом минут 30-40 может крутится "Сохранение схем объектов", после чего страница закрывается быстро, и когда ты заходишь в конфигуратор, то там есть все нужные объекты для раздела (но иногда требующие одновить структуру БД), но абсолютно нет никаких привязок, например в "SysModule".

Может кто-нибудь подскажет почему настолько долго выполняется (точнее не совсем выполняется) создание раздела в "Мастере разделов".

Версия приложения 7.12.0 Oracle

Нравится

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

В конце выдало "Ошибка декодирования строки JSON".

Дело, как и в соседней теме, может быть в несовместимой версии библиотек Oracle.

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

Добрый день, коллеги.

Преамбула.

Есть раздел Доп соглашение, на странице редактирования есть деталь Дочернее доп соглашение, которая берется с этого же раздела. Есть поле Основное доп соглашение, которое заполняется при добавлении дочернего доп соглашения. Между страницей редактирования и деталью настроен обмен сообщениями (message) реагирующими на изменение поля Основное доп соглашение, если поле заполнено - кнопка добавления записей невидима, если поле пустое - видима. 

Собственно проблема.

При добавлении записи в деталь (нажатии на "+") открывается карточка редактирования этого же раздела и в поле Основное доп соглашение проставляется ссылка на родителя, НО сообщение о заполнении поля не отправляется на деталь и соответственно кнопка добавления записи остаётся видима.

Насколько я понял это происходит из-за того что фактически текущей страницей является родительская (с которой нажали кнопку добавления записи). Может кто-нибудь знает как можно передать сообщение с открывшейся карточки добавления записи на её деталь для того что бы скрыть кнопку добавления записи и отменить создание "матрёшки" (дочка в дочке в дочке в дочке и т.п.)

Нравится

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

На onEntityInitialized вызовите функцию которая обрабатывает изменение поля Основное доп соглашение и отправляет сообщение в деталь.

Игорь, добрый день! После добавления записи с карточки детали, сама запись отображается в детали на форме? Так же, запись существует в таблице БД?

На onEntityInitialized вызовите функцию которая обрабатывает изменение поля Основное доп соглашение и отправляет сообщение в деталь.

engineer7,

Добрый день. Сама запись на форме отображается и в БД существует.

Есть карточка детали(то есть та же карточка что и родитель) и есть схема детали, вы передаете на деталь сообщение? на детале ведь та кнопка добавить

Радчук Виталий Владимирович,

Да, именно так.

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

Добрый день.

Подскажите пожалуйста как выбрать из объекта бизнес-процесса "Изменение данных" уникальные поля записей, которые были изменены? 

Есть объект Акции и Партнеры. У акции есть справочное поле с типом акции. Есть бизнес-процесс, который по определённому алгоритму изменяет акции. Изменение акций выполняется  через элемент "Изменить данные".

Как мнем выбрать уникальные типы акции, которые были изменены?

Нравится

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

Можно делать не массовое изменение, а читать еще неизмененные, их изменять, индивидуально делать доп.действия, читать следующие неизмененные и т.п.



Второй вариант - сделать БП, который реагирует на изменение акции



Третий вариант - дождаться обещанного массового запуска подпроцессов, который будет в одной из следующих версий :)

Можно делать не массовое изменение, а читать еще неизмененные, их изменять, индивидуально делать доп.действия, читать следующие неизмененные и т.п.



Второй вариант - сделать БП, который реагирует на изменение акции



Третий вариант - дождаться обещанного массового запуска подпроцессов, который будет в одной из следующих версий :)

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

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

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

Спасибо за участие. Я придумал решение. Я просто после изменения Акций делаю запросы на чтение данных по условиям нужных мнем типов акций, и по результату запросов запускаю подпроцесс с параметром этого типа Акции.

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