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

Пытался сделать автонумерацию для объекта Листинг, как описано здесь (на стороне клиента), но ничего не срабатывает (все работает как обычно и ничего не меняется).
После добавления указанного кода из статьи появилось сообщение об ошибке JavaScript, код добавил только вот здесь

Замещающая страница и объект (экспорт) во вложении

Помогите разобраться, не пойму что не так?
Заранее благодарен!

Нравится

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

Павел, а Вас не смущает, что Вы используете SDK для версии 7.9?

Для версии 7.7 - https://academy.terrasoft.ru/documents/technic-sdk/7-7-0/kak-dobavit-av…

"Мотков Илья" написал:Павел, а Вас не смущает, что Вы используете SDK для версии 7.9?

Спасибо! :)

Илья, когда я обновлюсь до версии 7.9, то все, что сделано для версии 7.7 придется переделывать?

Павел, в 7.7 автонумерацию нужно было добавлять на стороне клиента И сервера, в 7.9 же она добавлется ИЛИ на клиенте, ИЛИ на сервере. То есть Вам просто нужно будет либо удалить событийный подпроцесс из объекта, либо код из замещающей клиентской схемы. Обязательно оставьте хотя бы одно.)

"Мотков Илья" написал:

Павел, в 7.7 автонумерацию нужно было добавлять на стороне клиента И сервера, в 7.9 же она добавлется ИЛИ на клиенте, ИЛИ на сервере. То есть Вам просто нужно будет либо удалить событийный подпроцесс из объекта, либо код из замещающей клиентской схемы. Обязательно оставьте хотя бы одно.)

Спасибо! Буду разбираться

Попробовал все сделать как для версии 7.7.

Возникли ошибки после публикации объекта Listing, в котором создавал процесс обработки события Перед добавлением записи http://prntscr.com/f0fmpo

Вроде все сделал как описано, создал системные переменные, поле UsrCode для объекта, куда должно записываться значение номера. Сначала сделал его цифровым (Integer), вышла ошибка после публикации объекта. Потом все переделал, сделав его строкой (String), но все равно ошибка (в скрине выше).

Что я не так делаю, подскажите? Схемы во вложении

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

Следует типизировать значение колонки в условном потоке - в условии указать значение “string.IsNullOrEmpty(Entity.GetTypedColumnValue("Code"))”
(вместо “string.IsNullOrEmpty(Entity.GetTypedColumnValue("Code"))”)

"Зарицкий Олег" написал:Следует типизировать значение колонки в условном потоке - в условии указать значение “string.IsNullOrEmpty(Entity.GetTypedColumnValue("Code"))”
(вместо “string.IsNullOrEmpty(Entity.GetTypedColumnValue("Code"))”)("Code"))

Олег, Вы указали одинаковые строки

см. вложение
gettypedcolumnvalue.txt

"Зарицкий Олег" написал:

см. вложение

gettypedcolumnvalue.txt

Спасибо, Олег! Все заработало!

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

Здравствуйте, у нас такая проблема с визированием: в предприятии ввели новую должность, мы создали контакт, наделили всеми проваии. Теперь необходимо чтоб при визировании все документы проходили через этого человека. Где это настраивается?
На данный момент при нажатии отправить на визирование документ отправляется в определеной последовательности лицам на согласование, где изменить эту последовательность?

Нравится

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

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

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

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

В своем пакете (само собой между Custom и ***SoftKey_RUS)
создаю замещающую схему для детали используемой в карточке Активностей
"EntityConnectionsDetailV2"
Моя цель замещение объявленного в родителе метода appendTip
Задача проверка поступающих аргументов и некоторая их модификация в определенных случаях, после чего - вызов родителя с модифицированными аргументами.

define("EntityConnectionsDetailV2", [],
        function() {
                return {
                        attributes: {},
                        messages: {},
                        mixins: {},
                        methods: {
                                "appendTip": function(itemConfig) {
                                        //my Logick here
                                        this.callParent(MyCustomedAruments);
                                }
                        },
                        diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
                };
        });

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

точка останова в 1 - срабатывает на инструкции "define"
точки останова 2,3 - не срабатывают никогда.
в то время как точка останова в родительском методе - принимает исполнение.

Не все методы/схемы можно замещать ?
В чем может быть проблема ?

Нравится

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

Полная перегенерация исходных кодов и компиляция конфигурации, сброс Redis - эффекта не дают.

ВНИМАНИЕ!
Для решения проблемы надо было зайти в замещающую схему - поменять в LocalizableString - Caption и сохранить схему.

(После чего собственно можно вернуть Caption в исходное состояние и ВУАЛЯ - замещающая схема начинает работать как положено)

Это какой-то баг... причем очень не приятный... отнял у 3-х разработчиков в суммарном эквиваленте 5-6 часов.
Смотрели на код как "бараны" и не могли даже предположить, что может быть не так... и решив проверить по принципу: Так ну ладно, код не замещается, а как на счет ресурсов - и фактически методом тыка получаем искомое решение.

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

