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