Добрый день!

Нужно внутри

Terrasoft.ModelCollection.load({
            models: [VisitActions],
            queryConfigs: [ ... ],
            filters: [ ... ],
            success: function (result) {
                        var va = result.getByKey("VisitActions")
                        va.each(function (va_) {
                                    if (1) {
                                                //удалить часть выборки(из таблицы!)
                                    }
                        }, this);
            },
            scope: this

 });

удалить часть выборки (из таблицы!)

Нравится

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

Какие сложности возниикли? Что-то пробовали уже реализовать?

"Мотков Илья" написал:Какие сложности возниикли?

Собственно искал совет правильная ли конструкция и можно ли тут сделать что-то типа

va_.Delete();

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

Не имеет смысла грузить данные а потом часть удалять.
Можно например наложить фильтр при импорте данных в манифесте мобильного приложения (Секция ModelDataImportConfig, SyncFilter)
Еще, как вариант, можно создать вьюху.

"Клименко Николай" написал:Можно например наложить фильтр при импорте данных в манифесте мобильного приложения (Секция ModelDataImportConfig, SyncFilter)
Еще, как вариант, можно создать вьюху.

Спасибо, Николай! Идея хорошая. Буду размышлять о возможности такой реализации!

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

Подскажите, каким образом можно скопировать (создать по аналогии) раздел "Итоги"?

Нравится

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

Олег, уточните, какую бизнес задачу Вы хотите решить данным способом?

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

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

"Сафонов Олег" написал:создавать раздел, а потом удалять/скрывать стандартное представление

Этот способ будет намного менее трудоемким и более эффекстивным, чем создание еще одного раздела Итоги.

Этот раздел нестандартен, и не имеет такой гибкости в конфигурировании, как остальные разделы системы. bpm'online c несколькими разделами итогов еще не встречал.

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

Коллеги, приветствую.

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

Например, у меня есть некоторое задание- сценарий, где я пишу -

// Создание экземпляра запроса, добавление в запрос колонок и источника данных.
Select selectQuery = new Select(UserConnection)
                                        .Column("Id")
                                        .Column("Name")
                                        .From("Contact");
// Выполнение запроса к базе данных и получение результирующего набора данных.
using (DBExecutor dbExecutor = UserConnection.EnsureDBConnection())
{
        using (IDataReader reader = selectQuery.ExecuteReader(dbExecutor))
        {
                while (reader.Read())
                {
                        // Обработка результатов запроса.
                }
        }
}
return true;

(Пример - Использование EntitySchemaQuery для построения запросов к базе данных)

Публикую, компилирую сборку и получаю в итоге -

При попытке компиляции возникло: ошибок - 3, предупреждений - 2

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

The breakpoint will not currently be hit.
No symbols have been loaded for this document.

Сгенерированный код, который я пытаюсь отладить в Visual Studio -

Нужно- ли определять директивы using в действии "Задание- сценарий"?

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using Terrasoft.Common;
using Terrasoft.Core;
using Terrasoft.Core.DB;
using Terrasoft.Core.Entities;
...

Если да, то они тоже попадут в тело метода ScriptTask1Execute.
Как правильно написать серверный код в действии "Задание- сценарий", чтобы его можно было отладить в MS Visual Studio? Особенно, если на вход действия подается некий параметр события, который в IDE определяет как undefined?

Был бы весьма признателен за информацию.

Спасибо.

--
С уважением, Алексей Быков.

Нравится

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

В 7.7 есть особенности использования UserConnection в БП.
Подробнее можно ознакомиться в теме:
http://www.community.terrasoft.ru/forum/topic/14645
Директивы using указываются один раз для всего процесса. Делается это структуре процесса (боковая панель).

Александр, большое спасибо за ответ! Сейчас поизучаю.

Превосходно, очень признателен. То, что мне и нужно было.

Кстати сказать, попытался получить экземпляр класса UserConnection и некоторый параметр процесса таким образом:

var userConnection = Get("UserConnection");
var temp = Get("addedRecordId");

Ошибки компиляции:

Если использовать context.UserConnection, то все Ок.

Попробуйте явно указать тип для метода Get

var userConnection = Get<UserConnection>("UserConnection");
var temp = Get<Guid>("addedRecordId");

И судя по ошибкам temp у Вас объявляется 2 раза.

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

Александр, спасибо еще раз!

Да, все верно, temp я объявил два раза. Попробую явно указать тип.

Да, если явно указать тип, то все Ок.

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

Добрый день ! Делаю отчет с комбо боксом но почему он не заполняется данными.
код

