Вопрос

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

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

"VacancyNames": {
		"dataValueType": Terrasoft.DataValueType.TEXT,
		"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
		"value": 'Один\r\nдва',
		"customConfig": {
		"className": "Terrasoft.MemoEdit"
	}
}

 Заполняю список

Terrasoft.each(entities, function (entity) 
{
   var ResponceNameValue = entity.get('Name');
       AllVacancy += ResponceNameValue + '\r\n';
});
this.set("VacancyNames", AllVacancy);

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

У меня такой же вопрос

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

Здравствуйте)
В зависимости от того, каким должен быть конечный результат, Вы можете решить данную задачу 2 способами.
1. В схеме таблицы детали создать поле-справочника, в котором уже будут указаны нужные данные и просто добавить его на мини-карточку (аналогично, как и на обычную страницу редактирования). 
2. Этот способ более трудоемкий. Нужно создать виртуальное поле с типом 'ENUM' и потом реализовать методы и обработчики для работы с этим полем.
Ниже приблизительный код, как это реализовать:

define("CasePage", ["CasePageResources", "terrasoft"],
    function(resources, Terrasoft) {
    return {
        entitySchemaName: "Case",
        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
        attributes: {
            "myEnum": {
                "dataValueType": Terrasoft.DataValueType.ENUM,
                "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                "caption": "myEnum"
            },
            "myList": {
                "dataValueType": Terrasoft.DataValueType.ENUM,
                "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                "isCollection": true
            }
        },
        diff: /**SCHEMA_DIFF*/[
            {
                "operation": "insert",
                "name": "myEnum",
                "values": {
                    "caption": "myEnum",
                    "dataValueType": this.Terrasoft.DataValueType.ENUM,
                    "bindTo": "myEnum",
                    "layout": { "colSpan": 24, "rowSpan": 1, "column": 0, "row": 4 },
                    "controlConfig": {
                        "className": "Terrasoft.ComboBoxEdit",
                        "list": {
                            "bindTo": "myList"
                        },
                        "change": {
                            "bindTo": "onMyValueChange"
                        },
                        "prepareList": {
                            "bindTo": "prepareMyList"
                        }
                    }
                },
                "parentName": "SolutionTab_gridLayout",
                "propertyName": "items",
                "index": 1
            }
        ]/**SCHEMA_DIFF*/,
        methods: {
            onPageInitialized: function(callback, scope) {
                if (!this.get("myList")) {
                    this.set("myList", this.Ext.create("Terrasoft.Collection"));
                }
                
                if (callback) {
                    callback.call(scope || this);
                }
            },
            onEntityInitialized: function() {
                this.callParent(arguments);
                
                // and just for debug:
                document.scope = this;
            },
            prepareMyList: function(filter, list) {
                if (list === null) {
                    return;
                }
                list.clear();
                var columns = {};
                
                var value1 = {
                    displayValue: "a123",
                    value: "1"
                };
                var value2 = {
                    displayValue: "b234",
                    value: "2"
                };
                var value3 = {
                    displayValue: "c345",
                    value: "3"
                };
                
                columns[1] = value1;
                columns[2] = value2;
                columns[3] = value3;
                
                list.loadAll(columns);
            },
            onMyValueChange: function(val) {
                if (val && val.displayValue) {
                    console.log("you pick: ", val.displayValue);
                }
            }
        },
        rules: {}
    };
});
 

 

 

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

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

Имеется стандартный справочник с кастомной страницей реестра. 

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

У меня такой же вопрос

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

А можете перефразировать, что именно вы хотите? Не могу понять, что вы хотите сделать

