Деталь со множественным добавлением записей

Реализовал деталь со множественным добавлением записей в соответствии с описанием в статье https://academy.terrasoft.ru/documents/technic-sdk/7-10/mnozhestvennoe-dobavlenie-zapisey-na-detal. Код детали ниже. Столкнулся со следующей проблемой: сразу после добавления записи выделяю ее в реестре и нажимаю изменить. В консоли ошибка.

Изображение удалено.

Если открывать добавленную запись после выхода из карточки и повторного захода, то ошибки нет. Подскажите, как исправить данную ошибку.

define("Schema3Detail", ["LookupMultiAddMixin"], function() {

    return {

        entitySchemaName: "WeeklyPlanScheduleInDailyPlan",

        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,

        diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,

        mixins: {

            LookupMultiAddMixin: "Terrasoft.LookupMultiAddMixin"

        },

        methods: {

            

            init: function() {

                this.callParent(arguments);

                this.mixins.LookupMultiAddMixin.init.call(this);

            },

            onActiveRowAction: function(buttonTag) {

                switch (buttonTag) {

                    case "openCard":

                        this.editRecord();

                        break;

                }

            },

            getAddRecordButtonVisible: function() {

                return this.getToolsVisible();

            },

            onCardSaved: function() {

                this.openLookupWithMultiSelect();

            },

            addRecord: function() {

                this.openLookupWithMultiSelect(true);

            },

            getMultiSelectLookupConfig: function() {

                return {

                    rootEntitySchemaName: "DailyPlan",

                    rootColumnName: "DailyPlan",

                    relatedEntitySchemaName: "WeeklyPlanSchedule",

                    relatedColumnName: "WeeklyPlanSchedule"

                };

            }

        }

    };

});

 

Нравится

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

Решали подобные проблемы. Самое простое - перечитать грид после добавления записи :)

Вариант А:

onProductInsert: function(response) {
 
this.hideBodyMask.call(this);
if (this.get("IsGridLoading")) {
	return;
}
this.beforeLoadGridData();
var filterCollection = [];
response.queryResults.forEach(function(item) {
filterCollection.push(item.id);
});
var esq = this.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.reloadGridData(); // вот источник проблемы
	}
}, this);
}

Вариант Б - замещайте функцию editRecord:

editRecord: function(record) {
 
	var activeRow = record || this.getActiveRow();
	if (!activeRow) {
		return;
	}
	if (!this.getIsCardValid()) {
		return;
	}
	var isCardChanged = this.getIsCardChanged();
 
 
	// вот тут возникает проблема у вас. Если activeRow не объектного типа, тогда не можем получить его своейство и падаем				
	if (typeof activeRow === "object") {
		var primaryColumnValue = activeRow.get("Id");
	} else {
		var primaryColumnValue = activeRow;
	}
 
    var typeColumnValue = this.getTypeColumnValue(activeRow);
	if (isCardChanged) {
		this.set("CardState", configurationEnums.CardStateV2.EDIT);
		this.set("EditPageUId", typeColumnValue);
		this.set("PrimaryValueUId", primaryColumnValue);
		var args = {
			isSilent: true,
			messageTags: [this.sandbox.id]
		};
		this.sandbox.publish("SaveRecord", args, [this.sandbox.id]);
	} else {
		this.openCard(configurationEnums.CardStateV2.EDIT, typeColumnValue, primaryColumnValue);
	}
}

Но первый способ гарантированно решит проблему. 

 

Дмитрий, спасибо, первый вариант помог.

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