Paramarray в VBScript
У нас есть классический ASP, который использует VB6 COM, например:
Dim Value1
Dim Value2
Dim Value3
'Etc.
Dim VB6COM
Set VB6COM = Server.CreateObject("VB6COM")
VB6COM.GetSomeValues MyConnectionString, "TABLE_NAME", "ROW_ID = 1", _
"FIELD_NAME_1", Value1, _
"FIELD_NAME_2", Value2, _
"FIELD_NAME_3", Value3, ... Etc.
Вызываемая процедура выглядит так:
Public Sub GetSomeValues(ConnectionString, TableSource, SearchCondition, ParamArray Fields())
'Code to open the database and retrieve the row goes here.
'For this example to run without a database, we use example values below.
For Index = 0 To UBound(Fields) Step 2
Fields(Index + 1) = "ExampleValue" & Index
Next
End Sub
Мы хотим прекратить использование VB6COM и перенести эту функцию на веб-сайт ASP.
Таким образом, вызов должен отбросить строки Server.CreateObject и закончиться так:
Dim Value1
Dim Value2
Dim Value3
'Etc.
GetSomeValues MyConnectionString, "TABLE_NAME", "ROW_ID = 1", _
"FIELD_NAME_1", Value1, _
"FIELD_NAME_2", Value2, _
"FIELD_NAME_3", Value3, ... Etc.
Проблема в том, что VBScript не поддерживает ParamArrays.
Я знаю, что мы можем изменить ParamArray на объект массива. Но так как мы должны изменить тысячи вызовов, было бы лучше, если бы существовал способ сохранить исходный вызов.
Есть идеи?
1 ответ
Вы можете использовать JScript в Classic ASP, который поддерживает переменное количество параметров, доступных через arguments
"Массив". Я не могу это проверить, но я полагаю, что вы можете включить 2 языка бок о бок и вызывать функции, определенные в JScript из VBScript.
<script language="JScript">
// these parameters aren't used directly but they document the positions
function GetSomeValues(connString, tableName, whereClause, columnName, value /* , ... */) {
var args = arguments.slice(0), // make arguments a proper array
ado = new ActiveXObject("ADODB.Connection"),
connectionString = args.shift(),
tableName = args.shift(),
whereClause = args.shift(),
columns = args; // rest of the arguments are your columns
ado.ConnectionString = connectionString;
/* etc */
}
</script>
<script language="VBScript">
GetSomeValues MyConnectionString, "TABLE_NAME", "ROW_ID = 1", _
"FIELD_NAME_1", Value1, _
"FIELD_NAME_2", Value2, _
"FIELD_NAME_3", Value3, ... Etc.
</script>