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>
Другие вопросы по тегам