Здравствуйте.
Создал деталь: Объект унаследован от базового (2 поля: связь с разделом, поле справочник), схема детали унаследована от "Базовая схема детали с реестром ( NUI )". Зарегестрировал ее в SysDetail, через мастер разделал добавил в раздел. Все работает.
Целью было создать деталь с редактируемым реестром, реализацию и зависимости смотрел в детали "Продукт в заказе", деталь отображается как обычная, видимо что то упустил.
Что нужно сделать что бы создать деталь с редактируемым реестром?
Нравится
"Продукт в заказе" (ContractProductDetailV2) обычная деталь с реестром и парой дополнительных методов для пересчета суммы, в которой возможность редактировать объект детали реализована в отдельной, ее собственной карточке, по нажатию кнопки "изменить", как собственно и в большинстве деталей.
Деталь с редактируемым реестром это сложная разработка примером которой является деталь "Деталь графика поставок и оплат" (SupplyPaymentDetailV2), и ее вспомогательные схемы в пакете "Passport".
Но если же вопрос просто в том, что у вас не работает кнопка "изменить" для обычной детали, с целью редактирования ее объекта в отдельном окне, то причиной этого, вероятно, является то, что у вас нет схемы страницы редактирования для вашего объекта.
И для того что бы не делать это все вручную, вы можете создать с помощью мастера раздела, новый раздел (объект + страницы редактирования и списков) для вашей детали, настроить его страницу, и тогда у вас будут созданы все средства для его редактирования. После чего уже можно создавать в мастере деталей, деталь на основе вашего нового объекта, и использовать ее в дизайнере страниц.
P.S.
Всю информацию по использованию мастеров и дизайнеров вы можете найти в SDK
http://academy.terrasoft.ru/documents/?product=SDK&ver=7.6.0
Нет, вопрос в том "Как создать деталь с редактируемым реестром?" с обычными деталями проблем нет и про изменить я ничего не писал, страницу регестрировал что бы проверить работает ли сама деталь, потом ее удалил (и из БД) так как нужна именно деталь с редактируемым реестром.
Так подскажите как создать деталь с редактируемым реестром? На примере детали "Продукт в заказе" (смотрел в omnichanel) не разобрался.
С версии продукта и стоило начинать, да, в omnichanel эту деталь сделали редактируемой.
Для того, чтобы сделать реестр детали редактируемым, в соответствующей схеме необходимо:
- добавить зависимости от модулей ConfigurationGrid (Конфигурационный реестр), ConfigurationGridGenerator, ConfigurationGridUtilities,
- подключить "миксин" ConfigurationGridUtilites,
- установить аттрибут IsEditable в значение true
- базовому реестру указать свойства:
className: "Terrasoft.ConfigurationGrid",
generator: "ConfigurationGridGenerator.generatePartial",
generateControlsConfig: {bindTo: "generateActiveRowControlsConfig"},
changeRow: {bindTo: "changeRow"},
unSelectRow: {bindTo: "unSelectRow"},
onGridClick: {bindTo: "onGridClick"},
initActiveRowKeyMap: {bindTo: "initActiveRowKeyMap"},
для добавления действий активной записи добавить:
activeRowActions: [...],
activeRowAction: {bindTo: "onActiveRowAction"}
Зависимости нужно указать не только параметром requirejs но и в настройках схемы, в конфигураторе.
Итоговый код простейшей редактируемой детали будет выглядеть следующим образом:
define("UsrSchema1Detail", ["ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"], function() { return { entitySchemaName: "Contact", attributes: { "IsEditable": { dataValueType: Terrasoft.DataValueType.BOOLEAN, type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, value: true } }, 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", OrderUtilities: "Terrasoft.OrderUtilities" }, methods: {} }; });
"Щиголь Максим" написал:
Здравствуйте, Максим. Подскажите пожалуйста в процессе к детали нужно просто вписать код и всё она заработает, конечно изменив при этом версию схемы детали? Просто в программировании не разбираюсь, пока что. Создал деталь и у неё реестр должен быть редактированным. По возможности схожим с деталью график поставок и оплаты.
Версия bpm'online sales enterprise 7.6
Не совсем понятно, что вы подразумеваете под фразой "в процессе к детали", возможно, вы хотели сказать "в схеме детали". Код конечно, нельзя взять прямо из этой темы, но можно писать по примеру и подобию.
Как минимум на строчке
entitySchemaName: "Contact",
вместо контакта, вам нужно будет указать ваш объект, на основе которого сделана схема вашей детали.
В общем, да, алгоритм достаточно прост, но знания по разработке в bpm'online все же понадобятся. Хотя бы на уровне реализации более простых кейсов из академии. Если в процессе реализации у вас возникнут другие вопросы, пишите, постараемся ответить.
"Щиголь Максим" написал:Не совсем понятно, что вы подразумеваете под фразой "в процессе к детали", возможно, вы хотели сказать "в схеме детали". Код конечно, нельзя взять прямо из этой темы, но можно писать по примеру и подобию.
Как минимум на строчке
entitySchemaName: "Contact",
вместо контакта, вам нужно будет указать ваш объект, на основе которого сделана схема вашей детали.В общем, да, алгоритм достаточно прост, но знания по разработке в bpm'online все же понадобятся. Хотя бы на уровне реализации более простых кейсов из академии. Если в процессе реализации у вас возникнут другие вопросы, пишите, постараемся ответить.
Да ошибся, извините. Нашёл схему и прописал код, который вы прикрепляли и нужные изменения сделал. Всё заработало спасибо!
Хотел сделать то же самое с деталью продукты в Лиде. Только там чёрт ногу сломит. Добавил данный код, добавил всё чего не хватало, но сама делать теперь не отображается. Код довольно громоздкий. Помогите пожалуйста разобраться с ним
define("LeadProductDetailV2", ["ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities", "configurationEnums"],
function(configurationEnums, ConfigurationGrid, ConfigurationGridGenerator, ConfigurationGridUtilities) {
return {
entitySchemaName: "LeadProduct",
attributes: {
"IsEditable": {
dataValueType: Terrasoft.DataValueType.BOOLEAN,
type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
value: true
}
},
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",
OrderUtilities: "Terrasoft.OrderUtilities"
}, //данный кусочек был добавлен:smile:
methods: {
/**
* Возвращает колонки, которые всегда выбираются запросом
* @return {Object} Возвращает массив объектов-конфигураций колонок
*/
getGridDataColumns: function() {
return {
"Id": {path: "Id"},
"Product": {path: "Product"},
"Product.Name": {path: "Product.Name"}
};
},
/**
* Открывает справочник продуктов
* @private
*/
openProductLookup: function() {
var config = {
entitySchemaName: "Product",
multiSelect: true,
columns: ["Name", "Price", "Currency"]
};
var leadId = this.get("MasterRecordId");
if (this.Ext.isEmpty(leadId)) {
return;
}
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: this.entitySchemaName
});
esq.addColumn("Id");
esq.addColumn("Product.Id", "ProductId");
esq.filters.add("filterLead", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "Lead", leadId));
esq.getEntityCollection(function(result) {
var existsProductsCollection = [];
if (result.success) {
result.collection.each(function(item) {
existsProductsCollection.push(item.get("ProductId"));
});
}
if (existsProductsCollection.length > 0) {
var existsFilter = this.Terrasoft.createColumnInFilterWithParameters("Id",
existsProductsCollection);
existsFilter.comparisonType = this.Terrasoft.ComparisonType.NOT_EQUAL;
existsFilter.Name = "existsFilter";
config.filters = existsFilter;
}
this.openLookup(config, this.addCallBack, this);
}, this);
},
/**
* @overridden
*/
onCardSaved: function() {
this.openProductLookup();
},
/*
* Открывает справочник продуктов в случае если карточка лида была ранее сохранена
* @overridden
* */
addRecord: function() {
var masterCardState = this.sandbox.publish("GetCardState", null, [this.sandbox.id]);
var isNewRecord = (masterCardState.state === configurationEnums.CardStateV2.ADD ||
masterCardState.state === configurationEnums.CardStateV2.COPY);
if (isNewRecord === true) {
var args = {
isSilent: true,
messageTags: [this.sandbox.id]
};
this.sandbox.publish("SaveRecord", args, [this.sandbox.id]);
return;
}
this.openProductLookup();
},
/*
* Добавление выбраных продуктов
* @private
* */
addCallBack: function(args) {
var bq = this.Ext.create("Terrasoft.BatchQuery");
var leadId = this.get("MasterRecordId");
this.selectedRows = args.selectedRows.getItems();
this.selectedItems = [];
this.selectedRows.forEach(function(item) {
item.LeadId = leadId;
item.ProductId = item.value;
bq.add(this.getProductInsertQuery(item));
this.selectedItems.push(item.value);
}, this);
if (bq.queries.length) {
this.showBodyMask.call(this);
bq.execute(this.onProductInsert, this);
}
},
/*
* Возвращает запрос на добавление продукта
* @param item {Object} идентификатор лида и выбранный в справочнике продукт {LeadId, value}
* @private
* */
getProductInsertQuery: function(item) {
var insert = Ext.create("Terrasoft.InsertQuery", {
rootSchemaName: this.entitySchemaName
});
insert.setParameterValue("Lead", item.LeadId, this.Terrasoft.DataValueType.GUID);
insert.setParameterValue("Product", item.ProductId, this.Terrasoft.DataValueType.GUID);
return insert;
},
/*
* Загрузка добавленых продуктов в реестр
* @private
* */
onProductInsert: function(response) {
this.hideBodyMask.call(this);
this.beforeLoadGridData();
var filterCollection = [];
response.queryResults.forEach(function(item) {
filterCollection.push(item.id);
});
var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: this.entitySchemaName
});
this.initQueryColumns(esq);
esq.filters.add("recordId", Terrasoft.createColumnInFilterWithParameters("Id", filterCollection));
esq.getEntityCollection(function(response) {
this.afterLoadGridData();
if (response.success) {
var responseCollection = response.collection;
this.prepareResponseCollection(responseCollection);
this.getGridData().loadAll(responseCollection);
}
}, this);
},
/*
* Удаление выбранных записей
* @overridden
* */
deleteRecords: function() {
var selectedRows = this.getSelectedItems();
if (selectedRows.length > 0) {
this.set("SelectedRows", selectedRows);
this.callParent(arguments);
}
},
/**
* @inheritdoc Terrasoft.BaseGridDetailV2#getCopyRecordMenuItem
* @overridden
*/
getCopyRecordMenuItem: Terrasoft.emptyFn,
/**
* @inheritdoc Terrasoft.BaseGridDetailV2#getEditRecordMenuItem
* @overridden
*/
getEditRecordMenuItem: Terrasoft.emptyFn,
/**
* @inheritdoc Terrasoft.GridUtilitiesV2#getFilterDefaultColumnName
* @overridden
*/
getFilterDefaultColumnName: function() {
return "Product";
}
},
diff: /**SCHEMA_DIFF*/[
{
"operation": "merge",
"name": "DataGrid",
"values": {
"rowDataItemMarkerColumnName": "Product"
}
},
{
"operation": "merge",
"name": "AddRecordButton",
"values": {
"visible": {"bindTo": "getToolsVisible"}
}
}
]/**SCHEMA_DIFF*/
};
}
);
Во первых почему у вас у замещающей детали столько методов из базовой детали? Вы скопировали абсолютно все из родителя? Не надо так делать. Тем более если вы разблокировали родителя и пишите там, так уж точно не стоит делать.
Во вторых миксин OrderUtilities: "Terrasoft.OrderUtilities" тут наверно лишний.
Вот у меня получилось в лидах сделать эту деталь редактируемой, почитайте:
define("LeadProductDetailV2", ["ConfigurationEnums", "ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"], function(configurationEnums) { return { entitySchemaName: "LeadProduct", methods: { }, mixins: { ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities" }, attributes: { "IsEditable": { dataValueType: Terrasoft.DataValueType.BOOLEAN, type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, value: true } }, diff: /**SCHEMA_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 } } ]/**SCHEMA_DIFF*/ }; } );
Здравствуйте.
Пытаюсь добавить деталь в карточку контакт, которая бы хранила информацию о купленых товаров этим контактом.
Сделал как на фото, но почемуто ничего не отобразилось и написало что такая деталь не зарегистрирована. Может я не те поля выбираю или что нужно сделать чтобы продукты появились и их прямо в карточке можна добавлять (как в лидах). Спасибо.
Здравствуйте!
Вам необходимо корректно связать деталь с разделом:
В Вашем случае, необходимо, что бы в значении "Колонка детали" была выбрана колонка справочного типа "Контакт"
подробнее про добавление детали по ссылке:
http://academy.terrasoft.ru/documents/docs/product/bpm'online%20sales/t…
создание детали:
http://academy.terrasoft.ru/documents/docs/product/bpm'online%20sales/t…
Это мне нужно создать новую деталь? Просто в "Колонка детали" нету "Контакт"...
Вы можете создать новый объект для справочника, а можете добавить данную колонку в уже существующий объект детали, укажите тип данных - "Справочник", выберите объект справочника -"Контакт"
"Липатов Юрий Сергеевич" написал:Вы можете создать новый объект для справочника, а можете добавить данную колонку в уже существующий объект детали, укажите тип данных - "Справочник", выберите объект справочника -"Контакт"
Не совсем понимаю про какой обьект детали идет речь? Можете написать более детальнее?
Пожалуйста, обратите внимание на ссылки, которые я Вам написал выше:
"Липатов Юрий Сергеевич" написал:создание детали:
http://academy.terrasoft.ru/documents/docs/product/bpm'online%20sales/team/7.7.0/BPMonlineHelp/chapter_detail_wizard/chapter_detail_wizard.htm