Наверное лучше я опишу все свои действия, что бы лучше понять мою цель:
1. Создал вьюху на SQL
2. Создал объект в БПМ с именем точь-в-точь как и в п.1
3. Накидал столбцов в объекте из п.2 точь-в-точь как и в п.1
4. В свойствах объекта из п.2 ("ВСЕ") поставил птЫчку "Представление в базе данных"
5. Получил справочник в BPM с наполнением данных из вьюхи п.1. Страница отображения справочника - базовая, а значит с возможностью редактировать поля и с отображением всех кнопок типа "Добавить"
6. Решил сделать "по-феншую" - создал свою страницу с параметром "Родительский объект" = "Конфигурационный раздел базового справочника (UIv2)"
7. Удалил кнопку "Добавить"
8. Определил цвет отображения кнопки "Закрыть" - "Terrasoft.controls.ButtonEnums.style.BLUE"
9. Удалил унаследованный DataGrid
10. Определил свой DataGrid
    {
        "operation": "insert",
        "name": "DataGrid",
        "parentName": "DataGridContainer",
        "propertyName": "items",
        "values": {
            "itemType": Terrasoft.ViewItemType.GRID,
            "listedZebra": true,
            "activeRow": {"bindTo": "ActiveRow"},
            "collection": {"bindTo": "GridData"},
            "isEmpty": {"bindTo": "IsGridEmpty"},
            "isLoading": {"bindTo": "IsGridLoading"},
            "primaryColumnName": "Id",
            "sortColumn": {"bindTo": "sortColumn"},
            "sortColumnDirection": {"bindTo": "GridSortDirection"},
            "sortColumnIndex": {"bindTo": "SortColumnIndex"},
            "needLoadData": {"bindTo": "needLoadData"}
        }
    }

Суть вопроса: данная страница имеет Фильтр с одной возможностью "Добавить условие". 
Интересует возможность добавления "Перейти в расширенный режим" или отображение фильтра по датам, как это реализовано в разделе "Активности".

Пытался в п.6. "Родительский объект" = "Базовая схема раздела (NUI)" - получаю необходимый результат, но сама страница некорректно себя ведет при отображении данных. Видимо там много чему нужен "remove", 
однако недостаточно информации чему именно...

Терещенко Алексей,

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

			init: function() {
				this.callParent(arguments);
				this.initFixedFiltersConfig();
			},
			initFixedFiltersConfig: function() {
				var fixedFilterConfig = {
					entitySchema: this.entitySchema,
					filters: [
						{
							name: "PeriodFilter",
							caption: this.get("Resources.Strings.PeriodFilterCaption"),
							dataValueType: this.Terrasoft.DataValueType.DATE,
							startDate: {
								columnName: "UsrDate", //Поле по которому хотите сделать фильтр дат
								defValue: this.Terrasoft.startOfWeek(new Date())
							},
							dueDate: {
								columnName: "UsrDate", //Поле по которому хотите сделать фильтр дат
								defValue: this.Terrasoft.endOfWeek(new Date())
							}
						}
					]
				};
				this.set("FixedFilterConfig", fixedFilterConfig);
			},

 

Литвинко Павел,

Подскажите в какую часть кода необходимо добавить данный код? в 

methods?

Литвинко Павел,

Отлично!!! Спасибо большое! Получилось!

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

Всем доброго времени суток.

Не нашёл, можно ли в 7.11 подставлять персонализированную подпись к письмам.

Чтобы было, например, "С уважением <ФИО Контакта текущего пользователя>", отправившего письмо через систему.

Спасибо.

У меня такой же вопрос

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

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

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

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

Добрый день.

Процесс -> Задание сценарий содержит некий код:

if (UserConnection.GetIsFeatureEnabled("EmailMessageMultiLanguage"))
{
    некий код...
}
else
{
    некий код...
}

При запуске данного процесса всегда отрабатывает ветка "else".

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

У меня такой же вопрос

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

Это Механизм отключения функциональности Feature Toggle. По ссылке написано, как менять значение пользовательскими средствами и где оно хранится в базе.

Конкретно по EmailMessageMultiLanguage на странице включения параметров нет никаких пояснений. Но, очевидно, если его включить, то тут и в других местах выполнение пойдёт по верхней ветке.

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

Спасибо, действительно пройдя по адресу [Адрес приложения]/0/Nui/ViewModule.aspx#BaseSchemaModuleV2/FeaturesPage

попал на некую страницу добавления функциональности и возможностью вкл/выкл этой функциональности. К большому удивлению запись с кодом "EmailMessageMultiLanguage" я не обнаружил. Теперь понятно, почему отрабатывает ветка else.

У меня на тестовом сайте 7.12 Sales Enterprise она есть, выключена. Возможно, зависит от версии.

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

Добрый день,