EntitySchemaQuery entitySchemaQuery = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "BankingServiceType");
var primaryColumnName = entitySchemaQuery.AddColumn("Id").Name;
var displayColumnName = entitySchemaQuery.AddColumn("Name").OrderByAsc().Name;
var serviceTypes = entitySchemaQuery.GetEntityCollection(UserConnection);
foreach (var serviceType in serviceTypes )
{
Page.BankServicesTypeCombo.AddItem(serviceType.GetTypedColumnValueGuid>(primaryColumnName),
                serviceType.GetTypedColumnValuestring>(displayColumnName));
}
return true;

Что не так ? на событие PageLoadComplete прописываю... Please help me!

Нравится

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

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

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

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

Коллеги, приветствую.

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

В ..\Terrasoft.WebApp\Web.config настроил выгрузку исходных кодов C# в процессе кодогенерации -

    ...
   
   ...

Подключил библиотеки Terrasoft.

Собственно, пытаюсь отладить какой- нибудь простой запрос, вроде такого -

...
var select = new Select(userConnection)
        .Column("Id")
        .Column("Name")
        .From("Contact");
...

- возникает вопрос, как настроить класс UserConnection... Был бы весьма признателен за информацию, без отладчика весьма и весьма грустно.

Спасибо.

--
С уважением, Алексей Быков.

Нравится

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

Я могу, конечно, использовать такой код -

using System.Data.SqlClient;
 
static void Main(string[] args)
{
 
	SqlConnection myConnection = new SqlConnection("user id=sa; password....");
 
	try
	{
		myConnection.Open();
		SqlDataReader myReader = null;
 
		SqlCommand myCommand = new SqlCommand("select Id, Name from Contact", myConnection);
		myReader = myCommand.ExecuteReader();
		while (myReader.Read())
		{
			Console.WriteLine(myReader["Id"].ToString());
			Console.WriteLine(myReader["Name"].ToString());
		}
	}
	catch (Exception e)
	{
		Console.WriteLine(e.ToString());
	}
}

- но как отладить такой -

var select = new Select(userConnection)
        .Column("Id")
        .Column("Name")
        .From("Contact"); 

Алексей, для отладки есть еще ряд флагов в конфигах. Подробнее на скриншоте:

Для отладки нужно приаттачиться VS к вашему процессу w3wp.exe (если их несколько, то можно различать по имени пользователя, от которого запущен пул приложения)

В студии открываете выгруженный код, ставите точки останова в нужных местах.

Для получения текста запросов:
- для классов Select,Update,Delete есть метод GetSqlText() и свойство BuildParametersAsValue, которое нужно устанавливать в true для явного получения параметров;
- для классов ESQ есть метод GetSelectQuery(UserConnection), который возвращает объект класса Select, а из него уже можно получить текст запроса.

Также для просмотра запросов к БД можно использовать SQL Profiler

Александр, спасибо огромное! То, что нужно.

Очень полезная статья в дополнение к видеокурсам по разработке на платформе 7.6: Отладка серверного кода

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

Добрый день!

Подскажите, как можно добавить и настроить виджеты в Раздели Аналитики, например виджет курса валют? Что для этого необходимо?

Спасибо!

Нравится

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

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

Если Вы планируете выводить данные по курсу валют или погоде, полученные с других сайтов, можно использовать блок итогов web-страница. При ее настройке Вам достаточно указать ссылку на страницу, с интересующей Вас информацией и она будет выведена в разделе "Итоги"

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

Алгоритм добавления виджета такой:

1) Создаёте свой виджет в конфигурации, создать модуль
2) Переходите в раздел [Итоги]
3) Через меню «Изменить», выбираете добавить виджет
4) В открывшихся настройках модуля, выбираете свой модуль
5) При необходимости указываете параметры и сообщение

Что касается самих модулей, добавляю информацию по ним во вложение. Также, достаточно подробная информация доступна в SDK.

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

"Павел Баштовой" написал:

Алгоритм добавления виджета такой:

1) Создаёте свой виджет в конфигурации, создать модуль

2) Переходите в раздел [Итоги]

3) Через меню «Изменить», выбираете добавить виджет

4) В открывшихся настройках модуля, выбираете свой модуль

5) При необходимости указываете параметры и сообщение

Что касается самих модулей, добавляю информацию по ним во вложение. Также, достаточно подробная информация доступна в SDK.

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

Спасибо

Владимир, видео добавлено в модуле SectionDesigner, блок SystemDesignerVideo. Можно попробовать заместить модуль и добавить вместо видео необходимый виджет.

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

