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

Версия 7.9 sales.

Задача следующая: на странице E-mail есть справочник выбора адреса "Кому". Также на странице есть колонка, связывающая с некоторым контрагентом. В общем случае требуется, чтобы при выборе адреса email были доступны только адреса контактов установленного контрагента.

Как я понимаю, фильтр устанавливается в методе getLookupConfig в схеме EmailPageV2, а точнее, в return:

return {
        config: {
                entitySchemaName: "VwRecepientEmail",
                columnName: columnName,
                columns: ["ContactId"],
                filters: Terrasoft.createColumnIsNotNullFilter("ContactId"),
                multiSelect: true
        },
        callback: callback
};

Вытащить список контактов можно запросом. Далее следует сформировать массив id, и по идее скормить его параметру filters в конфиге..

Но если я задаю например вместо Terrasoft.createColumnIsNotNullFilter("ContactId") задаю функцию с filterGroup таким образом (нашёл на форуме), для примера подставил пока хардкодные idшники:

filters: function() {
         var idList = ["171fbe60-eafc-4713-85eb-7ad92aa2e9e2","8ec32762-286f-477c-a599-2c4184bab8d9"];
         var filterGroup = new Terrasoft.createFilterGroup();
         var filterById = Terrasoft.createColumnInFilterWithParameters("ContactId", idList);
         filterById.comparisonType = Terrasoft.ComparisonType.EQUAL;
         filterGroup.add("filterById", filterById);
         return filterGroup;
},

То справочник вообще не открывается, а в консоль вываливается ошибка (см. скрин).

Возможно ли реализовать такой фильтр, и если да - то как правильно это сделать?

Нравится

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

Попробуйте так:

define("EmailPageV2", ["BusinessRuleModule"],
	function(BusinessRuleModule) {
	return {
		entitySchemaName: "Activity",
		methods: {
			getLookupConfig: function(columnName) {
				var scope = this;
				var callback = function(args) {
					scope.onLookupSelected(args);
				};
				return {
					config: {
						entitySchemaName: "VwRecepientEmail",
						columnName: columnName,
						columns: ["ContactId"],
						filters: this.returnNewFilter(),
						multiSelect: true
					},
					callback: callback
				};
			},
			returnNewFilter: function() {
				var idList = ["410006e1-ca4e-4502-a9ec-e54d922d2c00", "e7d525fb-88ee-4947-94cc-d013e85d2f79"];
				var filterGroup = new Terrasoft.createFilterGroup();
				var filterById = Terrasoft.createColumnInFilterWithParameters("ContactId", idList);
				filterById.comparisonType = Terrasoft.ComparisonType.EQUAL;
				filterGroup.add("filterById", filterById);
				return filterGroup;
			}
		},
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[],/**SCHEMA_DIFF*/
		rules: {
		}
	};
});

Максим, спасибо, помогло.

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

Как осуществить вызов метода, другого, заведомо известного модуля/схемы ?

Например вызвать метод addRecord некоей детали на странице карточки - из кода метода который забинжен на кнопку верхнего горизонтального меню этой карточки.

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

Нравится

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

Добрый день.

Для данной цели Вам необходимо воспользоваться сообщениями sandbox. Данная тема подробно обсуждалось тут.

Подскажите, в клиентской схеме можно описать специальный конфигурационный объект messages, а как быть с модулями, у них иная структура AMD модуля.
Допустим я хочу использовать модуль-миксин.
В конфигураторе в структуре модуля модно добавить события (Messages).

насколько я понимаю - описать событие в коде самого модуля нельзя ?

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

Как же так получается ?
В модуле объявляется событие, но подключив этот модуль к карточке - объявленные в нем события не доступны для публикации ?

Здравствуйте, Илья.

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

Подскажите, почему даже если указать в зависимостях схемы модуль в котором объявлено "сообщение",
скажем некий модуль AksQuestionMessages

define("AksQuestionMessages", [], function() {
	return {
		messages: {
			"AddNewEmailFromCaseAskQuestion": {
				mode: this.Terrasoft.MessageMode.BROADCAST,
				direction: this.Terrasoft.MessageDirectionType.PUBLISH
			}
		}
	};
});

Далее в зависимостях схемы подключаем данный модуль - и все равно при попытке публикации сообщения в любом методе карточки - получаем ошибку про необъявленное сообщение.
Каким же образом наследуются сообщения ?
Неужели единственный способ это объявлять их непосредственно в коде схемы или ее замещающего объекта ?

Сам отвечаю на свой вопрос - для этого существует специальный метод, разместить его вызов следует в момент инициализации схемы, т.е. в методе "init":

this.sandbox.registerMessages(AksQuestionMessages.messages);

