Добрый день, коллеги, поделитесь решением вопроса:

  1. Создал справочник 
  2. Создал модуль унаследованный от "Конфигурационный раздел базового справочника ( UIv2 )"
  3. Удалил унаследованный грид, и определил грид "зебра".
  4. Добавил фильтр по датам, по аналогии как в активностях

Вопрос: подскажите, метод добавления расширенного фильтра, по аналогии как и в разделах?

Нравится

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

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

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

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

Создали в системе Service Enterprice процесс.

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

Поведение его довольно странное. Если процесс пошел по веткам, которые отметил на рисунке, то в некоторых случаях все элементы процесса в журнале отмечены как выполненные, но сам процесс не завершается. Как будто не отработал элемент "Логическое И". Если процесс идет по другой ветке, то проблем нет.

Вот что по этому экземпляру процесса показывается в журнале процессов:

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

Обнаружил такую закономерность, во всех глючных экземплярах у задачи "Сформировать и запустить согласование приказа"  дата завершения отличалось от даты создания как минимум на 1 день. Если дата совпадает, то проблем не обнаружено. Проанализировано порядка 100 процессов.

Кто-нибудь сталкивался с таким? Как можно этого избежать?

Нравится

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

Добрый день!



А какие установлены настройки для условного потока из активности "Сформировать и запустить согласование приказа" на элемент "ИЛИ"? 

Евгений Манько, не понял вопроса. Из активности "Сформировать и запустить согласование приказа" есть только один поток на элемент "И", в котором указан результат завершения активности "Выполнена". Или что-то другое имели ввиду?

Шувалов Николай Юрьевич,

Прошу прощения имел ввиду элемент "И".Из этой активности на элемент "И" идет условный поток http://prntscr.com/jx6shz. Скорее всего, проблема в нем. 

Евгений Манько, даже не знаю какая там может быть проблема, там и параметров то нет никаких, кроме выбора результатов завершения активности

Шувалов Николай Юрьевич,



На всякий случай. А может открыть одну из активностей по не завершенным процессам и проверить её статус?

Евгений Манько,

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

Шувалов Николай Юрьевич,

 

Проблема может быть связана если идет работа в режиме V-фермы, если активность создавалась на одной ноде, а заканчивалась на другой, в таком случае может возникнуть ошибка. Так же на 7.11.3 иногда были ошибки если после элемента "И" процесс завершался, в этом случае может помочь действие после элемента "И", к примеру фейковая формула. Но лучше всего обновиться на 7.12.0 или выше, многие проблемы были исправлены с этим обновлением.

Добрый день! Террасофт рекомендовал делать процессы и подпроцессы (при их наличии) компилируемыми, тогда процесс завершается

Чубко Илья,

Помогло установка признака Компилируемый у процесса. Спасибо!

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

есть раздел анкеты и там есть анкеты двух типов "первичный спрос" и "анкета встречи"

у клиента есть поле "анкета встречи"

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

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

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

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

Это актуально и для других разделов, например для раздела Активности. Или для раздела клиенты. Я хочу в поле клиент физ. лицо иметь возможность добавлять только физ. лиц.

 

Нравится

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

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

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

у меня есть раздел анкеты. есть два типа анкет "анкета спроса" и "анкета встречи"

 

 

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

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

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

 

Нравится

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

Страницы редактирования добавляются в кнопку «Добавить» в схеме «LookupPageViewGenerator» метод «getRequiredPages». Добавьте необходимую логику там.

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

Добрый день.

Мы провели на тестовой платформе обновление bpmonline до версии 7.12.1 и после этого возникла проблема с одним бизнес-процессом. Этот бизнес-процесс запускался по расписанию, раз в 3 часа, а также часто вручную. Так вот, после обновления при запуске бизнес-процесса вручную он намертво "висит" в статусе "Выполняется". Когда же этот бизнес-процесс выполняется по расписанию, то выполнение происходит успешно. При этом, автоматический запуск по расписанию происходит не как ожидается (каждые 3 часа, 7 дней в неделю с 6 до 21 часов), а с перебоями, например, в субботу процесс запускался, а воскресенье уже нет (судя по журналу), сегодня начал работу не с самого утра. Я понимаю, что причина проблемы может быть разная и сказать что-либо судя по сообщению на форуме сложно, но, возможно, с подобной проблемой в версии 7.12.1 сталкивался не только я и это проблема как-то системно идентифицируется? Заранее спасибо за ответ.

Нравится

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

Добрый день!



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

Процесс компилируемый или интерпретируемый? На каком элементе зависает?

Наш подрядчик (занимается разработкой и внедрением bpmonline у нас) сказал, что Terrasoft что-то поломал в бизнес-процессах в новой версии и обещает это исправить в версии 7.12.2.

Процесс интерпретируемый (птичка "Компилировать" не установлена) и состоит всего из одного элемента - сценарий, который запускает код на C#. До обновления версии bpmonline все исправно работало как при запуске по таймеру так и при ручном запуске. Сейчас работает только по таймеру.

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

Добрый день!



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

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



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

