Вопрос

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

В БД ничего похожего найти не смог 
Есть какие-нибудь идеи по удалению процесса?

Сам процесс перестал открываться, выбрасывает из конфигуратора на стандартную страницу ошибки

У меня такой же вопрос

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

Начните с этого поста

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

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

Хотим создать бизнес-процесс, который будет читать данные по обращению и формировать (POST, xml, json, http) запрос к сторонней системе, у которой api открытые. Знаю, что в 7.13 есть отдельный блок в бизнес-процессе, у нас же версия 7.11 – как мы в ней можем подобное реализовать?

У меня такой же вопрос

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

И в 7,11 есть элемент скрип таск в котором вы можете писать код на c# и отправлять (POST, xml, json, http) запрос к сторонней системе

Пример тут

Очень рекомендую задуматься над обновлением текущей версии bpm'online до последней 7.13.3.

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

Доброго времени суток!

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

 

attributes: {
	"isEngineeringDivision": {
		"dataValueType": Terrasoft.DataValueType.BOOLEAN,
		"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
		"value": true
	},
	"isNotEngineeringDivision": {
		"dataValueType": Terrasoft.DataValueType.BOOLEAN,
		"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
		"value": true
	}
}
methods: {
	init: function() {
		this.callParent(arguments);
		this.checkEnabledButton();
	},
 
	checkEnabledButton: function() {
		this.sandbox.publish("checkUserInAuPublish", null, ["checkUserInAuPublish"]);
		this.sandbox.subscribe("checkUserInAU", function(result) {
			this.set("isEngineeringDivision", result);
			this.set("isNotEngineeringDivision", result === true ? false : true);
		}, this, ["checkUserInAU"]);
	}
},

 

У меня такой же вопрос

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

Попробуйте по-другому объявить эти детали в блоке details.

Вот аналогичный пример:

            "SamplesDetail": {
                "schemaName": "SampleInKitDetailV2",
                "entitySchemaName": "BTSample",
                "filter": {
                    "detailColumn": "BTKitIDLookup",
                    "masterColumn": "Id"
                },
                "defaultValues": {
                    "BTKitIDLookup": {
                        "masterColumn": "Id"
                    },
                    "BTFromSupply": false
                },
                "filterMethod": "samplesFilter",

               "profileKey": "PatientParametersDetail1"
            },

 

Метод фильтрации в данном случае выглядит так:

            samplesFilterMethod: function(kitId, isSupply) {
                var filterGroup = new Terrasoft.createFilterGroup();
                filterGroup.add("KitId", Terrasoft.createColumnFilterWithParameter(
                    Terrasoft.ComparisonType.EQUAL, "BTKitIDLookup", kitId));
                filterGroup.add("SamplesIsSupply", Terrasoft.createColumnFilterWithParameter(
                    Terrasoft.ComparisonType.EQUAL, "BTFromSupply", isSupply));
                return filterGroup;
            },

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

Однако в такой ситуации служба поддержки рекомендует создавать разные детали.

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

 

Попробуйте отладиться.

Уточните, возникают ли какие-то ошибки в консоли?

Также сделайте скриншот, чтобы было понятно, что отображается в первом табе и не отображается во втором.

Алла Савельева,

Нет, все проходит без ошибок, единственное, что результат выполнения не записывается в атрибут, либо же не срабатывает visible и enabled при повторной инициализации детали 

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

Добрый день!

Пытаюсь обновить пакет из хранилища, выдает следующую ошибку - Невозможно установить пакет так как у зависимого пакета не указанно хранилище системы контроля версий. Указать хранилище я не могу. Так как -  Элемент создан сторонним издателем или установлен из файлового архива. Сохранение изменений для данного элемента будет невозможно. Продолжить?

Что можно сделать в данном случае?

У меня такой же вопрос

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

А вы установили на систему, на которой пытаетесь обновиться из SVN тот самый пакет?

Дмитрий А.,

Не до конца понял вопрос. Есть пакет, который наследован от пакета, который установлен как я догадываюсь из файлового архива. В моем пакет хранилище svn привязано, а в родительском его нет. И вот такая ошибка.

Mexanik,

Стенд, с которого фиксировались изменения в хранилище и стенд, на котором вы хотите обновиться из хранилища - это один и тот же стенд?

