web-services json datasnap
Технические вопросы
7.x

Как заполнить деталь данными из Json-строки?

Дорый день!

Встала задача заполнения детали на основе данных из json-строки. Строку возвращает bpmonline-сервис по нажатию кнопки. В итоге должна получиться деталь похожая на Кредитный калькулятор (BPMonline Lending).

Так вот, КАК можно заполнить нашу детальку? Разобраться в коде стандартного кредитного калькулятора не особо удалось..

Надеемся на помощь - вопрос срочный. Спасибо.

Нравится

6 комментариев

Да, забыл упомянуть версию системы - BPMonline Lending Версия 7.2.2.257

Да, забыл упомянуть версию системы - BPMonline Lending Версия 7.2.2.257

Акмаль, здравствуйте.

Кредитный калькулятор действительно заполняется из json запроса. Это реалировано в генераторе модели представления, схема BankingServiceSearchModuleViewModelGenerator:

[javascript]
function loadPaymentScheduleGridDataFromJson(dataJson, scope) {
var data = Ext.JSON.decode(dataJson);
var newCollection = Ext.create("Terrasoft.Collection");
Terrasoft.each(data, function(item, key) {
var model = Ext.create("Terrasoft.BaseViewModel", {
rowConfig: {
Id: {
columnPath: "Id",
dataValueType: Terrasoft.DataValueType.GUID
},
LoanDate: {
columnPath: "LoanDate",
dataValueType: Terrasoft.DataValueType.DATE
},
LoanPeriod: {
columnPath: "LoanPeriod",
dataValueType: Terrasoft.DataValueType.INTEGER
},
PercentageAmount: {
columnPath: "PercentageAmount",
dataValueType: Terrasoft.DataValueType.FLOAT
},
TotallyPaymentAmount: {
columnPath: "TotallyPaymentAmount",
dataValueType: Terrasoft.DataValueType.FLOAT
}
},
values: {
Id: Terrasoft.generateGUID(),
LoanDate: new Date(item.LoanDate),
LoanPeriod: item.LoanPeriod,
PercentageAmount: item.PercentageAmount,
TotallyPaymentAmount: item.TotallyPaymentAmount
}
});
newCollection.add(model.get("Id"), model);
}, this);
var paymentScheduleGridData = scope.get("paymentScheduleGridData");
scope.set("gridPaymentEmpty", newCollection.getCount() === 0);
paymentScheduleGridData.loadAll(newCollection);
var searchRecordId = scope.get("searchResultActiveRow");
var loanTerm =
scope.get("searchResultGridData").get(searchRecordId).get("LoanTermRange");
loanTerm = loanTerm.split("-");
var minTerm = parseInt(loanTerm[0].trim(), 10);
var maxTerm = parseInt(loanTerm[1].trim(), 10);
var term = scope.get("LoanPeriod");
if (Ext.isNumber(term)) {
term = term < minTerm ? minTerm : term;
term = term > maxTerm ? maxTerm : term;
var activeRow = getRowByColumnValue(paymentScheduleGridData, "LoanPeriod",
term);
if (activeRow) {
setActiveRow("payment-schedule-grid", activeRow.get("Id"));
}
}
}
[/javascript]

Создается BaseViewModel, в конструктор передается конфиг строк. Затем, в цикле заполняется.

Максим, здравствуйте!
Вы не могли бы описать весь набор схем, которые нужно создать, чтобы добавить такую деталь на страницу? Я так понимаю, в 7.2 все сильно отличается от 7.1...
Спасибо!

Просто не очень понятно, как, что и с чем связано. Скажем, достаточно ли будет разместить на детали кнопку, по нажатии которой будет запускаться БП, делающий расчеты, и который будет возвращать JSON, который, в свою очередь, будет обрабатывать обозначенная Вами функция?

Да, этого будет достаточно, если Вы хотите реализовать заполнение по кнопке.

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