Есть обычная страница(карточка) раздела. Есть обычная деталь на этой странице. Нужно динамически при изменении одной записи на детали выводить итоговое значение всех записей детали на главной странице. Мот можно сделать БП который это проделывает, но нужно еще обновление страницы.
Вот есть похожая тема, но тут про реестр https://community.terrasoft.ua/forum/topic/10190

Нравится

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

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

Не получается, вот как делаю:
details: /**SCHEMA_DETAILS*/{
"UsrSplitbbf096611929": {
"schemaName": "UsrSplitDetail",
"entitySchemaName": "UsrSplit",
"filter": {
"detailColumn": "UsrInvoice",
"masterColumn": "Id"
},
subscriber: function() {
this.setMyFEnabled();
}
}
}

methods: {
setMyFEnabled: function() {
console.log("**test**");
}
}
В консоль ничего не выводит при изменении детали

Виталий, добавьте следующие методы в схему, в которой вызываете сабскрайбер:

subscribeDetailEvents: function(detailConfig, detailName) {
    this.callParent(arguments);
    var detailId = this.getDetailId(detailName);
    var detail = this.Terrasoft.deepClone(detailConfig);
    var sandbox = this.sandbox;
    sandbox.subscribe("DetailChanged", function(args) {
        return this.onDetailChanged(detail, args);
    }, this, [detailId]);
},
onDetailChanged: function(detail, args) {
    var subscriber = detail.subscriber;
    if (this.Ext.isFunction(subscriber)) {
        subscriber.call(this, args);
    } else if (this.Ext.isObject(subscriber)) {
        var methodName = subscriber.methodName;
        if (this.Ext.isFunction(this[methodName])) {
            this[methodName](args);
        }
    }
}

Без данных методов subscriber не работает во многих разделах системы.

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

Виталий, скопировал Ваш код в схему редактирования контактов - код не работает.
Добавил методы описанные выше - код успешно отрабатывает. Вот листинг кода:

"UsrTestTest": {
	"schemaName": "UsrSchema4Detail",
	"entitySchemaName": "UsrTestTest",
	"filter": {
		"detailColumn": "CreatedBy",
		"masterColumn": "Id"
	},
	subscriber: function(){
		this.test();
		debugger;
	}
}
methods: {
	test: function(){
		alert("!");
	},
	subscribeDetailEvents: function(detailConfig, detailName) {
		this.callParent(arguments);
		var detailId = this.getDetailId(detailName);
		var detail = this.Terrasoft.deepClone(detailConfig);
		var sandbox = this.sandbox;
		sandbox.subscribe("DetailChanged", function(args) {
			return this.onDetailChanged(detail, args);
		}, this, [detailId]);
	},
	onDetailChanged: function(detail, args) {
		var subscriber = detail.subscriber;
		if (this.Ext.isFunction(subscriber)) {
			subscriber.call(this, args);
		} else if (this.Ext.isObject(subscriber)) {
			var methodName = subscriber.methodName;
			if (this.Ext.isFunction(this[methodName])) {
				this[methodName](args);
			}
		}
	}
},

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

Вот что паказывает консоль когда меняю значение на детале:
"Method generatActiveRowControlsConfig is obsolete. Use generateActiveRowControlsConfig instead baseobject.js:85:5
Method handler is obsolete. Use click event instead"
Прилагаю схему:
invoicepage2.txt
Не судите строго за код, только разбираюсь в BPMonline

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

А может быть причина в том, что эта деталь - полноценный раздел, просто грид отображается?

Виталий, уточните, заработал ли subscriber? Данные сообщения в консоли никак не влияют на работу приложения. Если заработал, то Вам осталось в методе вызываемом сабскрайбером сделать запрос к базе данных используя entitySchemaQuery, а затем обновить поля основываясь на полученном результате. Для обновления полей воспользуйтесь методом this.set("Имя колонки", новое значение).

subscriber к сожалению не заработал, начал делать через sandbox. Даже что то получилось, в консоль удалось выводить пометки когда делаю изменения на детале, но передать в основную карточку никак не получается. Вот мой код:
invoicepage2.txt
Страница какбы загружается, но пишет "Загрузка" и все заблокировано.
Я уже не знаю что делать....

Добавил в onEntityInitialized строку this.callParent(arguments);и страница загрузилась но сообщение так и не ловит

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

Деталь это всего лишь редактируемый грид другого раздела, это все было создано до меня.
вод код детали:

define("UsrSplitDetail", ["terrasoft", "ConfigurationEnums", "ConfigurationGrid", "ConfigurationGridGenerator",
"ConfigurationGridUtilities"],
function(Terrasoft, configurationEnums) {
	return {
		entitySchemaName: "UsrSplit",
		attributes: {},
		methods: {
			onActiveRowSave: function() {
				this.sandbox.publish("Test1", { test: "param anything" }, [this.sandbox.id]);
				console.log("rowSelected in first detail..." + this.sandbox.id);
			}
		},
		messages: {
			"Test1": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.PUBLISH
			}
		}
	};
});