Так точно. Это один и тот же стенд. Вначале, я зафиксировал в SVN, после чего поправил код, и пытаюсь обновить из хранилища.

Дмитрий А.,

Так точно. Это один и тот же стенд. Вначале, я зафиксировал в SVN, после чего поправил код, и пытаюсь обновить из хранилища.

 

Так точно. Это один и тот же стенд. Вначале, я зафиксировал в SVN, после чего поправил код, и пытаюсь обновить из хранилища.

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

Как убрать действие "Удалить" в детали.
Речь идет о кнопках "Копировать/изменить/удалить" во всплывающем окне детали.

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

Прикрепленные файлы
11111.JPG24.69 КБ

У меня такой же вопрос

12 комментариев
Лучший ответ

1)

getDeleteRecordMenuItem: Terrasoft.emptyFn //добавлять на схемы деталей (пример OrderProductDetailV2) в блок methods

2) Можно создать кастомную операцию (права доступа на операции) и проверять есть ли у пользователя доступ к этой операции. Пример проверки доступа к операции:

            setUserOperationRightsForCreateChange: function() {
                var operationsToRequest = [];
                debugger;
                operationsToRequest.push("CanCreateChange");
                RightUtilities.checkCanExecuteOperations(operationsToRequest, function(result) {
                    if (result) {
                        this.set("CanCreateChange", result.CanCreateChange);
                    }
                }, this);
            },

А не проще ли права доступа на удаление в конкретном объекте настроить?

1)

getDeleteRecordMenuItem: Terrasoft.emptyFn //добавлять на схемы деталей (пример OrderProductDetailV2) в блок methods

2) Можно создать кастомную операцию (права доступа на операции) и проверять есть ли у пользователя доступ к этой операции. Пример проверки доступа к операции:

            setUserOperationRightsForCreateChange: function() {
                var operationsToRequest = [];
                debugger;
                operationsToRequest.push("CanCreateChange");
                RightUtilities.checkCanExecuteOperations(operationsToRequest, function(result) {
                    if (result) {
                        this.set("CanCreateChange", result.CanCreateChange);
                    }
                }, this);
            },

А не проще ли права доступа на удаление в конкретном объекте настроить?

Дмитрий А., 
Правильно Вас понял, что при добавлении этого (getDeleteRecordMenuItem: Terrasoft.emptyFn ) в блок methods схемы детали, мы уберем у детали действие удалить?!

А когда вызывать этот метод(getDeleteRecordMenuItem), при каких обстоятельствах?! 

Соломонов Алексей Михайлович,

Посмотрите что делает этот метод в коробке. Он как раз отвечает за добавление пункта меню.

Вызывается в addRecordOperationsMenuItems схемы BaseGridDetailV2

Мы же замещаем эту функцию и ничего в ней не делаем. Соответственно пункт меню не добавится.

В вашем случае можно проверить есть ли доступ на операцию. Если есть, то вызываем
 

this.callParent(arguments);

 

Дмитрий А.,
Схема деталей куда добавляем (getDeleteRecordMenuItem: Terrasoft.emptyFn) должна как-то ссылаться на BaseGridDetailV2  ?

 

 

Добавить комментарий

Соломонов Алексей Михайлович,

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

RightUtilities

Пример:

define("ContactSectionV2", ["RightUtilities"], function(RightUtilities) {
 
...
 
}

 

Стандартными методами вы можете запретить удаление из объекта детали для определенных ролей.

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

Хотя, признаю, пользователям было бы удобнее сразу видеть, что они что-то не смогут сделать (добавить, исправить, удалить...)

Дмитрий А.,
 

Дело как раз в том, что эта деталь и наследуется либо от:
 - Редактируемая деталь документа ( MOBaseSchema )
 - DocumentDetailV2 ( MODocument )

И не имеет ни каких ссылок на BaseGridDetailV2

Так же как и родители.

 

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

scr_section_administering_tab_objects_dtl_operations_access.png

Пожелание скрытия в реестре недоступных по правам кнопок недавно как раз завели как идею.

Добавить комментарий

Соломонов Алексей Михайлович пишет:
 - Редактируемая деталь документа ( MOBaseSchema )  - DocumentDetailV2 ( MODocument )

А они от чего наследуются? 

Дмитрий А.,

От MODocument, а тот в свою очередь BaseGridDetailV2. С этим благодаря Вам разобрались.

Вы упомянули про проверку.
1)
if (this.$CanManageCaseDetails === true) {
                        this.callParent(arguments);
                    }

