Formatage des devises et des nombres
L'affichage des montants monétaires varie d'un pays à l'autre. Les valeurs monétaires sont généralement accompagnées d'un symbole monétaire, qui peut exister soit dans les symboles de la devise locale (par exemple, $, R$), soit dans les codes de devises internationales ISO 4217 (par exemple, USD, EUR, BRL). Les symboles de devise peuvent être placés avant, à l'intérieur ou après le caractère radix du montant monétaire, et il peut y avoir ou non un espace entre le symbole et le montant. Bien que la plupart des pays utilisent la virgule ou le point comme séparateur décimal des devises, certains pays, comme le Japon, n'ont pas de séparateur décimal de devise.
Pourquoi et quand exécuter cette tâche
Les règles de mise en forme des champs numériques ne sont pas nécessairement les mêmes que les règles de mise en forme des montants monétaires. La mise en forme culturelle des champs numériques diffère selon les pays, puisque différents pays utilisent différentes représentations numériques positives et négatives pour le même montant.
La liste suivante montre plusieurs façons d'afficher les mêmes valeurs numériques :
- 1 234,56 .123
- 1 234 560 123
- 1.234,56
La représentation négative des nombres n'a pas de forme universelle. Certains pays utilisent un tiret devant le nombre pour désigner des chiffres négatifs non monétaires. Certains placent le tiret après le nombre, et certains utilisent un tout autre symbole. La liste suivante montre plusieurs façons d'afficher le nombre négatif quinze :
- -15
- 15-
- (15)
- {15}
- <15>
Certains pays ont peut-être plus d'une langue officielle, mais une seule monnaie. Le Canada est un excellent exemple où il y a une monnaie unique, le dollar canadien, mais deux langues officielles, l'anglais et le français. Il est complexe pour les entreprises d'opérer dans plusieurs devises. L'ajout d'un élément de langue augmente cette complexité et rend les prix et autres tâches liées à la devise presque ingérables dans les outils d'administration HCL Commerce tels que HCL Commerce Accelerator.
Une devise unique par défaut, qui peut servir de base pour les conversions ou les prix explicites dans d'autres devises, rend ces tâches opérationnelles plus claires et correspondent mieux aux pratiques commerciales.

Il n'existe aucun moyen de définir une relation un-à-un ou un-à-plusieurs entre la langue et la devise. Toute devise donnée peut être liée à de nombreuses langues, par exemple, le dollar canadien est lié à la fois au français et à l'anglais. N'importe quelle langue donnée peut être liée à de nombreuses devises, par exemple, l'anglais est lié au dollar américain, au dollar canadien, à la livre sterling et à d'autres.
HCL CommerceGestionnaire de devises
Dans HCL Commerce, la devise d'achat est la devise dans laquelle le client voit tous les prix. Pour déterminer la devise d'achat d'un client, le moteur de devise appelé Le Gestionnaire de devises exécute l'algorithme suivant :
- Si le magasin spécifie et prend en charge les preferred_currency du client, alors shopping_currency = preferred_currency.
- Si la preferred_currency du client est spécifiée (et non prise en charge) et qu'elle est contre-valeur pour another_supported_currency, alors shopping_currency=another_supported_currency.
- Si (shopping_currency = null) alors shopping_currency = devise par défaut du magasin (à partir de la table STOREENT - colonne SETCCURR qui peut être définie sur null) n'est pas dépendante de la langue.
- Si (shopping_currency = null), shopping_currency = devise par défaut pour la langue (la colonne SETCURR de la table STORELANG) dépend de la langue.
Notez ce qui suit lorsque le Gestionnaire de devises exécute l'algorithme précédent :
- L'utilisation de la colonne SETCCURR de la table STORELANG est fortement déconseillée, car elle peut être obsolète dans une version ultérieure. La colonne n'est donc compatible avec les versions antérieures uniquement. Vos modèles de magasin ne doivent pas définir la colonne SETCCURR de la table STORELANG (définissez-la sur null).
- Les magasins migrés peuvent facilement atteindre le nouveau comportement en définissant le magasin par défaut à l'aide de la table STOREENT. La table STORELANG n'a pas besoin d'être modifiée. Cela permet à certains magasins migrés d'obtenir le nouveau comportement et à d'autres magasins migrés de garder l'ancien comportement.
- La colonne SETCCURR de l'objet du magasin ou l'objet storeGroup doivent être définis via la table STOREENT. Pour les magasins migrés, ce ne sera pas le cas au départ. Tous les nouveaux magasins doivent définir la devise par défaut du magasin ou du storeGroup. La définition de la devise par défaut du magasin garantira que la dernière étape de l'algorithme ci-dessus ne sera pas exécutée.
La mise en forme des devises dans HCL Commerce dépend des éléments suivants :
- La devise (code ISO de trois lettres)
- ID langue
Ces informations sont nécessaires pour valider ou mettre en forme une devise. La mise en forme des numéros dépend uniquement de l'ID de langue.
Le Gestionnaire de devises rend disponibles toutes les informations de mise en forme des nombres et devises dans la base de données d'instances HCL Commerce. Lorsque le serveur d'applications d'instance HCL Commerce est démarré, ces informations sont transformées en JavaScript et deviennent disponibles pour une utilisation dans la structure d'outils HCL Commerce. Importez le fichier web/tools/common/NumberFormat.jsp dans votre JSP pour ces fonctions JavaScript. Les fonctions exécutent les tâches suivantes :
- Valider une valeur de devise
- Convertir la valeur monétaire en valeur numérique
- Convertir la valeur numérique en valeur monétaire
- Valider un chiffre
- Convertir un chiffre à une valeur numérique
- Convertir une valeur numérique en un chiffre
Le tableau suivant répertorie certaines des principales fonctions de devise et de mise en forme JavaScript :
| Tâche | Entier | Numéro | Devise |
|---|---|---|---|
| Validez l'entrée utilisateur (n'importe laquelle) | isValidInteger() | isValidNumber() | isValidCurrency() |
| Enregistrer (convertir en chiffre JavaScript) | strToNumber() | strToNumber() | currencyToNumber() |
| Affichage (formater un numéro JavaScript pour une langue donnée) | numberToStr() | numberToStr() | numberToCurrency() |
L'exemple suivant montre un formulaire d'entrée de devise JavaScript typique dans un JSP d'outils :
//requirement ::provide a user input currency entry ...
//prefilling it with the previous value ...
function initializeState(){
document.myForm.myInput.value =
parent.numberToCurrency(currAmount,fCurr,"<%=fLanguageId%>");
}
function validatePanelData(){
if (!parent.isValidCurrency(document.myForm.myInput.value),fCurr,
"<%=fLanguageId%>")){
alert("not valid");
return false;
}
return true;
}
function savePanelData(){
MyCurr=parent.currencyToNumber(document.myForm.myInput.Value,fCurr,
"<%=fLanguageId%>");
parent.put("myCurrLbl",myCurr);
}
Un exemple de page de validation et de format est disponible dans \commerce\web\tools\sample\. Pour exécuter cette page, lancez http://hostname/commerce/tools/sample/validationTest.jsp.
Important : il est fortement recommandé d'éviter d'utiliser FormatNumber, FormatCurrency et FormatInteger. Ces fonctions sont incluses dans la structure d'outils HCL Commerce uniquement pour la compatibilité avec les versions antérieures.
FormatNumber et FormatCurrency effectuent la validation d'abord en fonction de l'ID de langue. Si vous obtenez un format numérique primitif (1000.23) à partir du serveur HCL Commerce, les fonctions renvoient une valeur Not a Number (NaN). De plus, FormatInteger n'accepte que les entiers numériques primitifs. Par conséquent, si vous avez un entier tel que 1000 dans l'ID de langue Anglais États-Unis, il renvoie un NaN.