Сделал замещающую схему детали и там дописал нужный мне код.

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

Виталий, вот пример кода для детали с редактируемым реестром.

Страница контакта:

      messages: {
		"Test1": {
			mode: this.Terrasoft.MessageMode.PTP,
			direction: this.Terrasoft.MessageDirectionType.SUBSCRIBE
		}
      },
		methods: {
			init: function(){
				this.sandbox.subscribe("Test1", function() {
					alert("Great");
				}, this, ["111"]);
				this.callParent(arguments);
			}
		},

Деталь:

define("UsrSchema1Detail", ["ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"], function() {
	return {
		entitySchemaName: "UsrTestTest",
		attributes: {
			"IsEditable": {
				dataValueType: Terrasoft.DataValueType.BOOLEAN,
				type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
				value: true
			}
		},
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: [
			{
				"operation": "merge",
				"name": "DataGrid",
				"values": {
					"className": "Terrasoft.ConfigurationGrid",
					"generator": "ConfigurationGridGenerator.generatePartial",
					"generateControlsConfig": {"bindTo": "generatActiveRowControlsConfig"},
					"changeRow": {"bindTo": "changeRow"},
					"unSelectRow": {"bindTo": "unSelectRow"},
					"onGridClick": {"bindTo": "onGridClick"},
					"activeRowActions": [
						{
							"className": "Terrasoft.Button",
							"style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
							"tag": "save",
							"markerValue": "save",
							"imageConfig": {"bindTo": "Resources.Images.SaveIcon"}
						},
						{
							"className": "Terrasoft.Button",
							"style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
							"tag": "cancel",
							"markerValue": "cancel",
							"imageConfig": {"bindTo": "Resources.Images.CancelIcon"}
						},
						{
							"className": "Terrasoft.Button",
							"style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
							"tag": "remove",
							"markerValue": "remove",
							"imageConfig": {"bindTo": "Resources.Images.RemoveIcon"}
						}
					],
					"initActiveRowKeyMap": {"bindTo": "initActiveRowKeyMap"},
					"activeRowAction": {"bindTo": "onActiveRowAction"},
					"multiSelect": false
				}
			}
		],
		mixins: {
			ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities"
		},
		methods: {
			int: function(){
				alert("!");
				this.callParent(arguments);
			},
			saveRowChanges: function(row, callback, scope) {
				scope = scope || this;
				callback = callback || this.Terrasoft.emptyFn;
				if (row && this.getIsRowChanged(row)) {
					scope.sandbox.publish("Test1", null, ["111"]);
					row.save({
						callback: callback,
						isSilent: true,
						scope: scope
					});
				} else {
					callback.call(scope);
				}
			}
		},
		messages: {
			"Test1": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.PUBLISH
			}
		}
	};
});

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

О дааа!!! Я сделал это!!! Оно сработало!!!
Но все-же есть где то список функций?
например:
saveRowChanges
init
onActiveRowSave
onEntityInitialized
и тд. Это намного упростило бы не жизнь .

Виталий, часть этих методов описана в миксине "ConfigurationGridUtilities", там описаны методы которые нужны для работы редактируемого грида. Остальные же описаны в BasePageV2 (init, onEntityInitialized).

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

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

Александр, Вам необходимо смотреть в сторону замещения метода save из схемы BasePageV2 и публиковать сообщение из него.

Правда работает. Опубликовал сообщение из onSaved. Спасибо

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

 #5 Мотков Илья 6 апреля 2016 – 10:54 

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

Марат, Вам необходимо смотреть в сторону замещения методов activeRowSaved (ConfigurationGridUtilities) в схеме детали или onSaved в карточке детали (в детали с редактируемым реестром он также вызывается).

Добрый день!
Подскажите как можно вытянуть данные из детали. Нужно выполнить расчёты на основании данных детали и поместить их на страницу реестра. использовать entitySchemaQuery? или же можно как то ещё получить значения?

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

Если данные присутствуют в реестре детали (уже отрисовались в гриде) - Вы можете их получить используя sandbox и атрибут GridData в схеме детали. Если же данных нет - только ESQ.

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

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

Глобально, задача состояла в следующем - сделать редактируемый грид, и я руководствовался примером из этой темы
https://community.terrasoft.ua/forum/topic/13667

Но на этапе добаления модулей в dependencies столкнулся с проблемой добавления ConfigurationGridUtilities. При добавлении модулей из списка поиск происходит по заголовку, а в модуле ConfigurationGridUtilities заголовок отсутствует.