2) В свою очередь
this.$CanManageCaseDetails = result.MOCanManageCasePageDetails;

Вы не могли бы пояснить в каких случаях она (1) срабатывает?

Смотрите выше в коде, где result.MOCanManageCasePageDetails заполняют. Название звучит очень похоже на право на операцию у текущего пользователя.

Соломонов Алексей Михайлович,

без полного кода не совсем понимаю о чем речь. 

предлагаю такой вариант:

define("BCSchema1Detail", ["RightUtilities"], function(RightUtilities) {
	return {
		entitySchemaName: "BCPurchasedServices",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		attributes: {
            CanCreateChange: {
                dataValueType: this.Terrasoft.DataValueType.BOOLEAN,
                type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                value: true
            }
		},
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		methods: {
            init: function() {
                this.callParent(arguments);
                this.setUserOperationRightsForCreateChange();
            },
			setUserOperationRightsForCreateChange: function() {
                var operationsToRequest = [];
                // debugger;
                operationsToRequest.push("CanCreateChange");
                RightUtilities.checkCanExecuteOperations(operationsToRequest, function(result) {
                    if (result) {
                        this.set("CanCreateChange", result.CanCreateChange);
                        console.log(result.CanCreateChange);
                    }
                }, this);
            },
			addRecordOperationsMenuItems: function(toolsButtonMenu) {
				var isDetailEnabled = this.get("IsEnabled");
				if (isDetailEnabled === false) {
					return;
				}
				var copyRecordMenuItem = this.getCopyRecordMenuItem();
				if (copyRecordMenuItem) {
					toolsButtonMenu.addItem(copyRecordMenuItem);
				}
				var editRecordMenuItem = this.getEditRecordMenuItem();
				if (editRecordMenuItem) {
					toolsButtonMenu.addItem(editRecordMenuItem);
				}
				if (this.get("CanCreateChange")) {
					var deleteRecordMenuItem = this.getDeleteRecordMenuItem();
					if (deleteRecordMenuItem) {
						toolsButtonMenu.addItem(deleteRecordMenuItem);
					}
				}
				var recordRightsSetupMenuItem = this.getRecordRightsSetupMenuItem();
				if (recordRightsSetupMenuItem) {
					toolsButtonMenu.addItem(recordRightsSetupMenuItem);
				}
			}
		}
	};
});

Вам надо добавить в Права доступа на операцию новую операцию с именем CanCreateChange. Доступ к этой операции - добавляете нужные роли. Если пользователь попадает в эту роль - увидит кнопку "удалить". Иначе не увидит. После добавления роли нужно перелогиниться.

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

Есть действие по множественному выбору в реестре. 

Проблема в том, что оно должно выполняться для большого кол-ва записей. Если я делаю Действия-Выбрать все, то он мне показывает, например, 4000 записей. Но когда я попадаю в метод обработки действия, то 

var selectedRows = this.get("SelectedRows");
this.showInformationDialog(selectedRows.length.toString());

возвращает кол-во записей, которые отображаются на странице в текущий момент, например, 30. Как мне поймать все записи?

Мне в конечном итоге надо будет передать их на сервер в БП или сервис. Возможно, можно на сервер передать фильтр, по которому этим записи отфильтровались и там выбрать коллекцию?

Есть пример реализации?

У меня такой же вопрос

6 комментариев
Лучший ответ

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

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

Григорий Чех,это понятно.

Вопрос в том, как пробросить фильтр в запрос, который выбрал пользователь. Т.е. мне не тупо надо все записи в БД обработать, а те, которые выбраны. А до выбора они могут быть отфильтрованы.

Алексей-Карягин,

Тогда листать постранично по 30 записей и обрабатывать

Григорий Чех,

4000 записей? нет уж, спасибо :)

Нужен другой способ.

Однако действие Delete в разделе работает не со страницей, а именно со всеми записями, кстати

 

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

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

Хочу сделать сабж. Окошко выводится, но список пустой. Что я делаю не так?

Метод onPreparePaymentsList не вызывается, кстати. Ошибок в консоли нет.

