Объяснить код VBScript

Может кто-нибудь помочь мне понять, что делает этот кусок VBScript. Я теряюсь в бите WhereClause

 If CVs = "," or CVs = ",," Then
    ExistingSupplierCVs = 0
Else
    Set CVRecords = Ext.CreateAppRecordList( ActivityTableId )
    WhereClause = Left(CVs, Len(CVs)-1)
    WhereClause = Right(WhereClause, Len(WhereClause)-1)
    WhereClause = "TS_ID in (" & WhereClause & ") and TS_SUPPLIER = " &      Supplier

    If Not CVRecords.ReadWithWhere( WhereClause ) then
        Call Ext.LogErrorMsg( "TeamScript Error : Cannot find " & QUOTE & WhereClause & QUOTE & " in table " & QUOTE & "USR_ACTIVITY" & QUOTE )
        Exit Sub
    End If

    ExistingSupplierCVs = CVRecords.Length()
End If

4 ответа

Как @Dave заявил: они удаляют первый и последний символы из CVs строка.

Более простой подход будет использовать Mid

WhereClause = Mid(CVs, 2, Len(CVs) - 2)

Вы можете объединить все три строки следующим образом:

WhereClause = "TS_ID in (" & Mid(CVs, 2, Len(CVs) - 2) & ") and TS_SUPPLIER = " & Supplier

Поскольку это AppScript (вариант VBScript для SBM), вы получите лучшие ответы, разместив его на сайте сообщества Serena (теперь часть MicroFocus).

Это очень типично для языка Serena Business Manager Composer - AppScript.

Код, которым вы поделились, будет подсчитывать количество записей в поле Multi Relation, а затем вводить значение в поле. Типичные пустые поля Multi Relational выглядят как ",," и будут иметь значения, которые будут выглядеть примерно так: "1,34" с числами, показывающими идентификаторы поля, на которое указывает это поле MR.

Строящееся предложение where является не чем иным, как простым удалением первой и последней запятой из поля MR и последующим запросом идентификаторов.

дайте мне знать, если у вас все еще есть какие-либо сомнения здесь.

Лучшее предположение, как показано ниже...

If CVs = "," or CVs = ",," Then
    ExistingSupplierCVs = 0 ' if the string is empty advise that the number of CVs is zero
Else
    Set CVRecords = Ext.CreateAppRecordList( ActivityTableId ) ' extract a list of CVRecords
    WhereClause = Left(CVs, Len(CVs)-1) ' strip the last char from this string
    WhereClause = Right(WhereClause, Len(WhereClause)-1) ' strip the first char from this string
    WhereClause = "TS_ID in (" & WhereClause & ") and TS_SUPPLIER = " &      Supplier ' insert the values into (presumably) a SQL query

    If Not CVRecords.ReadWithWhere( WhereClause ) then ' if executing the query returns false
        Call Ext.LogErrorMsg( "TeamScript Error : Cannot find " & QUOTE & WhereClause & QUOTE & " in table " & QUOTE & "USR_ACTIVITY" & QUOTE ) 'report an error and exit the subroutine.
        Exit Sub
    End If

    ExistingSupplierCVs = CVRecords.Length() ' return the number of records from the query
End If
Другие вопросы по тегам