Анна Журавель, Большое спасибо за Ваш ответ. Мы добавили, в дополнение к стартовым сигналам по таймеру, еще пустой стартовый сигнал. В результате, бизнес-процесс стал запускаться вручную. По поводу проблем с запуском по таймеру - мы еще немного понаблюдаем. Возможно, это какие-то проблемы у нас.

 

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

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

Нравится

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

Добрый день!

Для того, чтоб установить свои обязательные поля для каждой типизированной страницы, рекомендуем воспользоваться функционалом бизнес-правил, конкретно - добавить действие "Делать поле обязательным". Больше о бизнес-правилах в нашем приложении Вы сможете узнать на Академии - https://academy.terrasoft.ru/documents/studio/7-12/nastroyka-biznes-pravil

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

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

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

"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);

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

Нравится

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

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

В зависимости от того, каким должен быть конечный результат, Вы можете решить данную задачу 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: {}

    };

});

 

 

 

Не могли бы вы описать как добавить существующую деталь на мини-карточку?

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

Когда я присваиваю этот текст колонке "1\r\n2\r\n3":

this.set("VacancyNames", "1\r\n2\r\n3");

- в мини-карточке он выводится как "1 2 3", а не 

1

2

3

Куда то теряются символы переноса на новую строку. 

mcNosferatum пишет:

Не могли бы вы описать как добавить существующую деталь на мини-карточку?

насколько мне известно, то текущая реализация BaseMiniPage, от которой наследуются мини-карточки, не предполагает добавление деталей на мини-карточку. Если Вам всё-таки нужно реализовать детали, тогда прийдется либо реализовать свою базовую карточку с деталями, либо переделать существующую.

mcNosferatum пишет:

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

Таким образом, как Вы хотите реализовать не получится.

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

Вот смысл задачи: при наведении на запись раздела, должна появиться мини-карточка со списком полей из детали данного раздела. К примеру в разделе контактов есть деталь с образованием. Нужно отобразить на мини карточке 10 записей. И если их отображать в одну строчку - это выглядит ужасно и нечитабельно... Поэтому необходимо каким то образом отобразить эти записи, визуально читабельно. Хотя бы используя банальный перенос строки. Но он почему то не работает. Какие еще возможны варианты отображения?

Попробуйте для переноса строки использовать <br />

Дмитрий А.,

Так тоже пробовал - не работает. Воспринимает тэг переноса как текст и просто выводит "1<br/>2<br/>3<br/>"

Получается что во время присвоения он автоматом заменяет теги на  &lt;br&gt; - в результате чего они превращаются в текст.

А само поле на странице у вас многострочное? Если нет, то нужно добавить в diff такую строчку:

        "contentType": 0

{
	"operation": "insert",
	"name": "VacancyNames",
	"values": {
		"bindTo": "VacancyNames",
		"contentType": 0 //вот сюда
	}
}

После этого заработают переносы через \r\n

Не получилось. Вот вам полный код моей мини карточки:

define("BpMiniPage", [], function() {
    return {
        entitySchemaName: "Proj",
        attributes: {
            "MiniPageModes": {
                "value": [this.Terrasoft.ConfigurationEnums.CardOperation.VIEW]
            },
            "VacancyNames": {
				"dataValueType": Terrasoft.DataValueType.TEXT,
				"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
				"value": 'Empty',
				"customConfig": {
					"className": 'Terrasoft.controls.MemoEdit',
					"height": '100px'
			    }
			}
        },
        diff: /**SCHEMA_DIFF*/[
            {
                "operation": "insert",
                "name": "Title",
                "parentName": "HeaderContainer",
                "propertyName": "items",
                "index": 0,
                "values": {
                    "labelConfig": {
                        "visible": false
                    },
                    "isMiniPageModelItem": true
                }
            },
            {
                "operation": "insert",
                "name": "VacancyNames",
                "parentName": "MiniPage",
                "propertyName": "items",
                "values": {
                    "labelConfig": {
                        "visible": false
                    },
                    "isMiniPageModelItem": true,
                    "contentType": 0,
                    "layout": {
                        "column": 0,
                        "row": 1,
                        "colSpan": 24
                    }
                }
            }
        ],
        methods: {
        	init: function() {
				this.callParent(arguments);
				this.setProjectVacancy();
        	},
        setProjectVacancy: function() 
        	{
        		this.set("VacancyNames", "1\r\n2\r\n3\r\n4");
			}
        }
        /**SCHEMA_DIFF*/
    };
});

Получается вот так:

А необходимо вот так:

Все уже перепробовал....

Может мини-карточка просто так не умеет?

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

this.showInformationDialog("1<br />2");

С диалогом заработало, но только не через <br>, а так: this.showInformationDialog("1\r\n2\r\n3\r\n4\r\n5"); 

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

Заметил еще одну особенность, установил поле: "isMiniPageModelItem": false - в результате отобразился текст как надо, НО только первые 3 строки. Остальные скрыты внутри. Возможно ли как то изменить динамически высоту элемента?

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

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

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

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

Подскажите метод реализации.

 

Нравится

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

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

Наверное лучше я опишу все свои действия, что бы лучше понять мою цель:

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 подставлять персонализированную подпись к письмам.

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

Спасибо.

Нравится

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

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

Данный функционал будет реализован в версии 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 она есть, выключена. Возможно, зависит от версии.

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