define("UsrFlip1Page", ["ServiceHelper", "jQuery", "css!UsrFlip1PageCSS"], function(ServiceHelper, jQuery) {
	return {
		entitySchemaName: "UsrFlip",
		attributes: {
			"PaymentVList": {
				dataValueType: Terrasoft.DataValueType.COLLECTION,
				type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
				caption: "Платежи",
				name: "PaymentVList",
				isCollection: true
			}
		},
		details: /**SCHEMA_DETAILS*/{
		},
		diff: /**SCHEMA_DIFF*/[
		]/**SCHEMA_DIFF*/,
		methods: {
			init: function() {
				this.callParent(arguments);
				this.set("PaymentVList", this.Ext.create(Terrasoft.Collection));
			},
 
			onEntityInitialized: function() {
				this.callParent(arguments);
				this.set("ActivePayments", null);
				var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "UsrPayment" });
				esq.addColumn("Id");
				esq.addColumn("UsrBillNumber");
				esq.addColumn("UsrPpNumber");
				esq.addColumn("UsrSum");
				esq.addColumn("UsrType.Name");
				esq.filters.add("filterAuto", this.Terrasoft.createColumnFilterWithParameter(
					this.Terrasoft.ComparisonType.EQUAL, "UsrAuto", this.get("UsrAutoId").value));
				esq.filters.add("filterStatus", this.Terrasoft.createColumnInFilterWithParameters("UsrStatus.Name",
					["Активный", "Не подтвержден"]));
 
				esq.getEntityCollection(function(result) {
					if (result.success) {
						var PaymentItems = {};
						result.collection.each(function(item) {
							PaymentItems[item.get("Id")] = {
								"value": item.get("Id"),
								"displayValue": item.get("UsrBillNumber") + " / " + item.get("UsrPpNumber") +
									" / " + item.get("UsrSum") + " / " + item.get("UsrType.Name")
							};
						}, this);
 
						var list = this.get("PaymentVList");
						list.loadAll(PaymentItems);
					}
				}, this);
			},
 
			getActions: function() {
				var actionMenuItems = this.callParent(arguments);
				actionMenuItems.addItem(this.getActionsMenuItem(
					{
						"Caption": "Уточнение назначения платежа",
						"Tag": "runPaymentCorrection"
					}
				));
				return actionMenuItems;
			},
 
			onPreparePaymentsList: function() {
				debugger;
			},
 
			runPaymentCorrection: function() {
				if (this.get("PaymentVList").getCount() === 0) {
					Terrasoft.showInformation("По данному авто нет активной оплаты!");
					return;
				}
				debugger;
				Terrasoft.showInputBox("Выберите п/п для уточнения", function(button) {
						Terrasoft.showInformation(button);
					}, ["ok", "cancel"], this, {
					name : {
						caption: "Платежи",
						dataValueType: Terrasoft.DataValueType.ENUM,
						className: "Terrasoft.ComboBoxEdit",
						list: {
							bindTo: "PaymentVList"
						},
						prepareList: {
							bindTo: "onPreparePaymentsList"
						},
						isRequired: true
					}
				},
				{
					defaultButton: 0
				});
			}
		},
		rules: {}
	};
});

 

У меня такой же вопрос

5 комментариев
Лучший ответ

Алексей, вот кусок кода, который вы можете использовать для вашей задачи. Были рады помочь.

