Деталь со множественным добавлением записей
Реализовал деталь со множественным добавлением записей в соответствии с описанием в статье 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"
};
}
}
};
});
Нравится
Решали подобные проблемы. Самое простое - перечитать грид после добавления записи :)
Вариант А:
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); } }
Но первый способ гарантированно решит проблему.