Здравствуйте, подскажите реализацию в BPM 7.3

this.filterPath,
this.filterValue.

define("MapDetail", ["terrasoft","Segment","MapHelper","Promise"],
    function(Terrasoft,entitySchema,MapHelper,Promise){
        return {
            entitySchemaName: "Segment",
            attributes: {},
            methods: {
                    init : function (reload) {
                    this.callParent(arguments);

                    var filters =
                        {
                            filterPath: this.filterPath,
                            filterValue: this.filterValue
                        };
                        gridData = this.getGridData();
                        editingMode = true;
                    MapHelper.GetMap(gridData, null, editingMode, filters, !reload);
                },
                reload : function () {
                            this.init(true);
                }
            },
            diff: []
        }
    }
);

В данном контексте возвращает undefined.
Как реализовать данную конструкцию?

Нравится

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

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

Александр, вместо this.filterPath используйте this.get("DetailColumnName");
Данная запись позволяет получить колонку детали для фильтрации.
Вместо this.filterValue используйте this.get("MasterRecordId"); (значение ключа родительской записи).
Обратите внимание, в версии 7.3 изменилась структура деталей. Со списком атрибутов Вы можете ознакомиться в BaseDetailV2 и BaseGridDetailV2 (для детали с реестром).

Спасибо, уже тоже заметил.

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

Здравствуйте, уважаемые гуру!
Очень нужна помощь.
При входе в BPM вылетает следующая ошибка.

Exception Message: Элемент с идентификатором "b8717ba9-68cd-4f46-8d95-3d75ce41b435" не найден
Exception Type: Terrasoft.Common.ItemNotFoundException
Exception Source: Terrasoft.Core