define("ActivityPageV2", [], function() {
return {
entitySchemaName: "Activity",
rules: {},
messages: {},
details: /*SCHEMA_DETAILS/{}/*SCHEMA_DETAILS/,
attributes: {},
methods: {
 
getActions: function() {
var actionMenuItems = this.callParent(arguments);
actionMenuItems.addItem(this.getActionsMenuItem(
{
"Caption": "Тестовое действие",
"Click":
 
{"bindTo": "statusInputBox"}
}
));
return actionMenuItems;
},
 
statusInputBox: function() {
var caption = "Выбор статуса";
this.set("StatusList", new Terrasoft.Collection());
var controls = {
"ActivityStatus": {
dataValueType: Terrasoft.DataValueType.ENUM,
isRequired: true,
caption: "Статус",
value:
 
{ bindTo: "ActivityStatus" }
,
customConfig: {
list:
 
{ bindTo: "StatusList" }
,
prepareList:
 
{ bindTo: "onPrepareStatusList" }
}
}
};
var statusInputBoxHandler = this.statusInputBoxHandler.bind(this);
Terrasoft.utils.inputBox(caption, statusInputBoxHandler,
[Terrasoft.MessageBoxButtons.OK, Terrasoft.MessageBoxButtons.CANCEL],
this, controls);
Terrasoft.each(Terrasoft.MessageBox.controlArray, function(item)
 
{ item.control.bind(this); }
, this);
},
 
onPrepareStatusList: function() {
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery",
 
{ rootSchemaName: "ActivityStatus" }
);
esq.addColumn("Id");
esq.addColumn("Name");
esq.filters.add("finish", Terrasoft.createColumnFilterWithParameter(
Terrasoft.ComparisonType.EQUAL, "Finish", true));
esq.getEntityCollection(function(result) {
if (result.success) {
var items = {};
result.collection.each(function(item) {
items[item.get("Id")] =
 
{ "value": item.get("Id"), "displayValue": item.get("Name") }
;
}, this);
var list = this.get("StatusList");
list.loadAll(items);
}
}, this);
},
 
statusInputBoxHandler: function(tag, data) {
if (Terrasoft.MessageBoxButtons.OK.returnCode === tag) {
if (Ext.isEmpty(data.ActivityStatus.value)) {
this.showInformationDialog("Нужно что-то выбрать", function()
 
{ this.statusInputBox(); }
);
} else
 
{ this.showInformationDialog(data.ActivityStatus.value.displayValue); }
}
}
 
},
diff: /*SCHEMA_DIFF/[]/*SCHEMA_DIFF/
};
});

 

Маялся уже. Всю голову сломал. Лист не готовится, от вручную указанного кол-ва записей в листе ничего не зависит, "prepareList" не вызывается... Через час плюнул, сделал собственный модуль)

Делал что-то подобное, но через messageBox. Метод в prepareList вызывался (при попытке выбора), как и метод в change.

Тёскин Дмитрий Валерьевич,

а есть пример кода? мне кажется, я уже всё перепробовал

Алексей-Карягин,

Примера кода, к сожалению, не осталось. Попробовал вчера на досуге ваш код поковырять - действительно не работает. Возможно я использовал какой-то кастомизированный messageBox. Единственное, что заметил - у меня ветки объекта prepareList и change были внутри customConfig.

Алексей, вот кусок кода, который вы можете использовать для вашей задачи. Были рады помочь.

define("ActivityPageV2", [], function() {
return {
entitySchemaName: "Activity",
rules: {},
messages: {},
details: /*SCHEMA_DETAILS/{}/*SCHEMA_DETAILS/,
attributes: {},
methods: {
 
getActions: function() {
var actionMenuItems = this.callParent(arguments);
actionMenuItems.addItem(this.getActionsMenuItem(
{
"Caption": "Тестовое действие",
"Click":
 
{"bindTo": "statusInputBox"}
}
));
return actionMenuItems;
},
 
statusInputBox: function() {
var caption = "Выбор статуса";
this.set("StatusList", new Terrasoft.Collection());
var controls = {
"ActivityStatus": {
dataValueType: Terrasoft.DataValueType.ENUM,
isRequired: true,
caption: "Статус",
value:
 
{ bindTo: "ActivityStatus" }
,
customConfig: {
list:
 
{ bindTo: "StatusList" }
,
prepareList:
 
{ bindTo: "onPrepareStatusList" }
}
}
};
var statusInputBoxHandler = this.statusInputBoxHandler.bind(this);
Terrasoft.utils.inputBox(caption, statusInputBoxHandler,
[Terrasoft.MessageBoxButtons.OK, Terrasoft.MessageBoxButtons.CANCEL],
this, controls);
Terrasoft.each(Terrasoft.MessageBox.controlArray, function(item)
 
{ item.control.bind(this); }
, this);
},
 
onPrepareStatusList: function() {
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery",
 
{ rootSchemaName: "ActivityStatus" }
);
esq.addColumn("Id");
esq.addColumn("Name");
esq.filters.add("finish", Terrasoft.createColumnFilterWithParameter(
Terrasoft.ComparisonType.EQUAL, "Finish", true));
esq.getEntityCollection(function(result) {
if (result.success) {
var items = {};
result.collection.each(function(item) {
items[item.get("Id")] =
 
{ "value": item.get("Id"), "displayValue": item.get("Name") }
;
}, this);
var list = this.get("StatusList");
list.loadAll(items);
}
}, this);
},
 
statusInputBoxHandler: function(tag, data) {
if (Terrasoft.MessageBoxButtons.OK.returnCode === tag) {
if (Ext.isEmpty(data.ActivityStatus.value)) {
this.showInformationDialog("Нужно что-то выбрать", function()
 
{ this.statusInputBox(); }
);
} else
 
{ this.showInformationDialog(data.ActivityStatus.value.displayValue); }
}
}
 
},
diff: /*SCHEMA_DIFF/[]/*SCHEMA_DIFF/
};
});

 

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

Здравствуйте.
BPM sales 7.11.3
Возможно ли создать следующий виджет:

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

3. Виджет не был бы прикреплен к определенной схеме и отображался повсюду.

Как такое, или что-то похожее, можно сделать? 
Приветствуется любая помощь!

 

У меня такой же вопрос

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

Информация о разработке своего виджета есть тут. Но это — для панели итогов. 

В Вашем случае, скорее сего, вместо виджета стоит модифицировать код боковой (LeftPanelTopMenuModule) или верхней (MainHeaderModule) панели и добавить туда вывод нужной информации. 

Или же, если значение числовое, делать ещё одну иконку правой коммуникационной панели (CommunicationPanel) и выводить на неё цифру, подобно количеству писем или звонков.

Зверев Александр, Спасибо! Могли бы вы уточнить где именно стоит делать модификацию, что бы вывести нужную мне информацию?

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

Зверев Александр,

Есть примеры кода или мануал создание подобного?

Например, так в коммуникационную панель добавляется кнопка.

Зверев Александр,

Спасибо за помощь. :)

P.S. Проверьте ЛС.

В версии 7.13 в верхнюю панель добавили надпись с номером версии. Эта логика реализована в схеме MainHeaderSchema, см. упоминания функции _initConfigurationVersion и атрибута ConfigurationVersion.

На init запускается функция, заполняет атрибут. А у надписей caption привязан к его значению.

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

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

Есть потребность текстовое поле с типом RICH_TEXT сделать автоматически расширяемым с помощью InlineTextEditViewGenerator.generate. Но в данной конфигурации у поля пропадает заголовок, а он нужен

{
	"operation": "merge",
	"name": "Description",
	"values": {
		"contentType": this.Terrasoft.ContentType.RICH_TEXT,
		"generator": "InlineTextEditViewGenerator.generate",
		"labelConfig": {
			"visible": true
		}
	}
}

 

В чем может быть проблема? Или есть другое решение?

У меня такой же вопрос

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

Добрый день!

Генератор InlineTextEditViewGenerator не рассчитан на использование со свойством labelConfig. Вы можете реализовать собственный генератор на его основе, либо использовать стандарную панель форматирования для RICH_TEXT.

Войдите или зарегистрируйтесь, чтобы комментировать
Публикация

В начале сентября наша команда успешно завершила проект внедрения новой CRM системы в строительной компании «Интерстрой». Основной поставленной задачей была оптимизация работы отдела продаж и выход на новый уровень качества обслуживания клиентов.

Компания «ИнтерСтрой» на протяжении 14 лет является лидирующим застройщиком в Крыму и г. Севастополе. За это время в эксплуатацию было успешно введено более 40 многоэтажных жилых домов и многоквартирных комплексов в семи городах. Тысячи семей стали счастливыми обладателями надежного жилья и высокодоходных активов. Застройщик полного цикла «ИнтерСтрой» занимает одну из лидирующих позиций среди застройщиков Крыма не случайно. Ведь это надежная компания, целью которой является создание качественных объектов недвижимости, отвечающих самым передовым требованиям и стандартам качества застройки, создавая будущие дома для жителей полуострова Крым и города Севастополь.

Реализация проекта заняла 8 месяцев, начиная со стадии предпроектного обследования до обучения и запуска системы в опытную эксплуатацию.

Итогом совместной работы с командой «ИнтерСтрой» - является увеличение скорости закрытия сделки. Сокращение времени подготовки документов, аналитические инструменты раскрывающие полную картину процессов в департаменте продаж.

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

Компания «ИнтерСтрой» получила новые точки роста, снижение издержек и повышение лояльности клиентов.

Подробности по ссылке на сайте 

Поделиться

0 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать