Проблема в том что не могу отследить событие добавление файла на деталь "Файлы и ссылки".
"KtFilesConfirmingDiscountDetail": { "schemaName": "KtFilesConfirmingDiscountDetail", "entitySchemaName": "KtFilesConfirmingDiscount", "filter": { "detailColumn": "KtOpportunityProductInterest", "masterColumn": "Id" }, "subscriber": { "methodName": "discountValueEnable" } }
Данная конструкция отслеживает удаление файла а так же изменение записи (описание внутри, можно сказать редактирование), но добавление файла не как не отправляет сообщение. Смотрел логику работы, так и не нашел что бы отправлялось сообщение что "добавлен файл"
Нравится
Александр, в стандартной системе нет объекта KtFilesConfirmingDiscount и схемы детали KtFilesConfirmingDiscountDetail, не видя её кода сложно сказать, почему оно так реализовано. Если это часть партнёрского дополнения, лучше будет уточнить у его автора.
Если нужно разработать свою логику со срабатыванием на добавление, можно в обычном БП или встроенном БП объекта файла в этом разделе завязаться на событие добавления.
Например, в CaseFile есть такая логика:
Зверев Александр,
Код детали
define("KtFilesConfirmingDiscountDetail", ["css!KtFilesConfirmingDiscountDetailCssModule"], function() { return { methods: { /** * Initializes parent entity. */ initParentEntity: function() { this.parentEntity = {}; const entitySchemaName = this.entitySchema && this.entitySchema.name || ""; const parentSchemaName = entitySchemaName.replace("KtFilesConfirmingDiscount", "KtOpportunityProductInterest"); const masterRecordId = this.get("MasterRecordId"); this.parentEntity.EntityName = parentSchemaName; this.parentEntity.RecordId = masterRecordId; }, /** * ############## ####### "drag" # "drop" ##########. * @private */ initDropzoneEvents: function() { const dropZone = document.getElementById("DragAndDropContainerOpportunityProductInterest"); if (!dropZone) { return; } if (this.Terrasoft.Features.getIsEnabled("CheckMasterRecordEditRights") && !this.get("CanEditMasterRecord")) { return; } this.Terrasoft.ConfigurationFileApi.initDropzoneEvents(dropZone, function(over) { if (over) { dropZone.classList.add("dropzone-hover"); } else { dropZone.classList.remove("dropzone-hover"); } }, function(files) { this.onFileSelect(files); }.bind(this)); }, getAddRecordButtonVisible: function() { return this.getToolsVisible() && this.get("CanEditMasterRecord") && this.get("IsEnabled"); } }, diff: /**SCHEMA_DIFF*/[ { "operation": "merge", "name": "DragAndDrop Container", "parentName": "Detail", "propertyName": "items", "values": { "id": "DragAndDropContainerOpportunityProductInterest", "selectors": {"wrapEl": "#DragAndDropContainerOpportunityProductInterest"}, "itemType": Terrasoft.ViewItemType.CONTAINER, "wrapClass": ["dropzone"], "items": [ { "labelClass": ["DragAndDropLabel"], "itemType": Terrasoft.ViewItemType.LABEL, "caption": {"bindTo": "Resources.Strings.DragAndDropCaption"} } ] } } ] /**SCHEMA_DIFF*/ }; });
Родительский объект "FileDetailV2 ( UIv2 )". Думаю CSS нет смысла прикладывать, он стандартный.
Событие на добавление нужно отловить на клиентской части, нужно по этому событию сделать поле на странице редактируемым (снять блок, эта логика уже есть)
По рекомендации поддержки просмотрел методы сохранения и решил остановится на onFileComplete
на стороне детали:
messages: { "DiscountValueEnable": { "mode": Terrasoft.MessageMode.PTP, "direction": Terrasoft.MessageDirectionType.PUBLISH } }, onFileComplete: function() { this.callParent(arguments); this.sandbox.publish("DiscountValueEnable", null, [this.sandbox.id]); }
на стороне страницы:
messages: { "DiscountValueEnable": { mode: this.Terrasoft.MessageMode.PTP, direction: this.Terrasoft.MessageDirectionType.SUBSCRIBE } }, methods: { init: function() { this.callParent(arguments); this.sandbox.subscribe("DiscountValueEnable", function() { this.discountValueEnable(); }, this, [this.sandbox.id + "_detail_KtFilesConfirmingDiscountDetailKtFilesConfirmingDiscount"]); }, discountValueEnable: function(){ this.set("discountValueEnable", true); } }