Как передать строку в функцию в шаблоне NVelocity? - PullRequest
0 голосов
/ 09 января 2009

Я использую Шаблонизатор NVelocity для получения фиксированной длины выходного поля - вы знаете, что такое:

Field        Start Pos   Field Length  Notes
----------   ---------   ------------  ---------
Supplier      1           7            Leading Zeros
GRN           8           9            -
...

e.g.
>0001234    123A<

Проблема в Я пытаюсь вызвать String.PadRight () с перегрузкой, чтобы указать начальный ноль, а у NVelocity его нет ..

Это работает:

$Document.SupplierCode.PadRight(7)

Но это не так:

$Document.SupplierCode.PadRight(7,"0")

Я пробовал:

  • Одинарные кавычки ('0')

  • Двойные одинарные кавычки (''0'')

  • Двойные кавычки ("0")

  • Двойные двойные кавычки (""0"")

  • Выход из кавычек для всего вышеперечисленного (\"0\")

  • Без кавычек!

Все, с чем я нашел работу - это Домашняя страница NVelocity и Справочная страница по языку шаблонов скорости , ни один не указывает мне на решение.

Извините, я не могу предоставить или указать вам где-нибудь, где вы можете проверить свои идеи для себя, но любые ваши предложения будут приветствоваться!

Спасибо за вашу помощь; o)

Ответы [ 2 ]

1 голос
/ 21 января 2010

В настоящий момент я справляюсь с той же проблемой, насколько я понимаю, это связано с тем, что функции PadLeft и PadRight класса String получают второй параметр, ведущий «0», как символ, а не в виде строки.

NVelocity позволяет вам указать параметр как строку, используя '0', но таким образом внутренне он генерирует исключение приведения (или что-то подобное), потому что параметр ожидается как char.

Я еще не нашел (я просто использую NVelocity с 1 часа!) Способ указать параметр как char, на данный момент у меня есть только грязное решение, такое как применение Replace ("", "0 ") после PadLeft / PadRight, поэтому шаблон становится

$ Document.SupplierCode.PadRight (7) .Replace ('', '0')

0 голосов
/ 09 января 2009

Одно решение, которое придумал коллега, - это создать другое свойство в объекте Document, которое возвращает отформатированную строку:

* 1003 Е.Г. *

Public ReadOnly Property SupplierCodeFormatted() As String
    Get
        Return Supplier.Code.PadLeft(7, "0")
    End Get
End Property
...