в приведенном примере - AksQuestionMessages это некий модуль из зависимостей текущей схемы,

define("CasePage", ["AksQuestionMessages", "AskQuestionMixin", "css!AskQuestionCSS"], function(AksQuestionMessages) {
	return {
		entitySchemaName: "Case",
...

messages - соответственно его конфигурационный объект с событиями.

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

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

Добрый день! Можно ли в группах фильтровать по сезонам: Лето 2016, Зима 2017 и т.д. Допустим выбрать записи у которых “Дата с” и “Дата по” попадает в Лето 2016 со страной Беларусь. И так же для остальных сезонов, чтобы сперва фильтровалось по сезону и году, а затем уже страна в подгруппе.
!

!

Нравится

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

Здравствуйте, Мария!

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

В будущих версиях системы появиться фильтр по кварталам.

Спасибо за ответ, а можно как-то указать промежуток для даты, что-то вроде: "Дата с" = 1.06.2016 - 31.08.2016?

Здравствуйте, Мария!

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

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

Добрый день!

Возникла сложность при настройке БП.

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

1.Проблема с UserConnection.
var account = new Terrasoft.Configuration.Account(UserConnection); Выпадает ошибка, что UserConnection используется как переменная.
Заменила на :
var account = Get("UserConnection");

2. ошибка при использовании FetchFromDB(прикрепила изображение с ошибкой)
Не нашла ничего толком по тому как используется FetchFromDB
Usings добавила Terrasoft.Configuration

AExists = account.FetchFromDB(Name);
В Name указала название контрагента.

Подскажите,пожалуйста, как решить данную ошибку.

Нравится

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

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

Зачем для этого писать код?

Используйте элемент "Чтение данных" в режиме подсчета количества записей по объекту "Контрагент". Создайте параметр процесса с типом "Строка". В элементе "Чтение данных" необходимо сравнить название с параметром процесса.

Если нужно решить задачу кодом, тогда рекомендую изучить документацию:
https://academy.terrasoft.ru/documents/technic-sdk/7-9/ispolzovanie-ent…

Спасибо за ответ!

Первый вариант идеально подходит!

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

Добрый день!
Подскажите, есть ли какая-нибудь документация по работе с Комбобоксом в 7.2?
Хочу создать комбобокс с выпадающим списком от 1 до 5. И это значение сохранять в целочисленное поле объекта (таблицы).
Создаю комбобокс через BankModuleUtilities.utils.getComboBox. Но не получается его заполнить.

Нравится

3 комментария
define('ContactPersonalInfoModuleITS', [
        'ext-base', 'terrasoft', 'sandbox', 'ContactPersonalInfoModuleITSResources',
        'ViewUtilities', 'BaseProcessViewModelClass', 'ProcessHelper', 'BankModuleUtilities', 'BankConfigurationConstants',
        'KFClientConsts', 'MaskHelper'],
    function(Ext, Terrasoft, sandbox, resources, ViewUtilities, BaseProcessViewModelClass, ProcessHelper,
             BankModuleUtilities, BankConfigurationConstants, KFConsts, MaskHelper) {
 
        var bankModuleUtils = BankModuleUtilities.utils;
        var bankModuleMethods = BankModuleUtilities.methods;
        var lc = resources.localizableStrings;
        var viewModel;
 
        function getView(processData) {
            ...
            var clientInfoGroup = bankModuleUtils.getControlGroup('ClientInfo',
                lc.ITSAdditionalInformationGroupCaption);
            clientInfoGroup.items = [
                bankModuleUtils.getLabel(lc.ITSFromOneToFiveLookupCaption, '', {id: 'FromOneToFiveLookupControlLabel'}),
                bankModuleUtils.getComboBox('FromOneToFiveLookup')
            ];
   ...
        }
 
        function getViewModel() {
            return Ext.create('Terrasoft.BaseProcessViewModel', {
                values: {
                    fromOneToFiveLookupList: new Terrasoft.Collection()
                },
                methods: {
                    getFromOneToFiveLookupList: function(filter, list) {
                        bankModuleMethods.fillListBySchemaName(list, 'FromOneToFiveLookup');
                    }
                },
                columns: {
                    FromOneToFiveLookup: {
                        dataValueType: Terrasoft.DataValueType.ENUM,
                        isRequired: false
                }
            });
        }
 
        function render(renderTo) {
            var processData = ProcessHelper.getProcessElementData(sandbox);
            var view = getView(processData);
            if (!viewModel) {
                viewModel = getViewModel(renderTo);
                viewModel.sandbox = sandbox;
                viewModel.processData = processData;
                viewModel.onLoad();
            }
            view.bind(viewModel);
            view.render(renderTo);
            document.getElementById('MaritalStatus-el').focus();
        }
 
        return {
            render: render
        };
    });

Вам надо создать справочник (в моем примере FromOneToFiveLookup) в котором будут значение 1 - 5

Спасибо!
А можно как-то без создания справочника обойтись?

bankModuleMethods.fillListBySchemaName
Посмотрите как заполняет список этот метод и сами вручную заполните свой список

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

Доброго времени суток!
Прошу объяснить принцип установки пакета из репозитория.
Объясню причину данного обращения, есть около 7 пакетов которые были созданы нами и вот когда мы попытались засетапить их на другую среду (заранее проясню что их версии и сборки абсолютно идентичны), после выполнения необходимых первоначальных действий установки зависимостей пакетов друг от друга, генерации исходного кода компиляции, обновлении структуры базы данных и, наконец, установки данных мы получаем ряд ошибок связанных с отсутствием необходимых колонок, если быть конкретнее то справочных полей.
Когда смотрим в таблицу в БД обнаруживаем, что действительно, данных колонок там просто нету.
Так вот вся суть в чем, каким образом тогда выполняются этапы установки пакета и чем стоит пользоваться при их установке?
Это будет SVN или лучше с помощью workspace console?
Прошу более детально ответить на данный вопрос.
Данная функциональность разрабатывается в рамках проекта РусТехЭксперт.

Нравится

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

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

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

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

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

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

Здравствуйте, Михаил.

Прикрепите пожалуйста логи установки.

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

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

Нравится

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

Добрый день!

Удаление связанных записей – комплексный механизм, который пока не реализован в бизнес-процессах. Ваше пожелание будет учтено при разработке следующих версий продукта.

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

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

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

Нравится

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

Штатными средствами такое сделать нельзя: есть отдельно права по колонкам, отдельно — по записям. Возможно, как-то с помощью программных доработок.

Возможно у кого-то был подобный опыт?

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

Спасибо!

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

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

Возникла необходимость доработать стандартный справочник, а именно - реализовать реестр в справочнике и страницу редактирования записей справочника. Реестр реализовать получилось, а страницу он почему-то не видит. При попытке добавления или открытия записи в консоли браузера появляется ошибка "message: Uncaught Terrasoft.ItemNotFoundException: Элемент с ключом null Не существует". Подскажите, возможно кто-нибудь с этим сталкивался?

Нравится

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

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

Без отладки и по описанию сложно сказать в чем проблема, также:

- нет полного листинга кода;
- нет полного понимая, что прописано в БД.

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

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

При создании разделов и деталей при помощи мастера, возникают ошибки с блокировкой файлов в svn.

К примеру мой кейс.
Создал раздел UsrX который в момент компиляции выполнился с ошибкой. Система создала стандартный набор файлов и сразу из заблокировала(зеленый замок).
Значит так конец рабочего дня надо идти. Мы это дело фиксируем и идем домой.
На следующий день понимаем что надо удалить раздел UsrX (описание тут https://academy.terrasoft.ru/documents/bank-customer-journey/7-9/chasto-...)
Но мы уже не помним что файлы у нас залоченные, удалив из БД, мы удаляем наши зеленые файлы.
Соответственно фиксируем чтобы было это видно.

Ну и начинаем заново создавать раздел, ура сегодня он создался удачно, мы рады. Комитим, и тут нам svn ругается что такой файл уже есть и он залочен - разблокируй его. Но уже никак. С таким именем уже не сделать.

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

Кто-то сталкивался с таким уже?

Нравится

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

Марат, после удаления схем в системе нужно также удалить их файлы из временной папки, как описано в ответе тут. После этого схемы исчезнут и в SVN.

Александр, да все верно. В моем случае это помогло. Но ошибка которая выходила при этом меня сбила столку.

Элементы невозможно зафиксировать в хранилище, т.к. один или несколько компонентов заблокированы другим пользователем
Working copy '\Usr' locked
SvnErrorCode: SVN_ERR_WC_LOCKED
RootCause: sqlite[S14]: unable to open database file

Долго мучился, пока на самом деле не удалил папку C:\Windows\Temp\NN\Worspace\TerrasoftPackages
где NN - номер приложения
Worspace - Имя Worspace.

Было бы классно в FAQ добавить)))

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

Марат, получили от Вас обратную связь на Академии, спасибо! Запланировала задачу, сделаем дополнение в FAQ.

Людмила, еще момент, мы сталкиваемся с такой проблемой в SVN с тем, что система дает удалять залоченные файлы. Тем самым если в последствии системе создать аналогичный - то не получится его добавить в репозитарий.

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

Напишите, пожалуйста, подробный кейс воспроизведения данной ошибки на support@terrasoft.ru, чтобы мы могли воспроизвести ошибку и передать информацию разработчикам ядра.

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