Да, на тестовом сервере №2 не проявилось, но туда схема "приехала" из пакета, а вот на проблемной она создавалась...
Ну вообщем есть тут немного мистики.

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

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

Стоит задача автоматической подстановки в шаблон email сообщения подписи с фотографией Ответственного (Отправитель). Фото берется из карточки контакта.
Данный элемент необходим в середине шаблона, соответственно, настройка подписи из 7.10 не подходит. Кто-нибудь сталкивался с подобной задачей? В какую сторону смотреть?

Нравится

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

Здравствуйте, Александр!

На текущий момент, возможность вывода фото контакта в шаблон e-mail сообщения, отсутствует.
Задача по анализу возможности доработки указанной функциональности в последующих релизах, стоит на ответственной команде разработки. Реализовать данную возможность планруется с помощью макросов.

Если очень надо - предлагаю "костыль".
Шаблон письма - тело письма (Активности с типом Email) это валидный HTML
Так что вы можете формировать его на лету в JavaScript, получая картинку контакта - сериализуя ее в Base64 строку и вставляя в тело письма тег с искомым изображением.

о том как в JS получить Base64 строку из картинки или прям тега на странице - см. вот здесь

Да, спасибо. Задача была именно в решении пользовательскими методами) За идею спасибо.

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

Добрый день.

Есть раздел, который администрируется по записям.

Каким образом я могу добавить в Page записи такого раздела деталь [Права доступа]?

Поделитесь решением у кого был подобный опыт реализации.

Нравится

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

Приветствую!:smile:

Права хранятся в таблице Sys[Object]Right ([Object] - объект раздела). Задача:

  1. создать в системе объект (с признаком представление в БД), которое будет повторять таблицу Sys[Object]Right.
  2. На основании созданного объекта можно создать деталь.
  3. Далее представление необходимо создать в БД. Название представления должно совпадать с названием объекта

Общая схема такая.

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

Илья, здравствуйте!

Редактировать данные в представлении нет возможности, т.к по сути это просто выборка из другой таблицы. Но вот если добавить на представление триггеры instead of [insert, delete, update], то такая возможность появляется.:smile:

"Демьяник Алексей" написал:Но вот если добавить на представление триггеры instead of [insert, delete, update], то такая возможность появляется.

А каким образом можно, например из клиентского кода вызывать эти триггеры ?
ESQ - запросом во "вьюху" ?

Илья, данный функционал реализован в схеме UserPageV2 (карточка основанная на представлении VwSysAdminUnit). Также посмотрите в реализацию самого объекта VwSysAdminUnit.

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

Это очень облегчило бы жизнь пользователям и администраторам bpm'online.

Алла, это плохая затея.

Настройка прав работает через webservice. Записи на детали загружаются через ESQ. Настройка прав реализована через действие на странице редактирования.

Пока как временное решение, чтобы видеть какие права розданы на запись может и подойти

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

Добрый день.

Есть раздел, который администрируется по записям.

Каким образом я могу добавить в Page записи такого раздела деталь [Права доступа]?

Поделитесь решением у кого был подобный опыт реализации.

Нравится

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

Очень много оверхеда по коду можно было бы избежать имея возможность передавать аргументы в методы обработчики зависимостей аттрибута.
Например у вас есть 10-ть полей отражающих сущность стоимости "без НДС" и соответвующие им поля "с НДС", вместо того чтобы писать 10-ть методов обработчиков, можно было бы написать один, но передавать в него целевые поля или их имена.
Я пролез по исходникам и нашел занятное поле конфигурационного объекта "argument

                        "SomeFiledwithVAT": {
                                "dependencies": [
                                        {
                                                "columns": ["SomeFiledwithoutVAT"],
                                                "methodName": "VAT_calculate",
                                                "argument": "SomeValue"
                                        }
                                ]
                        }

Таким образом в первый аргумент при вызове метода обработчика попадает "SomeValue"

Далее вопроса два:

1) Как передавать множественные аргументы ? (предусмотрено ли нечто такое ?)
Я естественно проверил "arguments"

                        "SomeFiledwithVAT": {
                                "dependencies": [
                                        {
                                                "columns": ["SomeFiledwithoutVAT"],
                                                "methodName": "VAT_calculate",
                                                "arguments": [null, 1, "SomeText"]
                                        }
                                ]
                        }

но меня ждало фиаско...
тем не менее можно в сам "argument" передавать массив, просто обогатив логику метода сплитом - добиться необходимого.
Хотя кончено это не так эстетично, как если бы можно было
"arguments": [null, 1, "SomeText"]

но тут возникает второй вопрос:

2) Уж больно редко сей аттрибут используется в исходных кодах, есть предположение, что это "костыль" и его могут в любой момент убрать.
Т.е. использовать его при разработке своей логики - авантюризм,
кто ни будь знает это часть нормального долгоживущего функционала или это "костыль" ?

Нравится

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

в метод-обработчик передается
1) то, что в кофинге в свойстве argument
2) название измененной колонки




эта штука там уже с незапамятных времен и вряд ли куда-то денется

"Андросов Дмитрий" написал:

https://learn.javascript.ru/arguments-pseudoarray


Зачем вы меня отправляете читать про псевдомассив arguments ? :biggrin:
В данном случае arguments, я по аналогии с argument - это атрибут анонимного объекта - элемента массива dependencies
атрибуты объекта вольны называться как хочется, хоть ключевыми словами.

var x = {
	var: "var keyword",
	arguments: "pseudo array",
	function: "function keyword"
}
//любуемся
console.log(x)

Псевдомассив аргументов при вызове метода обработчика собирается следующим образом:
первый аргумент: значение атрибута "argument" установленное в dependencies объекте.
второй аргумент: Имя аттрибута текущей модели (поля) по которому сработала зависимость.

Вот вопрос касался как раз "argument"

"Севостьянов Илья Сергеевич" написал:Вот вопрос касался как раз "argument"

arguments нет, как вы могли уже увидеть по исходникам.
Используйте argument, передавая туда массив или объект, и учите ваш метод работать с этим первым аргументом, разбирая его на нужные вам значения.
Логика зависимостей вряд ли поменяется в ближайшее время.

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

Коллеги, всем привет!

Столкнулись с ограничением на 100000 записей в выпадающем списке, можно это ограничение как-то увеличить или обойти?
Данный список расположен на кастомном модальном окне, поэтому сделать справочник вместо выпадающего списка не получится.

Нравится

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

Сергей, здравствуйте!

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

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

Ну это вы слишком критично :) JSON на 100000 нод это не так уж и много в масштабах интерпритатора JS, откройте консоль и пишите:

var BigObject = {}
for (var i = 0; i < 100001; i++) {
	BigObject["textfield" + i] = {index: i, text: i + " "}
}
for (var b = 90000; b < 90100; b++){
	console.log(BigObject["textfield" + b])
}

Вы даже глазом моргнуть не успеете как сотка записей из хипа вам еще и в консоль отрендериться :)
В хипе ляжет 10 KB оверхеда, при все самого аппа в 18 MB - это "детский лепет"
Тут основной вопрос в том чтобы не выводить все 100000 разом в рендер клиенту :)

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

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

!
В мастере деталей отсутствует возможность редактирования данных контейнеров.

!
Пробовали выставить список в полях “Тип взаимосвязи” и “Обратный тип взаимосвязи”, но не помогает, и при создании замещающей схемы объекта RelationType параметр "список" недоступен для изменения.

Нравится

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

Решение можно сделать только кодом, для этого заместите схему "BaseRelationshipDetailPageV2", следующим содержимым на уровне своего пользовательского пакета:

define("BaseRelationshipDetailPageV2", [], function() {
	return {
		entitySchemaName: "Relationship",
		attributes: {
		},
		details: /**SCHEMA_DETAILS*/ {} /**SCHEMA_DETAILS*/ ,
		messages: {
		},
		methods: {
		},
		diff: /**SCHEMA_DIFF*/ [
			{
				"operation": "merge",
				"name": "ReverseRelationType",
				"values": {
					"dataValueType": this.Terrasoft.DataValueType.ENUM
				}
			},
			{
				"operation": "merge",
				"name": "RelationTypePrimary",
				"values": {
					"dataValueType": this.Terrasoft.DataValueType.ENUM
				}
			}
		] /**SCHEMA_DIFF*/ ,
		rules: {},
		userCode: {}
	};
});

Спасибо, получилось :smile:

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

Настроили приложение BPM'Online 7.10.0.1742 и на него поставили пакет из хранилища.
В Пакете были замещающие объекты контрагента, контакта и обращения.

После установки проделали следующие шаги:

1. Сгенерировать для требующих генерации.
2. Компилировать все.
3. Выбрать элементы, структура которых менялась. Обновить для них структуру БД.
4. На вкладке Данные отобразить колонки Текст последней ошибки и Требует установки в БД. Установить выбранные элементы.
5. На вкладке SQL сценарии Установить выбранные элементы.

После этого перезапустили IIS, Redis и почистили Кэш.

  1. У обращения не перенеслись заголовки новых полей
  2. У контрагента и контакта не обновилась структура БД. Т.е. при открытии карточки контрагента или контакта приложение пыталось получить колонки которых не было в базе, но были в схеме объекта.
    В консоли браузера появлялась ошибка "SqlException" "Invalid column name '...'"

Интересуют следующие вопросы:

  1. Почему такое произошло?
  2. И как избежать этого в дальнейшем? Т.к. на устранение проблемы было потрачено много времени.

Нравится

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

Добрый день, Искандер.

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

"Мария Ватулина" написал:

Добрый день, Искандер.

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

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

Было лишь 4 предупреждения которые появляются при компиляции даже дефолтной сборки 7.10

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

Судя по описанному поведению, были перенесены метаданные схем, однако их публикация выполнена не была. Такое поведение может возникнуть при переносе схем через md файлы, а не через установку пакетов через WSC (или через действие "Установка пакета").

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

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