Столкнулся с такой проблемой, добавил в раздел Контрагенты справочное поле "Населенный пункт" (VcLocality) и такое же поле в деталь  Адрес контрагента, и пытаюсь настроить синхронизацию так же как она работает в базовой версии. Для этого в процессе объекта Контрагент переопределил метод SynchronizeAddress, в результате получилось передавать значение из раздела на деталь, а вот обратно из детали в раздел не получается. В процессе объекта Адрес контрагента есть метод GetAddressSynchronizer,

AddressSynchronizer = AddressSynchronizer ?? 
    ClassFactory.Get<BaseAddressSynchronizer>(
        new ConstructorArgument("userConnection", UserConnection), new ConstructorArgument("addressEntity", Entity),
        new ConstructorArgument("masterEntityName", "Account"));
return (BaseAddressSynchronizer) AddressSynchronizer;

я так понимаю что он вносит изменение в исходный код схемы BaseAddressSynchronizer. Но вот заместить схему BaseAddressSynchronizer не получается.

Вопрос состоит в том как мне передать следующий код в схему BaseAddressSynchronizer:

new SynchronizationColumnMapping {
                    SourceColumnName = "VcLocalityId",
                    DestinationColumnName = "VcLocalityId"
                },

 

 

У меня такой же вопрос

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

Добрый вечер.

Создайте класс, который наследуется от «BaseAddressSynchronizer», и параметризированный атрибутом «[Terrasoft.Core.Factories.Override]», например:

[Terrasoft.Core.Factories.Override],
public class UpdatedBaseAddressSynchronizer : BaseAddressSynchronizer
 
{
 
// замещаете необходимые методы
 
}
Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

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

У нас недавно была внедрена система terrasoft bpmonline которая использует MS SQL. Хотелось бы узнать, есть ли какие-то рекомендованные регламентные процедуры по поддержке этой СУБД. У меня есть относительно большой опыт в поддержке MS SQL для 1С и там к стандартным регламентным процедурам относят перестроение индексов, сбор статистики и очистка процедурного кеша. Эти операции реально помогают производительности 1С. Скажите, имеет ли смысл применять подобные регламентные операции для MS SQL в случае terrasoft bpmonline? Возможно, terrasoft имеет какие-то свои рекомендации (к сожалению, пока не сталкивался с ними) ? Заранее спасибо за ответ.

У меня такой же вопрос

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

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

Из специфического, в bpm'online есть таблицы с информацией, которая копится и не чистится, но особо не нужна по прошедствии времени.

Например, в SysUserSession при каждом входе пользователя или какой-то интеграции пишется новая запись. Если её никогда не чистить, она вырастает до больших размеров и работа с ней замедляется, встречаются deadlock-и. Аналогично, в IntegrationLog пишется информация при работе интеграций, если такие предусмотрены в Вашей системе. Другие подобные таблицы можно увидеть, построив в Management Studio отчёт «Disk Usage by Top Tables».

Плюс в оптимизации стоит учитывать, что в Terrasoft повсеместно используются в качестве первичных ключей GUID-ы.

Иногда объёмы данных столь велики, что для нормального выполнения запросов помогает только переход на SSD, поскольку HDD не справляется. И версию MS SQL лучше выбрать 2016 и новее.

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

 Большое спасибо за Ваш ответ.

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

Коллеги, добрый день!

Трабла - не обновляются до конца некоторые пакеты при обновлении из svn.

Есть площадка для разработки, с которой в svn публикуются пакеты. При обновлении из svn на препрод-площадку - пакеты не до конца обновляются - с таким сообщением об ошибках, может быть связанных с мультиязычием или ещё с чем либо.

Очистка кеша репозитория и смена самого репозитория не помогает устранить проблему.

 

В чем причина и как исправить? Заранее благодарен за советы / рецепты

 

У меня такой же вопрос

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

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

Сергей Кy6риш,

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

Если на первичной площадке внести изменение, например добавить или изменить какую-то схему, зафиксировать это в svn, и после обновлять пакет на принимающей площадке, то все внесённые значимые изменения применяются, за исключением указанных на рисунке, а при повторной попытке обновления - остаются только конфликты как на рисунке.

Почему-то конфликт не устраняется (ожидаемым) перезатиранием

 

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

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

А как устранить симптом? может быть закачать содержимое соответствующих таблиц в БД с образцовой площадки на ту, на которой наблюдается симптом?

