Здравствуйте! Есть пользовательский раздел «Склады», в котором есть 2 записи «Основной» и «Резервный». В каждой записи в детали «Остатки по складу» хранятся данные о продукте и его количестве на складе. Задача такая - необходимо, чтобы на странице добавления продуктов в заказ, отображалось количество продукта из этой детали. Подскажите, пожалуйста, какие модули нужно заместить, чтобы реализовать это, и как? Спасибо!

Нравится

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

Юлия, для реализации данного функционала необходимо заместить модуль "ProductSelectionView", а также модуль "ProductSelectionViewModel". Особое внимание обратите на метод getEditableGridConfig, который отвечает за генерацию грида в данной детали. В замещающем модуле для ProductSelectionViewModel необходимо будет добавить логику загрузки количества данных с использованием EntitySchemaQuery.

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

Добрый день.

Версия 7.2

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

Спасибо.

Нравится

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

Все нужные Вам методы есть в схеме SectionModule, и они доступны через песочницу (sandbox), так что Вы можете в Ваших схемах секции обращаться к ним следующим образом, и анализировать массив включенных фильтров-папок:

define('ContactSection', ['Contact', 'ContactSectionStructure', 'sandbox', 'ContactSectionResources'],
	function(Contact, structure, sandbox, resources) {
	structure.userCode = function() {
 
		// only for debug\test
		document.scc = this;
 
		this.methods.init = function() {
			// only for debug\test
			document.scc = this;
		};
 
		this.methods.GetFolderFilterArray = function() {
			return sandbox.publish("GetFolderFilter", null, [sandbox.id + "_QuickFilterModule"]);
		};
	};
 
	return structure;
});

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

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

Нравится

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

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

Судя по всему данная инструкция неактуальна для версии 770. Пример реализации в 770 можно посмотреть в разделе "Проекты".

Данное поле доступно если наследователь объект, а не замещать.

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

Добрый день.

Версия BPMOnline 7.2

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

if (this.isNew) {
    var statusNew = '8A6DEA2E-6F96-488E-B4B4-DDBEA2F225CD';
    var esq = Ext.create('Terrasoft.EntitySchemaQuery', {
        rootSchemaName: 'SynchronizedRuleStatus'
    });
    esq.getEntity(statusNew, function(result) {
        if (result.success && result.entity) {
            this.set('SynchronizedRuleStatus', result.entity.get('Id'));
       }
    }, this);
}

Однако значение поле в карточке отображается как "undefined". Как решить данную проблему?

Заранее благодарен за помощь.

Нравится

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

А чем не подходит вариант, заместить объект и проставить у колонки значение по умолчанию?

Объект замещать нельзя по некоторым соображениям.

Но проблема уже решена, может кому пригодится:

if (this.isNew) {
    var statusNew = '8A6DEA2E-6F96-488E-B4B4-DDBEA2F225CD';
    var esq = Ext.create('Terrasoft.EntitySchemaQuery', {
        rootSchemaName: 'SynchronizedRuleStatus'
    });
    esq.addColumn('Name');
    esq.addColumn('Id');
    esq.getEntity(statusNew, function(result) {
        if (result.success && result.entity) {
	    var entity = result.entity;
	    if (entity) {
	        var t = {
	            displayValue: entity.get('Name'),
		    value: entity.get('Id')
	        };
	        this.set('SynchronizedRuleStatus', t);
           }
       }
    }, this);
}

Здравствуйте, Артем.

Я бы порекомендовал значение '8A6DEA2E-6F96-488E-B4B4-DDBEA2F225CD'; вынести в системную настройку (типа "Статус по-умолчанию") и тянуть ее оттуда.

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

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

Добрый день коллеги! Подскажите пожалуйста, как правильно переложить данную sql конструкцию под запрос на new Select() версии 5x?
Интересует именно реализация EXISTS

 AND (
        EXISTS(
                SELECT Id FROM CampaignTarget
                WHERE cardId = 'F9ED80C6-1575-4757-83B1-2A7B32B85AA1'
                AND CampaignId = [Campaign].[Id]
        )
        OR NOT EXISTS(
                SELECT Id FROM CampaignTarget
                WHERE CampaignId = [Campaign].[Id]     
        )
 )

Спасибо!

Нравится

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

Влад, вот пример запроса с Exists и Not Exists:

	Select select = new Select(UserConnection)
		.Column("DestinationRecordId")
		.Column("Id")
		.From("LookupConflict")
		.Where("LookupSchemaName").IsEqual(Column.Parameter(node.Values["Lookup"]))
		.And("LookupSchemaDisplayColumnName").IsEqual(Column.Parameter(node.Values["Column"]))
		.And("LookupSchemaDisplayColumnValue").IsEqual(Column.Parameter(node.Values["FileName"]))
		.And().Exists(
			new Select(UserConnection)
				.Column("Id")
				.From("Contact")
				.Where("Contact", "Id").IsEqual("DestinationRecordId"))
		.And().Not().Exists(
			new Select(UserConnection)
				.Column("ContactId")
				.From("Employee")
				.Where("Employee", "ContactId").IsEqual("DestinationRecordId")) as Select;

У Вас структура аналогична, только Or вместо And.

Большое спасибо!:twisted:

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

Еще вопрос, коллеги.

У меня есть поле, которое я создаю через так:

var phoneEdit = Ext.create('Terrasoft.TextEdit', {
        id: 'phone',
        value: {bindTo: 'Phone'},
        classes: {wrapClass: ['edit', 'text-edit']},
        keyup: {bindTo: 'onKeyUp'},
        markerValue: "phoneEdit"
});

Куда здесь прописать маску телефона в таком формате '+38(___)___-__-__' ?

Нравится

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

