Использование средства форматирования для валют в SAPUI5

Я хочу создать свой собственный форматировщик для отображения суммы в разных валютах.

Можно было бы догадаться, что я использую это решение, которое я уже знаю:

                                               <t:template>
                                <Text text="{
                                                parts: [
                                                    {path: 'amount'},
                                                    {path: 'currency'}
                                                ],
                                                type:'sap.ui.model.type.Currency',
                                                formatOptions: {
                                                    currencyCode: false
                                                }
                                            }"
             </t:template>

проблема с этим решением в том, что я уже показываю валюту в отдельном столбце, и если я выберу это решение, оно выглядит довольно уродливо....

поэтому я попробовал это:

<t:template>
                                <Text text="{parts: [                
                                {path: 'amount'},
                                {path: 'currency'}
                                ],               
                                formatter : '.formatter.currency'}"
                                 />
                            </t:template>

и моя функция форматирования выглядит так:

    currency: function(amount, currency) {

        var change = [];
        change.push(amount);
        change.push(currency);
        var sInternalType = "";
        var amount1 = new sap.ui.model.type.Currency();


            amount1.formatValue(change, sInternalType);
            return amount1;
    }

Здесь я бы предположил, что делаю что-то совершенно неправильно, поскольку английский не является моим первым языком, я, вероятно, предположил бы, что неправильно понял ссылки на API, поскольку они указаны следующим образом:

  • formatValue(vValue, sInternalType): любой
  • Отформатируйте данный массив, содержащий количество и код валюты, в выходное значение типа string. Другие внутренние типы, кроме 'string', не поддерживаются типом Currency. Если для этого типа был определен исходный формат, formatValue также принимает строковое значение в качестве входных данных, которое будет преобразовано в массив с использованием исходного формата. Если aValues ​​не определен или имеет значение null, будет возвращено значение null.
  • Параметры:
  • {array|string} vValue массив значений или строковое значение для форматирования
  • {string} sInternalType тип цели
  • Возвращает:
  • {любое} форматированное выходное значение

person Nali    schedule 27.06.2016    source источник


Ответы (2)


Если вы намерены не показывать символ или код валюты, потому что вы уже показываете его в другом месте, вы можете просто установить showMeasure на false, например:

<Text xmlns:core="sap.ui.core"
  core:require="{ CurrencyType: 'sap/ui/model/type/Currency' }"
  text="{
    parts: [
      'amount',
      'currency'
    ],
    type: 'CurrencyType',
    formatOptions: {
      showMeasure: false
    }
  }"
/>

Отсутствие отображения кода/символа валюты является функцией стандартного типа валюты. Вам не нужно продлевать его.


Примечание. В случае OData V4 требуется тип sap/ui/model/odata/type/Currency вместо этого.

person jpenninkhof    schedule 27.06.2016
comment
Я использую это для двусторонней привязки OData, но получаю проблему во время обновления значения цены. Цена (в примере названная сумма) в моем случае Edm: Decimal - которая отправляется в виде строки, а не в виде числа. К сожалению, тип Currency отправляет значение с плавающей запятой. Есть ли способ заставить это работать правильно? - person user3783327; 25.04.2019
comment
@user3783327 user3783327 Должно быть возможно с дополнительным параметром формата parseAsString: true. По умолчанию это false. - person Boghyon Hoffmann; 20.02.2020

Если вы хотите использовать собственный форматтер, вы можете определить его следующим образом:

currency: function(amount, currency) {

    var oCurrency = new sap.ui.model.type.Currency({
        showMeasure: false       
    });

    return oCurrency.formatValue([amount,curreny], "string");

}

Но я бы порекомендовал использовать решение от jpenninkhof для вашего варианта использования.

person Andreas    schedule 11.06.2018