Часто в работе на проектах необходимо использовать вызов хранимых процедур SQL из скриптов Terrasoft. В случаи вызова процедур в одном/двух случаях можно описать вызов вручную, когда же таких вызовом множество их описание становится нудным даже при условии копипаста.
Из этого родился перечень функций для вызова процедур. Возможно, код не идеален, но помог избежать некоторых механических описаний, кому-то они (функции) тоже могут оказаться полезны.
Во вложении сервис, содержащий описанные ниже функции.
Описание функций:
ExecuteSQL(SQLText, Names, Types, Values) - выполняет SQL скрипт с указанными параметрами
• SQLText - текст SQL скрипта
• Names - массив имен параметров
• Types - массив типов параметров, в соответствии с порядком следования элементов параметра Names
• Values - массив значений параметров, в соответствии с порядком следования элементов параметра Names
ExecuteSQLWithoutParameters(SQLText) - выполняет SQL скрипт без указания параметров
• SQLText - текст SQL скрипта
ExecuteSQLWithReturnParameter(SQLText, Names, Types, Values, ReturnName) - выполняет SQL скрипт с указынными параметрами и возвращает результат
• SQLText - текст SQL скрипта
• Names - массив имен параметров
• Types - массив типов параметров, в соответствии с порядком следования элементов параметра Names
• Values - массив значений параметров, в соответствии с порядком следования элементов параметра Names
• ReturnName - название возвращаемого параметра
Коды функций:
function ExecuteSQL(SQLText, Names, Types, Values) {
var Parameters = CreateSPParameters();
var i = 0;
while (i Names.length) {
CreateSPParameter(Parameters, Names[i], Types[i], Values[i]);
i++;
}
Connector.DBEngine.ExecuteCustomSQL(SQLText, Parameters);
}
function ExecuteSQLWithoutParameters(SQLText) {
Connector.DBEngine.ExecuteCustomSQL(SQLText, System.EmptyValue);
}
function ExecuteSQLWithReturnParameter(SQLText, Names, Types, Values, ReturnName) {
var Parameters = CreateSPParameters();
var i = 0;
while (i Names.length) {
CreateSPParameter(Parameters, Names[i], Types[i], Values[i]);
i++;
}
Parameters.ItemsByName(ReturnName).ParamType = 1;
Connector.DBEngine.ExecuteCustomSQL(SQLText, Parameters);
var Result = Parameters.ItemsByName(ReturnName).ValAsInt;
return Result;
}
Примеры использования:
var SQLText = 'CheckCardSelectingOffering :OfferingInWarehouseID, ' +
':CardSelectionID, :ReturningCustomer, :CancelSelection, :Result OUTPUT';
var Names = new Array('OfferingInWarehouseID', 'CardSelectionID',
'ReturningCustomer','CancelSelection', 'Result');
var Types = new Array(pdtGUID, pdtGUID, pdtGUID, pdtGUID, pdtInteger);
var Values = new Array(OfferingDataset('ID'), CardSelectionID, wartypReturningCustomer,
wartypCancelSelection, 0);
var Result = ExecuteSQLWithReturnParameter(SQLText, Names, Types, Values, 'Result');
var SQLText = 'CalcAccountAmounts :AccountID, :Held, :CardSelection, ' +
':Platezh, :Paid';
var Names = new Array('AccountID', 'Held', 'CardSelection', 'Platezh', 'Paid');
var Types = new Array(pdtGUID, pdtGUID, pdtGUID, pdtGUID, pdtGUID);
var Values = new Array(AccountID, warstateHeld, wartypCardSelection, doctypePlatezh,
docstatPaid);
ExecuteSQL(SQLText, Names, Types, Values);