Вот такое есть решение, свой контрол расширяющий обычный текст, и поддерживающий маску:
http://www.community.terrasoft.ru/forum/topic/11152

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

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

http://www.community.terrasoft.ru/forum/topic/11152

То есть вместо 'Terrasoft.TextEdit' прописать 'Terrasoft.MultiMaskEdit'? Попробую, и сразу отпишу по результату.

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

Здравствуйте, коллеги.

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

Нравится

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

Здравствуйте, Евгений.

Вкладка LESS присутствует только в Модулях. Ее нет в Схемах или Замещающих схемах. Сделать так, что бы она появилась в схемах невозможно. Только создать модуль, определить нужные стили на вкладке LESS, а затем подключить его в define нужной схемы.

Спасибо, Илья.

Буду знать. Хотя странно, неужели такая сложность ее добавлять по запросу?

Евгений, к сожалению, архитектура Bpm'online не предусматривает данных манипуляций.

Жаль. Была бы полезная фича.
Спасибо, Илья.

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

Доброго дня! При розробці стикнувсь з наступною проблемою. Є базовий процес в ньому я дописав свою логіку на JS. Код виконується і все працює коректно. Але як видно на рис. 1 в "Журналі процесів" процес не завершує своє виконання. Підкажіть, будь ласка, чи можна якось програмно заставити процес завершуватись.

Нравится

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

Здравствуйте, Роман!

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

Процес "Создание обращения через CTI панель (по входящему звонку)". Замісітив схему "ContactSearchDetail". При натиску на кнопку "Выбрать" спрацьовує моя логіка. Прикріпив файл з кодом.

Здравствуйте, Роман!

К сожалению, не было возможности проверить. Есть предположение, что в методе onActiveRowAction строку:

this.sandbox.publish("DetailChanged", this.get("ActiveRow"), [this.sandbox.id]);

нужно раскомментировать.

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

Возможно кто-то сталкивался с такой проблемой в BPMOnline 7.2:
Есть класс Service, определенной в пакете Package поставляемой от Terrasoft. Требуется изменить логику работу в нем метода Send. Но, тут возникала проблема, что в пакете Package метод Send вызывается следующим образом:

new Service(UserConnection).Send();

В результате механизм замещения классов не работает через атрибут Override и IOC:
ClassFactory.GetService>(new ConstructorArgument("userConnection", UserConnection));

И мест, где сервис создается напрямую много. Соответственно заместить схемы, где вызывается сервис не представляется возможным.

Есть ли какой-то обходной путь?
Если с процессами, мы можем его отключить в базе флагом, то как быть со схемой исходного кода?
Есть ли такая же возможность отключить?
Может быть если заменить в базе ManagerName, или как-то иначе заблокировать схему, чтобы генератор её не включал в сборку. А самим создать схему с таким же кодом, но с нужными правками?

Нравится

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

Здравствуйте.
Нужно определить какого типа эта схема. Если это SourceCodeSchema, то отключить или заместить не получится.

"Александр Зубков" написал:

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

Нужно определить какого типа эта схема. Если это SourceCodeSchema, то отключить или заместить не получится.


Да, схема типа SourceCodeSchema. Печально, но может быть есть какой-то вариант? Как-то поменять код в самой базе?

"Александр Красноперов" написал:Как-то поменять код в самой базе?

Разблокируйте схему да поправьте, времени кучу сэкономите...
Про то, что будет с поддержкой конфигурации в этом случае, вам расскажет сам Terrasoft, хотя с версией 7.2 я бы не задумывался уже :)

"Александр Кудряшов" написал:
Александр Красноперов пишет:

Как-то поменять код в самой базе?

Разблокируйте схему да поправьте, времени кучу сэкономите...

Про то, что будет с поддержкой конфигурации в этом случае, вам расскажет сам Terrasoft, хотя с версией 7.2 я бы не задумывался уже :)


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

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

Здравствуйте.
Для SourceCodeSchema можно попробовать заместить её и полностью переписать код:
1. Заместить схему.
2. Скопировать контент базовой схемы
3. Переписать код нужного метода.

"Котенко Александр" написал:

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

Для SourceCodeSchema можно попробовать заместить её и полностью переписать код:

1. Заместить схему.

2. Скопировать контент базовой схемы

3. Переписать код нужного метода.

С уважением, Котенко Александр.


А как это можно сделать?
В 7.2 я не вижу возможности заместить схему типа "Исходный код", для клиентских схем - такая возможность есть, а вот для исходного кода - нет

Добрый день.
Действительно, для схемы типа "Исходный код" не получится. Похоже это было доступно в более ранних версиях.

"Александр Зубков" написал:

Добрый день.

Действительно, для схемы типа "Исходный код" не получится. Похоже это было доступно в более ранних версиях.


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

Галочку, наверное, просто, не убрали из интерфейса.

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

Подскажите, пожалуйста, куда копать?

При входе:

Exception Message: Object reference not set to an instance of an object.
Exception Type: System.NullReferenceException
Exception Source: Terrasoft.Messaging.Common

Exception Stack Trace:
   at Terrasoft.Messaging.Common.ClientChannelHelper.GetConnectionParamsInitScript(Uri appUrl)
   at Terrasoft.WebApp.Nui.ViewModule.SetupWebSocketConnectionParams()
   at Terrasoft.WebApp.Nui.ViewModule.Page_Load(Object sender, EventArgs e)
   at System.Web.UI.Control.OnLoad(EventArgs e)
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Нравится

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

Проблема была тут:

<wsService type="Terrasoft.Messaging.MicrosoftWSService.MicrosoftWSService, Terrasoft.Messaging.MicrosoftWSService" encrypted="true" portForClientConnection="443" defaultPort="" />

defaultPort=""

был пустой

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