Exception Stack Trace:
   в Terrasoft.Core.ManagerItemCollection`1.GetByUId(Guid uid)
   в Terrasoft.Core.Manager`2.GetInstanceByUId(Guid uid)
   в Terrasoft.Core.Manager`2.Terrasoft.Core.IManager.GetInstanceByUId(Guid uid)
   в Terrasoft.UI.WebControls.ClientUnitSchemaDecorator.GetSchemaHash(ClientUnitSchema schema)
   в Terrasoft.UI.WebControls.ClientUnitSchemaDecorator.GetCommonSchemaHash(Schema schema)
   в Terrasoft.UI.WebControls.ClientUnitSchemaDecorator.GetSchemaDescriptor(Schema schema, String identifiersQuote)
   в Terrasoft.Configuration.ConfigurationSectionHelper.GetClientUnitSchemaDescriptors(UserConnection userConnection)
   в Terrasoft.Configuration.ConfigurationSectionHelper.GetConfigurationScript(UserConnection userConnection)
   в Terrasoft.WebApp.Nui.ViewModuleHelper.CreateModulesConfigScript(UserConnection userConnection, HttpResponse response)
   в Terrasoft.WebApp.Nui.ViewModule.SetupModulesConfig()
   в Terrasoft.WebApp.Nui.ViewModule.Page_Load(Object sender, EventArgs e)
   в System.Web.UI.Control.LoadRecursive()
   в System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

SessionID: 5q2513otiqs5qsv4xucqsngn
Request URL: /0/Nui/ViewModule.aspx
Request Path: /0/Nui/ViewModule.aspx
Request UrlReferrer: http://softex-iis:8896/

Request
Type: GET
User Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36
User Host Address: 192.168.0.5
User: Supervisor
Is Authenticated: True
Authentication Type: Forms
Is Secure Connection: False

Application Version: 7.3.0.745
Application Path: D:\WWW\Logistics7.3\Terrasoft.WebApp\
Application Virtual Path: /0
Application Trust Level: Full
Machine Name: SOFTEX-IIS
Is Local: False

Process ID: 19748
Process Name: w3wp.exe
Process Account Name: IIS APPPOOL\Logistics7.3
Thread Account Name: IIS APPPOOL\Logistics7.3
OS Version: Microsoft Windows NT 6.3.9600.0
Net Framework Version: 4.0.30319.34003
DBExecutor Type: MSSqlExecutor

Произошло это после добавления детали "Услуги в заявке"

Для регистрации использовался следующий скрипт

EXEC [dbo].[tsp_RegisterPage]
             @ModuleEntityName = N'ServiceInRequest',-- название объекта детали
             @PageName = N'ServiceInRequestPageV2', -- Название страницы редактирования детали
             @TypeColumnUId = NULL,
             @TypeValue = NULL,
             @AddMenuCaptionRus = NULL,
             @AddMenuCaptionEng = NULL,
             @CardHeaderCaptionRus = NULL,
             @CardHeaderCaptionEng = NULL

insert into SysDetail (Caption, DetailSchemaUId, EntitySchemaUId)
values ('Услуги в заявке', (select top 1 uid from VwSysSchemaInWorkspace where Name = 'ServiceInRequestDetailV2'), --тут вписываем название добавленной детали
(select top 1 uid from VwSysSchemaInWorkspace where Name = 'Request')) --тут - название объекта раздела

Можно ли прислать бэкап базы для анализа?

Нравится

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

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

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

select cast(Source as varchar(max)) from SysSchemaSource where cast(Source as varchar(max)) like '%b8717ba9-68cd-4f46-8d95-3d75ce41b435%'

Или, если лень, можете в поддержку или в личку мне отправить ссылку на копию БД.
Хорошего вечера!

Спасибо большое! Нашел из-за чего сыпет. Очень выручили.

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

Здравствуйте, подскажите пожалуйста, возможно ли реализовать деталь в детали в bpm 7.3?

https://community.terrasoft.ru/forum/topic/10157 - Данную тему изучил, но она мне не подходит, т.к. у меня в различных деталях различный набор данных

Примерный вид деталей
деталь
Название | Ед.изм | Количество | нац, % | нац,сумма | Поставщик | Клиент | маржа:% | сумма

Вложенная деталь
Подрядчик | Контакт | Ориентировочная сумма | Объявленная сумма | Исполнитель

Нравится

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

Здравствуйте, Александр!
Принципиально можно сделать по-разному. Более простой вариант реализации - в виде двух деталей, которые сообщать через sandbox.
Более сложный - добавлять второй грид на одну делать. посмотрите реализацию "BaseGridDetailV2". В прицнипе, никто на мешает Вам добавить еще один элемент с типом Terrasoft.ViewItemType.GRID. Нужно просто реализовать все необходимые методы подгрузки данных в него.
Конкретных примеров дать не могу, но подскажу по точечным вопросам, которые будут возникать в ходе реализации.

Здравствуйте!
Можете описать примерный порядок действий для двух деталей, которые сообщаются через sandbox.?

Добрый день, Александр!

1. На странице главной детали с помощью операции "merge" в блоке "diff" добавить для реестра подписку на событие выделения записи "selectRow". Примерно так:

{
"operation": "merge",
					"name": "DataGrid",
					"values": {
						"selectRow": { "bindTo": "rowSelected" }
					}
}

Здесь rowSelected - это метод-обработчик события, который принимает одни аргумент - Id выделенной записи.
2. На этой же странице добавить PTP-сообщение для публикации (PUBLISH) в объект "messages". В методе rowSelected отправлять это сообщение (sanbox.publish).
3. На странице подчиненной детали добавить это же сообщение, но для подписки (SUBSCRIBE) и с помощью sandbox.subscribe подписаться на получение этого сообщения в методе "init" или "subscribeSandboxEvents"(вызывается в init страницы "BaseDetailV2"). В методе-обработчике накладывать фильтрацию и перезагружать реестр детали.
Вроде бы все.
Если будут возникать вопросы по ходу - обращайтесь.

"Андрей Каспаревич" написал:

Добрый день, Александр!

1. На странице главной детали с помощью операции "merge" в блоке "diff" добавить для реестра подписку на событие выделения записи "selectRow". Примерно так:

{

"operation": "merge",

                                        "name": "DataGrid",

                                        "values": {

                                                "selectRow": { "bindTo": "rowSelected" }

                                        }

}

Здесь rowSelected - это метод-обработчик события, который принимает одни аргумент - Id выделенной записи.

2. На этой же странице добавить PTP-сообщение для публикации (PUBLISH) в объект "messages". В методе rowSelected отправлять это сообщение (sanbox.publish).

3. На странице подчиненной детали добавить это же сообщение, но для подписки (SUBSCRIBE) и с помощью sandbox.subscribe подписаться на получение этого сообщения в методе "init" или "subscribeSandboxEvents"(вызывается в init страницы "BaseDetailV2"). В методе-обработчике накладывать фильтрацию и перезагружать реестр детали.

Вроде бы все.

Если будут возникать вопросы по ходу - обращайтесь.


Здравствуйте, Андрей. Я недавно тут и поэтому простите за глупые вопросы) .
Есть деталь, при раскрытии этой детали необходимо чтобы в ней была ещё 1 деталь.
То что вы описали, как я понял, реализует именно то, что мне нужно, но мне многое не понятно. (
1-2 пункт. На странице схемы детали или странице карточки схемы детали добавлять. Я добавил в схеме детали:

define("UsrSchema12DetailV2", [], function() {
	return {
		entitySchemaName: "UsrInsuranceCase",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
		{
			"operation": "merge",
			"name": "DataGrid",
			"values": {
				"selectRow": { "bindTo": "rowSelected" }
			}
		}
		]/**SCHEMA_DIFF*/,
		methods: {},
		messages: {
    	"rowSelected": {
	        mode: this.Terrasoft.MessageMode.PTP,
	        direction: this.Terrasoft.MessageDirectionType.PUBLISH
	    }
}
	};
});

3пункт. Тут совсем все плохо и не понятно, что и куда писать даже. Если дадите кусок когда, то буду премного благодарен.

Здравствуйте, Павел.

"Гончаров Павел Ильич" написал:Есть деталь, при раскрытии этой детали необходимо, чтобы в ней была ещё 1 деталь.

Не совсем так, насколько я понял, вам предложили сделать 2 детали. Каждая в своем модуле (в своей схеме). Вывести одну под другой на карточке редактирования.
Первая будет главной, вторая ведомой.
В первой вы по событию нажатия на строку, генерируете событие для второй.
Во второй это событие ловите, и манипулируете данными, так как хотите.
К примеру, в первой выбираете страну.
А во второй в это время включаете фильтр по выбранной стране и отображаете только ее города.
Пример работы с песочницей для генерации и подписки на событие напишу ниже, в нем я генерирую событие активной строки в детали "AccountBillingInfoDetailV2", и слушаю его в детали "AccountAddressDetailV2".

define("AccountBillingInfoDetailV2", [], function() {
	return {
		entitySchemaName: "AccountBillingInfo",
		details: /**SCHEMA_DETAILS*/{
 
		}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "merge",
				"name": "DataGrid",
				"values": {
					"selectRow": {
						"bindTo": "rowSelected"
					}
				}
			}
		]/**SCHEMA_DIFF*/,
		methods: {
			rowSelected: function() {
				this.sandbox.publish("RowSelectedInFirstDetail", { test: "param anything" }, [this.sandbox.id]);
				console.log("rowSelected in first detail...");
			}
		},
		messages: {
			"RowSelectedInFirstDetail": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.PUBLISH
			}
		}
	};
});
define("AccountAddressDetailV2", [], function() {
	return {
		entitySchemaName: "AccountAddress",
		details: /**SCHEMA_DETAILS*/{
 
		}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		methods: {
			init: function() {
				this.sandbox.subscribe("RowSelectedInFirstDetail", function(arg) {
					console.log("test " + arg.test);
				}, this, [this.getSenderSandboxId()]);
			},
			getSenderSandboxId: function() {
				return this.sandbox.id.replace("_AccountAddress", "_AccountBillingInfo");
			}
		},
		messages: {
			"RowSelectedInFirstDetail": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.SUBSCRIBE
			}
		}
	};
});

Суть здесь в том, что бы сообщения формировались и слушались по одному и тому же sandbox.id. Проверить это можно поставив точки останова на методах публикации и подписки на событие, и смотреть значение третьего параметра для публикации, и четвертого для подписки.

Подробнее про модули и песочницу:
http://academy.terrasoft.ua/documents/docs/technic/SDK/7.4.1/ModuleDeve…

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

Максим, спасибо за ответ и то что поправили меня. Да, я видать не в ту сторону начал смотреть. Мне нужно просто деталь вложенная в деталь, но у меня все равно ничего не вышло. Мои действия: создал обе детали, в родительской детале в схеме карточки детали добавляю в раздел details связь по каким полям, в diff вставляю эту деталь, но её все равно нет. Когда открываю редактор родительской детали, то деталь которую я вставил отображается каким то блоком. В define подключил GeneralDetails и в функцию передаю параметром.

Вам не нужно делать деталь в детали. Создайте две разные детали, обычными мастерами деталей, а потом в мастере раздела выведите обе детали на страницу редактирования. В этом нет ничего сложного, а подробнее про мастера можете почитать на академии, или посмотреть видео на канале:
https://www.youtube.com/watch?v=djefWQslz2U&feature=youtu.be&list=PLDp-…
Должны получится просто две детали, одна под другой (на скриншоте стандартные, но вы выведите свои):

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

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

Здравствуйте, подскажите пожалуйста, аналог свойства "columns" в 7.3 либо формат его использования.

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

                 {
                    "operation":"insert",
                    "parentName": "Header",
                    "propertyName": "items",
                    "name": "Service",
                    "columns": ['Unit', 'Cost', 'Price'],
                    values: {
                        "layout": {
                            "column": 0,
                            "row": 0,
                            "colSpan": 12
                        },
                        "contentType": Terrasoft.ContentType.ENUM
                    }
                },

Нравится

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

Александр, в качестве примера обратите внимание на InvoiceProductPageV2. А именно, выделенный ниже блок кода:
define("InvoiceProductPageV2", ["MoneyModule"],
function(MoneyModule) {
return {
entitySchemaName: "InvoiceProduct",
attributes: {
"Invoice": {
lookupListConfig: {
columns: ["CurrencyRate"]
}
}
},

details: /**SCHEMA_DETAILS*/{
}/**SCHEMA_DETAILS*/,
methods: {
/**
...

Работает, спасибо большое! Поиском почему-то не нашел.

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

Здравствуйте, можно ли в коде js программно изменять свойства объектов (интересует "обязательно для заполнения", "visible" и "enabled") не прибегая к bind или rules, т.е. делать это напрямую?

Нравится

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

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

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

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

Для настройки логики полей в bpm'online 7.3 необходимо использовать бизнес-правила. Секция rules: на странице.

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

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

{
                    "operation": "insert",
                    "name": "CargoWeight",
                    "parentName": "CargoBlock",
                    "propertyName": "items",
                    //"index": 1,
                    "values": {
                        "layout": {"column": 0,"row": 0,"colSpan": 8,"rowSpan": 1}
                    }
                },
                {
                    "operation": "insert",
                    "name": "WeightUnit",
                    "parentName": "CargoBlock",
                    "propertyName": "items",
                    //"index": 0,
                    "values": {
                        "layout": {"column":9,"row": 0,"colSpan": 8,"rowSpan": 1},
                        "contentType": Terrasoft.ContentType.ENUM,
                        "labelConfig": {
                            "visible": false
                        }
                    }
                }

Помогите, пожалуйста, решить данную проблему. Нужно расположить данные поля на форме без отступа.

Нравится

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

Александр, вопрос решается подбором параметров "layout" для этих двух полей.

Вложите, пожалуйста, схемы страницы и объекта. Я помогу подобрать нужные параметры для корректной разметки.

Буду весьма признателен.
Поля в группе "Груз" на вкладке "Основная информация" необходимо расположить как можно ближе друг к другу.

Александр, подбором параметров не получилось.
Нужно изменять CSS стиль, для этого:
1. Создайте модуль, пропишите в нем подобный код на закладке LESS:

#LeadPageV2Title1Container_Control
{
    padding-left: 0;
    margin-left: 0;
    width: 50%;
}

Вместо LeadPageV2Title1Container_Control Вам нужно указать ID html контрола Вашего поля (для которого скрываете заголовок). ID можно посмотреть в консоли.

2. Затем в клиентском модуле страницы (у Вас это TransRequestPage) подключите созданный на первом шаге модуль.
Например:
define('LeadPageV2', ['LeadPageV2Resources', 'GeneralDetails','css!MyCss'],

Где MyCss - название созданного модуля.

P.S: не смогла загрузить вложенные Вами схемы, так как в базовой версии нет таких объектов, на которые в схемах присутствуют ссылки.

Добрый день, выполнил все по инструкции.
На вкладке LESS прописал

#TransRequestPageWeightUnitContainer_Control
{
    padding-left: 0;
    margin-left: 0;
    width: 50%;
}

и подключил в клиентском модуле
define('TransRequestPage', ['TransRequestPageResources', 'GeneralDetails','Constants','BusinessRuleModule','css!CssForTransRequestPage'],
но никаких изменений с контролом не произошло, название по-прежнему перекрывает часть поля редактирования.

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

Разобрался, ошибся с названием, когда подключал.
Спасибо за помощь!

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

Здравствуйте, подскажите пожалуйста, как перенести данный код на 7.3

this.methods.init = function() {
                this.onPrfServiceContractor = function() {
                    var viewModel = this;
                    setTimeout(function(){
                        viewModel.reloadDetail('PrfServiceContractor')
                    }, 150, viewModel);
                    setTimeout(this.waitDetailReload, 300, this);
                };
                this.waitDetailReload = function(viewModel) {
                    var detailCollection = viewModel.getDetailItems('PrfServiceContractor');
                    detailCollection.forEach(function(el) {
                            if (el.get('Main'))
                                viewModel.set('Cost', el.get('Cost'));
                        },
                        viewModel
                    );

                    return viewModel;
                };
                this.changeDetailSubscribeByName('PrfServiceContractor', this.onPrfServiceContractor);
                window.ServiceCardViewModel = this;
                window.CurrentEditPage = this;
            };

Есть ли в 7.3 метод this.changeDetailSubscribeByName? если нет, то подскажите его аналог.
Пробовал реализовать следующим образом (не помогло)

PrfServiceContractor: {
                    schemaName: "PrfServiceContractorDetail",
                    entitySchemaName: "PrfServiceContractor",
                    filter: {
                        masterColumn: "Id",
                        detailColumn: "PrfService"
                    },
                    subscriber: "this.onPrfServiceContractor"
                }

Нравится

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

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

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

InvoiceProduct: {
				schemaName: "InvoiceProductDetailV2",
				filter: {
					masterColumn: "Id",
					detailColumn: "Invoice"
				},
				subscriber: function() {
					this.onInvoiceProductDetailUpdated();
				}
			},

Все работает, спасибо.

Подскажите пожалуйста, как в 7.3 реализован метод getDetailItems
Пытаюсь обратиться к нему следующим образом

var detailCollection = viewModel.getDetailItems('PrfServiceContractor');

подключаемые библиотеки:
define('prfServicePage', ['prfServicePageResources', 'GeneralDetails','terrasoft'],
function(resources, GeneralDetails,Terrasoft)

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

Метод getDetailItems() в версии 7.3 использовать не рекомендуется. Он остался для совместимости с более ранними версиями приложений 7.0 - 7.2 Просьба уточнить какую задачу Вы хотели реализовать с помощью данного метода.

На странице раздела есть деталь с полями стоимость и основной. Если у записи в детали установлено булево поле основной в true, то нужно в странице раздела у поля стоимость установить данное значение.
Скажите пожалуйста, есть ли где-то список всех доступных методов и свойств объектов для 7.3 ?

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

Вашу задачу алгоритмически можно решить так:
На странице детали в attributes:
в определении атрибута указать в dependencies метод который сработает при изменении поля, например:

"JobTitle": {
		dependencies: [
		{
			columns: ["Job"],
			methodName: "jobChanged"
		}
	]
},

В самом методе Вам необходимо будет генерировать сообщение, которое будет обработано в основной странице, также можно передать в масиве args необходимые параметры.

jobChanged: function() {
	var job = this.get("Job");
	if (!this.Ext.isEmpty(job)) {
 
	var args = {
	scope: this,
	isSilent: true,
        param: job,
	messageTags: [sandbox.id]
	};
 
	sandbox.publish("RecordChanged", args, [sandbox.id]);
        }
}

Затем в методе который выполняется после изменения детали, необходимо выполнить подписку на сообщение "RecordChanged" с массива параметров получить необходимые значения полей детали и установить их в качестве значений полей страницы редактирования, например так:

onInvoiceProductDetailUpdated: function() {
	this.sandbox.subscribe("RecordChanged", function(args) {
	this.set("Job", args.param);
	}
},

Весь код представлен в качестве примера и не является готовым решением.

Также Вы можете ознакомиться с обучающим видео по конфигурированию bpm'online 7.3 по ссылке http://www.training.terrasoft.ru/resources/video
Техническая документация по платформе BPMonline CRM 7.3 http://www.terrasoft.ru/documentation/bpmonlinesdk7-3/

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

Добрый день!
BPM Online 7.3.0.745

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

GET http://softex-iis:8896/0/configuration/entityschema/d168b8ad3c426123d2ca... 500 (Internal Server Error) require.js:1834
Uncaught Error: Script error

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

Exception Message: Ссылка на объект не указывает на экземпляр объекта.
Exception Type: System.NullReferenceException
Exception Source: Terrasoft.Core

Подробности во вложенном файле

error.txt

Нравится

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

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

Добрый день, Александр!
Не удалось воспроизвести ошибку. Прошу уточнить, объект называется "prfService"?
Если да, то каким образом Вы создали объект без приставки "Usr"?
Также прошу выгрузить и предоставить созданный объект для анализа.

Здравствуйте, объект пользовательский.
Приставки Usr нет, т.к. она не выставлена в системных настройках.

Проблема уже была решена.
Во вложении 2 файла.
prfService_withError - объект с ошибкой(неверные данные были у полей MarginPercentage,Cost),
prfService - объект с решенной проблемой

Условия возникновения проблемы:
Создается числовое поле,
выбираю значение по умолчанию=>Устаноновить константу (без входа в поле редактирования)

Решение следующее.
в метаданных у данного объекта для проблемного поля меняем значения следующим образом
"E12":{"FB1":1}
на
"E12":{"FB1":1,"FB2":"0"}

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

Обязательно ли для поля дробного типа указывать константу в формате "0,00"?

Здравствуйте, Александр!
Передам информацию в департамент разработки для исправления в следующих версиях.
Для поля дробного типа можно просто ввести "0", и значение автоматически приведется к виду "0,00".

Добрый день, Александр!
Ошибка устранена. Для получения сборки с исправлением (7.3.0.2665), пожалуйста, обратитесь в тех. поддержку посредством e-mail.
Спасибо!

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

Здравствуйте, подскажите, пожалуйста, как мне реализовать изменение поля «Статус» зависящее от изменения поля «Результат» (2 справочника, выпадающие списки).

Создала Модуль MyConstants:
define("MyConstants", ["MyConstantsResources"], function(resources) {
var lead = {
Result: {
NewSale: "81f6fc3e-85a9-480e-b9f1-ab105f273c82"
},
Stage: {
NewSale: "8b3e4047-8a5b-4593-8e46-98475aef3db0"
}
};

return {
Lead: lead
};

});

В LeadPageV2 (замещающей) прописала:

attributes: {
"UsrStage": {
dataValueType: Terrasoft.DataValueType.ENUM,
dependencies: [
{
columns: ["UsrResultOfLida"],
methodName: "ChangedOfResult"
}
]
}
},
methods: {
ChangedOfResult: function() {
var res = this.get("UsrResultOfLida");
if(res.value === MyConstants.Lead.Result.NewSale) {
this.set("UsrStage", MyConstants.Lead.Stage.NewSale)
}
}
},

При изменении значения в поле «Статус» при изменении результата подставляется «undefined». Что я не правильно написала???

Нравится

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

Виктория, вроде бы все правильно. Уточните, а на странице лида Вы подключили свой модуль?
Его нужно добавить в блок Dependencies, а также в define в коде по такому же принципу, как подключаются константы конфигурации:
define("LeadPageV2", ["BusinessRuleModule", "ConfigurationConstants"],
function(BusinessRuleModule, ConfigurationConstants) {

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

Да, я его подключила, так как проверка If срабатывает.

define('LeadPageV2', ['LeadPageV2Resources', 'GeneralDetails', 'MyConstants'],
function(resources, GeneralDetails, MyConstants) {
return {
entitySchemaName: 'Lead',
details: /**SCHEMA_DETAILS*/{
"KnowledgeBase": {
"schemaName": "KnowledgeBaseDetailV2",
"entitySchemaName": "KnowledgeBase",
"filter": {
"masterColumn": "Id"
},
"filterMethod": "test"
}
}/**SCHEMA_DETAILS*/,
diff: /**SCHEMA_DIFF*/[
{
"operation": "merge",
"name": "Contact",
"values": {
"layout": {
"column": 0,
"row": 0,
"colSpan": 12,
"rowSpan": 1
}
}
},
{
"operation": "merge",
"name": "Account",
"values": {
"layout": {
"column": 12,
"row": 0,
"colSpan": 12,
"rowSpan": 1
},
"caption": {
"bindTo": "Resources.Strings.AccountCaption"
},
"textSize": "Default",
"contentType": 1,
"labelConfig": {
"visible": true
}
}
},
{
"operation": "merge",
"name": "Status",
"values": {
"layout": {
"column": 0,
"row": 1,
"colSpan": 12,
"rowSpan": 1
}
}
},
{
"operation": "insert",
"name": "UsrStage1",
"values": {
"layout": {
"column": 0,
"row": 2,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "UsrStage",
"caption": {
"bindTo": "Resources.Strings.UsrStageCaption"
},
"textSize": "Default",
"contentType": 3,
"labelConfig": {
"visible": true
}
},
"parentName": "Header",
"propertyName": "items",
"index": 3
},
{
"operation": "insert",
"name": "UsrBaseAccount",
"values": {
"layout": {
"column": 12,
"row": 1,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "UsrBaseAccount",
"caption": {
"bindTo": "Resources.Strings.BaseAccountCaption"
},
"textSize": 0,
"contentType": 5,
"labelConfig": {
"visible": true
}
},
"parentName": "Header",
"propertyName": "items",
"index": 4
},
{
"operation": "merge",
"name": "Commentary",
"values": {
"layout": {
"column": 0,
"row": 1,
"colSpan": 24,
"rowSpan": 2
},
"caption": {
"bindTo": "Resources.Strings.CommentaryCaption"
},
"textSize": "Default",
"labelConfig": {
"visible": true
}
}
},
{
"operation": "insert",
"name": "UsrActivityKind",
"values": {
"layout": {
"column": 0,
"row": 0,
"colSpan": 24,
"rowSpan": 1
},
"bindTo": "UsrActivityKind",
"caption": {
"bindTo": "Resources.Strings.UsrActivityKindCaption"
},
"textSize": 0,
"contentType": 5,
"labelConfig": {
"visible": true
}
},
"parentName": "LeadPageGeneralBlock",
"propertyName": "items",
"index": 1
},
{
"operation": "insert",
"name": "group",
"values": {
"itemType": 15,
"caption": {
"bindTo": "Resources.Strings.groupCaption"
},
"items": [],
"controlConfig": {
"collapsed": false
}
},
"parentName": "GeneralInfoTab",
"propertyName": "items",
"index": 1
},
{
"operation": "insert",
"name": "group_gridLayout",
"values": {
"itemType": 0,
"items": []
},
"parentName": "group",
"propertyName": "items",
"index": 0
},
{
"operation": "merge",
"name": "BusinesPhone",
"values": {
"layout": {
"column": 0,
"row": 0,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "BusinesPhone",
"caption": {
"bindTo": "Resources.Strings.BusinesPhoneCaption"
},
"textSize": "Default",
"contentType": 1,
"labelConfig": {
"visible": true
}
}
},
{
"operation": "move",
"name": "BusinesPhone",
"parentName": "group_gridLayout",
"propertyName": "items",
"index": 0
},
{
"operation": "merge",
"name": "Email",
"values": {
"layout": {
"column": 0,
"row": 1,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "Email",
"caption": {
"bindTo": "Resources.Strings.EmailCaption"
}
}
},
{
"operation": "move",
"name": "Email",
"parentName": "group_gridLayout",
"propertyName": "items",
"index": 1
},
{
"operation": "merge",
"name": "Region",
"values": {
"layout": {
"column": 0,
"row": 2,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "Region",
"caption": {
"bindTo": "Resources.Strings.RegionCaption"
},
"textSize": "Default",
"contentType": 5,
"labelConfig": {
"visible": true
}
}
},
{
"operation": "move",
"name": "Region",
"parentName": "group_gridLayout",
"propertyName": "items",
"index": 2
},
{
"operation": "merge",
"name": "InformationSource",
"values": {
"layout": {
"column": 0,
"row": 3,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "InformationSource",
"caption": {
"bindTo": "Resources.Strings.InformationSourceCaption"
}
}
},
{
"operation": "move",
"name": "InformationSource",
"parentName": "group_gridLayout",
"propertyName": "items",
"index": 3
},
{
"operation": "remove",
"name": "InformationSource",
"properties": [
"contentType"
]
},
{
"operation": "insert",
"name": "group1",
"values": {
"itemType": 15,
"caption": {
"bindTo": "Resources.Strings.group1Caption"
},
"items": [],
"controlConfig": {
"collapsed": false
}
},
"parentName": "GeneralInfoTab",
"propertyName": "items",
"index": 2
},
{
"operation": "insert",
"name": "group1_gridLayout",
"values": {
"itemType": 0,
"items": []
},
"parentName": "group1",
"propertyName": "items",
"index": 0
},
{
"operation": "insert",
"name": "UsrOwner",
"values": {
"layout": {
"column": 0,
"row": 2,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "UsrOwner",
"caption": {
"bindTo": "Resources.Strings.OwnerCaption"
},
"textSize": 0,
"contentType": 5,
"labelConfig": {
"visible": true
}
},
"parentName": "group1_gridLayout",
"propertyName": "items",
"index": 0
},
{
"operation": "insert",
"name": "UsrOwnerPhone",
"values": {
"layout": {
"column": 0,
"row": 3,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "UsrOwnerPhone",
"caption": {
"bindTo": "Resources.Strings.OwnerPhoneCaption"
},
"textSize": 0,
"contentType": 1,
"labelConfig": {
"visible": true
}
},
"parentName": "group1_gridLayout",
"propertyName": "items",
"index": 1
},
{
"operation": "insert",
"name": "UsrKCOwner",
"values": {
"layout": {
"column": 0,
"row": 4,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "UsrKCOwner",
"caption": {
"bindTo": "Resources.Strings.KCOwnerCaption"
},
"textSize": 0,
"contentType": 5,
"labelConfig": {
"visible": true
}
},
"parentName": "group1_gridLayout",
"propertyName": "items",
"index": 2
},
{
"operation": "insert",
"name": "UsrUrgencyRequest",
"values": {
"layout": {
"column": 0,
"row": 0,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "UsrUrgencyRequest",
"caption": {
"bindTo": "Resources.Strings.UrgencyRequestCaption"
},
"textSize": 0,
"contentType": 3,
"labelConfig": {
"visible": true
}
},
"parentName": "group1_gridLayout",
"propertyName": "items",
"index": 3
},
{
"operation": "insert",
"name": "UsrResultOfLida",
"values": {
"layout": {
"column": 0,
"row": 1,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "UsrResultOfLida",
"caption": {
"bindTo": "Resources.Strings.ResultOfLidaCaption"
},
"textSize": 0,
"contentType": 3,
"labelConfig": {
"visible": true
}
},
"parentName": "group1_gridLayout",
"propertyName": "items",
"index": 4
},
{
"operation": "insert",
"name": "group2",
"values": {
"itemType": 15,
"caption": {
"bindTo": "Resources.Strings.group2Caption"
},
"items": [],
"controlConfig": {
"collapsed": false
}
},
"parentName": "GeneralInfoTab",
"propertyName": "items",
"index": 3
},
{
"operation": "insert",
"name": "group2_gridLayout",
"values": {
"itemType": 0,
"items": []
},
"parentName": "group2",
"propertyName": "items",
"index": 0
},
{
"operation": "insert",
"name": "UsrDateTimeFilling",
"values": {
"layout": {
"column": 0,
"row": 0,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "UsrDateTimeFilling",
"caption": {
"bindTo": "Resources.Strings.DateTimeFillingCaption"
},
"textSize": 0,
"labelConfig": {
"visible": true
}
},
"parentName": "group2_gridLayout",
"propertyName": "items",
"index": 0
},
{
"operation": "insert",
"name": "LeadPageV24Tab",
"values": {
"items": [],
"caption": {
"bindTo": "Resources.Strings.LeadPageV24TabCaption"
}
},
"parentName": "Tabs",
"propertyName": "tabs",
"index": 1
},
{
"operation": "insert",
"name": "LeadPageV25Tab",
"values": {
"items": [],
"caption": {
"bindTo": "Resources.Strings.LeadPageV25TabCaption"
}
},
"parentName": "Tabs",
"propertyName": "tabs",
"index": 3
},
{
"operation": "insert",
"name": "LeadPageV25TabContainer",
"values": {
"itemType": 7,
"items": []
},
"parentName": "LeadPageV25Tab",
"propertyName": "items",
"index": 0
},
{
"operation": "insert",
"name": "KnowledgeBase",
"values": {
"itemType": 2
},
"parentName": "LeadPageV25TabContainer",
"propertyName": "items",
"index": 0
},
{
"operation": "remove",
"name": "Title"
},
{
"operation": "remove",
"name": "FullJobTitle"
},
{
"operation": "remove",
"name": "LeadPageCategorizationContainer"
},
{
"operation": "remove",
"name": "LeadPageCategorizationBlock"
},
{
"operation": "remove",
"name": "Campaign"
},
{
"operation": "remove",
"name": "Industry"
},
{
"operation": "remove",
"name": "AnnualRevenue"
},
{
"operation": "remove",
"name": "EmployeesNumber"
},
{
"operation": "remove",
"name": "LeadPageCommunicationContainer"
},
{
"operation": "remove",
"name": "LeadPageCommunicationBlock"
},
{
"operation": "remove",
"name": "DoNotUsePhone"
},
{
"operation": "remove",
"name": "MobilePhone"
},
{
"operation": "remove",
"name": "DoNotUseSMS"
},
{
"operation": "remove",
"name": "Fax"
},
{
"operation": "remove",
"name": "DoNotUseFax"
},
{
"operation": "remove",
"name": "DoNotUseEmail"
},
{
"operation": "remove",
"name": "Website"
},
{
"operation": "remove",
"name": "LeadPageAddressContainer"
},
{
"operation": "remove",
"name": "LeadPageAddressBlock"
},
{
"operation": "remove",
"name": "AddressType"
},
{
"operation": "remove",
"name": "Country"
},
{
"operation": "remove",
"name": "City"
},
{
"operation": "remove",
"name": "Zip"
},
{
"operation": "remove",
"name": "Address"
},
{
"operation": "remove",
"name": "HistoryTab"
},
{
"operation": "remove",
"name": "LeadHistoryTabContainer"
},
{
"operation": "remove",
"name": "LeadHistoryTabBlock"
},
{
"operation": "remove",
"name": "Activities"
},
{
"operation": "move",
"name": "ESNTab",
"parentName": "Tabs",
"propertyName": "tabs",
"index": 4
}
]/**SCHEMA_DIFF*/,
attributes: {
"UsrStage": {
dataValueType: Terrasoft.DataValueType.ENUM,
dependencies: [
{
columns: ["UsrResultOfLida"],
methodName: "ChangedOfResult"
}
]
}
},
methods: {
save: function() {
var account = this.get("Account");
var contact = this.get("Contact");
if(!account) {
var x = "Заказчик " + contact;
this.set("Account", x);
}
this.callParent(arguments);
},

ChangedOfResult: function() {
var res = this.get("UsrResultOfLida");
if(res.value === MyConstants.Lead.Result.NewSale) {
this.set("UsrStage", MyConstants.Lead.Stage.NewSale)
}
},

test: function() {
var filterGroup = new this.Terrasoft.createFilterGroup();
filterGroup.logicalOperation = Terrasoft.LogicalOperatorType.OR;
filterGroup.add("testFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.NOTEQUAL, "Id", null));
return filterGroup;
},
},
rules: {},
userCode: {}
};
});

Виктория, понял в чем проблема.
В Вашем модуле константы справочного типа должны содержать в себе не только Id, но объект вида:

{
			displayValue: resources.localizableStrings.Name,
			value: "a93ab0b9-ca36-4b95-9b23-e01aa169c338"
		}
Показать все комментарии

Здравствуйте! Скажите, а возможно в разделе Лиды создать деталь «База знаний», в которой будет отображаться полностью весь раздел «База знаний», т. е. все внесенные статьи, и как это реализовать??

Нравится

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

Здравствуйте, Виктория.

Прикрепляю инструкцию с примером создания детали раздела.

Спасибо большое за инструкцию. Скажите, а возможно создать деталь без привязки к Лидам (без LeadId в разделе база знаний)?? Не подчиненную деталь, а просто отображение раздела "База знаний". То есть все записи этого раздела чтобы отображались в детали раздела Лиды.

Виктория,

как мне кажется, в этом случае Вам просто не нужно добавлять фильтрацию детали:

AccountLicenses: {
    schemaName: "AccountLicenseDetailV2"
}
Показать все комментарии