Vai al contenuto

Value vs ValueEx

Distinzione fondamentale che si porta dietro da versioni vecchie della SDK — riguarda come viene formattato/interpretato il valore, in particolare per numeri e date.

Value

  • Restituisce/accetta il valore formattato secondo le impostazioni regionali dell'utente (locale-dependent).
  • Per un dt_DATE: formato data secondo le impostazioni Windows/SAP dell'utente (es. 03/09/2026 o 09/03/2026 a seconda del locale).
  • Per numeri (dt_PRICE, dt_SUM...): usa il separatore decimale locale (es. virgola in Italia, punto in US).
  • Sconsigliato per la logica di programmazione, perché il comportamento cambia a seconda di chi esegue il codice.

ValueEx

  • Restituisce/accetta il valore in formato invariante, indipendente dal locale.
  • Per le date: sempre formato YYYYMMDD (es. "20260903").
  • Per i numeri: sempre con punto come separatore decimale (es. "1234.56"), indipendentemente dalle impostazioni regionali.
  • Raccomandato da SAP per tutta la logica di programmazione, proprio perché è deterministico e non dipende da chi usa il client.

Esempio

oForm.DataSources.UserDataSources.Add("MyDate", SAPbouiCOM.BoDataType.dt_DATE);

// Se l'utente italiano vede "03/09/2026" nel campo:
string valLocale = oForm.DataSources.UserDataSources.Item("MyDate").Value;       // "03/09/2026"
string valInvariante = oForm.DataSources.UserDataSources.Item("MyDate").ValueEx; // "20260903"
oForm.DataSources.UserDataSources.Add("MyPrice", SAPbouiCOM.BoDataType.dt_PRICE);

string prezzoLocale = oForm.DataSources.UserDataSources.Item("MyPrice").Value;       // "1.234,56" (IT)
string prezzoInvariante = oForm.DataSources.UserDataSources.Item("MyPrice").ValueEx; // "1234.56"

Regola pratica

  • Usare ValueEx per leggere/scrivere/calcolare nel codice (parsing sicuro con CultureInfo.InvariantCulture o .ToDouble() se disponibile).
  • Usare Value solo se occorre mostrare/confrontare qualcosa esattamente come lo vede l'utente a schermo (raro).