При изминении ресурсов в базе сайта (таблица "SysPackageResourceChecksum")  для ресурсов пакетов устанавливается еденица в колонке "IsChanged".
Как обходное решение, можно проадейтить соответствующие значения в нули "0".

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

Коллеги, добрый день!

Обнаружилась проблема - не работает вкладка управления правами в редакторе конфигурации. При попытке изменения прав для любого пакета, в которых нами проводилась разработка (названия начинаются с префикса IP) - никаких изменений не происходит и появляется сообщение об ошибке о наличии циклов в зависимостях пакетов  - см. рис 1.

Мы тщательно проверили зависимости и установили отсутствие циклов. Очистка кеша репозитория и смена самого репозитория не помогает устранить проблему.

 

При переносе через svn пакетов на другую площадку ситуация такая же, некорректная работа воспроизводится.

 

В чем причина и как исправить? Заранее благодарен за советы / рецепты.

 

У меня такой же вопрос

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

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

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

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

Добрый день! Реализовал деталь по статье из академии. Множественное добавление работает. Но заметил странный баг. После добавления нескольких записей, открываю на редактирование одну из них, а в ней пусто (вообще ничего не заполено, хотя я вижу, что данные заполнены в детали), затем закрываю. Повторно открыть какую-либо запись на редактирование уже не получается - в консоль валится ошибка (скрин). Если обновить страничку карточки, то таких проблем нет. Могу открывать любые записи в детали на редактирование, данные в ней тоже подтягиваются.

По ошибке - в базе запись с таким id есть!

 

У меня такой же вопрос

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

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

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

Направьте нам, пожалуйста, Ваш запрос на support@terrasoft.ru, также предоставьте доступ к Вашему сайту (адрес и параметры для входа/удаленное подключение/обезличенный бекап БД). Также уточните, пожалуйста, какую деталь и на какую карточку Вы добавляли, всегда ли в ошибке появляется один и тот же id и какой именно записи присвоен id, который появляется в ошибке.

Ради эксперимента, вставьте вот такой метод на страницу

loadAddedRecords: function(collection) {
	this.reloadGridData();
},

и отпишитесь, сработало или нет.

Варфоломеев Данила,

Какая-то магия - сработало! Спасибо!!!

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

Добрый день.

В системе bpmonline на странице контрагента есть вкладка "Контакты и структура". На этой вкладке есть информация "Контакты контрагента". Судя по документации в этой детали отображаются "... контакты, у которых данная компания в указана качестве текущего места работы на детали [Карьера] или в профиле". Скажите, а где можно посмотреть на программный код, который связывает контрагента с контактами (карьерой контактов) для формирования списка этой детали? Вопрос связан с тем, что есть намерение повторить эту связь для получения аналогичного списка для контрагента в своем бизнес-процессе. Просматривая существующие схемы конфигурации я, к сожалению, не нашел нужного. Заранее спасибо за ответ.

У меня такой же вопрос

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

Непонятно, что требуется получить на выходе. Разве нельзя просто через esq в бизнес-процессе получить нужные данные?

Кузнецов Сергей,

Хочется в esq повторить логику запроса к данным, который выполняет деталь "Контракты контрагента". Можно ориентироваться на приведенное описание из документации, а можно посмотреть на существующий код и повторить запрос. Также просто хочется разобраться как организована эта деталь.

Игорь Козлитин,

В детали AccountContactsDetailV2 используется фильтрация _getContactCareerFilter, которая фильтрует контакты в соответствии с его местом работы, т.е. Контрагентом:

AccountContacts: {

schemaName: "AccountContactsDetailV2",

filter: {

masterColumn: "Id",

detailColumn: "Account"

},

useRelationship: true,

filterMethod: "_getContactCareerFilter"

}

Посмотреть реализацию данного фильтра Вы можете в схеме AccountPageV2 пакета UIv2, выполнив поиск по словосочетанию "getContactCareerFilter"

Анна Журавель,

 Большое спасибо. Ваш ответ очень помог.

Да, по сути логика простая. Всего лишь один единственный фильтр, должен совпадать контрагент. Деталь построена прямо на объекте "Контакт". Т.е. делаем выборку по объекту Контакт, где контрагент равен конкретному.

Кузнецов Сергей,

Дополню Ваш ответ - там еще сущность "Карьера контакта" учитывается.

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