Отследить добавление файла в деталь "Файлы и ссылки"

Проблема в том что не могу отследить событие добавление файла на деталь "Файлы и ссылки".

"KtFilesConfirmingDiscountDetail": {
	"schemaName": "KtFilesConfirmingDiscountDetail",
	"entitySchemaName": "KtFilesConfirmingDiscount",
	"filter": {
		"detailColumn": "KtOpportunityProductInterest",
		"masterColumn": "Id"
	},
	"subscriber": {
		"methodName": "discountValueEnable"
	}
}

Данная конструкция отслеживает удаление файла а так же изменение записи (описание внутри, можно сказать редактирование), но добавление файла не как не отправляет сообщение. Смотрел логику работы, так и не нашел что бы отправлялось сообщение что "добавлен файл"

Нравится

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

Александр, в стандартной системе нет объекта 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);
	}
}

 

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