Подскажите пожалуйста, как можно обойти эту проблему?
версия конфигурации - 7.7

Нравится

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

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

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

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

В детали «характеристики продукта», в значение колонки не заносится разные типы значений. Там на самом деле в объекте есть колонки разных типов, и в зависимости от условий, показывается та или иная колонка, то числовая, то строковая, то лукапная. А для отображения в гриде всегда выводится ее текстовое значение. Которое программно высчитывается при изменении фактических колонок хранения.
В редактируемом же гриде вам придётся вывести все эти типы колонок, иначе вы их просто не заполните. Можно разве что в зависимости от «условия» влиять на их блокировку на изменение. Посредством написания бизнес правил в «странице редактирования» детали.
Т.к. редактируемый реестр детали, часть логики, ответственную за конкретную запись, может обрабатывать только при наличии страницы редактирования. Даже если она не открыта, бизнес правила из страницы редактирования будут отрабатывать для строк редактируемого реестра.

В общем, если вам нужна логика как в «характеристике продукта», стоит все же использовать классическую деталь, а не с редактируемым реестром.

Спасибо!

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

Доброго времени суток.
В сервис деске В карточке обращения есть с правой стороны панелька несколько отличающаяся от остальных полей. Внутри этой панельки есть Есть поле категория, у которого доступность для редактирования определяется следующим образом:
this.set("IsCategoryEnabled", this.isNew || !this.get("Category"));

Мне же надо изменить так, чтобы данное поле было всегда доступно для редактирования.
Я создаю замещающий клиентский модуль для CasePageV2 и прописываю в нём следующий код:
define("CasePageV2", ["FormatUtils", "NetworkUtilities", "BusinessRuleModule",
"ConfigurationEnums", "CasesEstimateLabel", "ServiceDeskConstants", "CasePageUtilitiesV2",
"css!CasePageV2CSS", "css!CasesEstimateLabel", "css!MiniPageViewGeneratorCSS"],
function(FormatUtils, NetworkUtilities, BusinessRuleModule, Enums, CasesEstimateLabel, ServiceDeskConstants) {
return {
entitySchemaName: "Case",
diff: /**SCHEMA_DIFF*/[
{
"operation": "insert",
"name": "Category",
"values": {
"layout": {
"column": 0,
"row": 4,
"colSpan": 24,
"rowSpan": 1
},
"bindTo": "Category",
"enabled": {
"bindTo": "IsCategoryEnabled"
},
"contentType": this.Terrasoft.ContentType.ENUM
},
"parentName": "CaseProfile_gridLayout",
"propertyName": "items"
}
],
methods:
{
onEntityInitialized: function()
{
this.set("IsCategoryEnabled", true);
}
}
};
});
(По аналогии с исходной карточкой CasePageV2 в пакете Case)
После этого сохраняю, компилирую, обновляю БД, чищу профиль, редис, перегружаю.
Вообщем всё подряд, только чтобы изменения подцепились в базу.
Но, всё как было так и остаётся. Я по прежнему не могу отредактировать данное поле, если карточка уже существующая и уже заполнено данное поле каким-либо значением.

Нравится

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

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

Вы так не пробовали делать?

{
"operation": "insert",
"name": "Category",
"values": {
"layout": {
"column": 0,
"row": 4,
"colSpan": 24,
"rowSpan": 1
},
"bindTo": "Category",
"enabled": "true",
"contentType": this.Terrasoft.ContentType.ENUM
},
"parentName": "CaseProfile_gridLayout",
"propertyName": "items"
}
Показать все комментарии

Коллеги, приветствую.

Хотел бы поинтересоваться относительно возможности инициирования бизнес- процессов событиями страницы.

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

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

Существует- ли какое- либо релевантное событие страницы (onchange на выпадающем списке, например), которое могло бы инициировать бизнес- процесс?

Спасибо.

--
С уважением, Алексей Быков

Нравится

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

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

Ну, наверное, пересчет через процесс - ресурсоемкое удовольствие.

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

Данная реализация подойдет?:smile:

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

Отлично, спасибо большое за ответ - да, подойдет.

Относительно ресурсоемкости согласен.

Тем не менее, вот некоторые размышления на эту тему, если у кого- нибудь появится спортивный интерес - в модели представления можно настроить зависимость колонки и добавить метод- обработчик (см. Как добавить вычисляемое поле), из которого запускать бизнес- процесс, как описано, например, здесь - Запуск процесса с параметрами Действием в карточке

Спасибо!

--
С уважением, Алексей Быков.

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