Field Mapping & Data Type Comparison: How ERPs Handle Dates, Currencies, Multi-Language Fields, and Custom Fields Differently
Type: ERP Integration
Systems: Salesforce, SAP S/4HANA, Oracle ERP Cloud, NetSuite, D365 F&O, Workday, Acumatica, Business Central
Confidence: 0.85
Sources: 8
Verified: 2026-03-03
Freshness: evolving
TL;DR
- Bottom line: Every ERP has different date formats, currency representations, null semantics, and custom field APIs. The #1 cause of silent integration data corruption is assuming two systems use the same conventions when they do not.
- Key limit: SAP stores currency amounts in the smallest currency unit (cents) while most others use decimal notation — mapping without conversion creates 100x overcharges or underpayments.
- Watch out for: NetSuite datetimes default to PST/PDT (not UTC), Salesforce picklists are strings but D365 enums are integers, and Oracle flexfields are not discoverable via REST metadata.
- Best for: Any cross-ERP integration project where you need to build field transformation logic between two or more of these eight platforms.
- Authentication: N/A for this card — see the ERP REST API Comparison card for auth flow details.
System Profile
This card compares how eight major ERP/CRM platforms represent and handle fundamental data types in their APIs. It covers cloud deployments only. On-premise variants may differ significantly.
| System | Role | API Surface | Direction Covered |
| Salesforce (v62.0) | CRM + ERP-adjacent | REST, SOAP, Bulk 2.0 | Read + Write |
| SAP S/4HANA Cloud (2502) | ERP — financials + SCM | OData V2/V4 | Read + Write |
| Oracle ERP Cloud (25A) | ERP — financials + procurement | REST, FBDI | Read + Write |
| Oracle NetSuite (2025.1) | ERP — mid-market | REST, SuiteQL, SOAP | Read + Write |
| D365 F&O (10.0.40+) | ERP — financials + SCM | OData V4, DMF | Read + Write |
| Workday (2025R1) | HCM + Financials | REST, SOAP (WWS) | Read + Write |
| Acumatica (2025 R1) | ERP — mid-market | REST, OData | Read + Write |
| Business Central (v25) | ERP — SMB | REST API pages, OData V4 | Read + Write |
Quick Reference
Date/DateTime Format Comparison
| System | Date Format | DateTime Format | Timezone Storage | Timezone in API Response | Timezone on Write |
| Salesforce | YYYY-MM-DD | YYYY-MM-DDTHH:mm:ss.SSSZ | UTC always | UTC (Z suffix) | Must send UTC [src1] |
| SAP S/4HANA | YYYY-MM-DD | YYYY-MM-DDTHH:mm:ss | UTC (OData V4) | UTC (no offset in V4) | UTC recommended [src2] |
| Oracle ERP Cloud | YYYY-MM-DD | YYYY-MM-DDTHH:mm:ss+00:00 | UTC | UTC with offset | UTC or offset-aware |
| NetSuite | MM/DD/YYYY (SOAP) / YYYY-MM-DD (REST) | YYYY-MM-DDTHH:mm:ss.SSS-08:00 | User timezone (PST default) | User's timezone offset | Must specify timezone [src4] |
| D365 F&O | YYYY-MM-DD | YYYY-MM-DDTHH:mm:ssZ | UTC | UTC | UTC [src5] |
| Workday | YYYY-MM-DD | YYYY-MM-DDTHH:mm:ss.SSS-07:00 | Tenant timezone | Tenant timezone offset | Must specify or uses tenant default |
| Acumatica | YYYY-MM-DD | YYYY-MM-DDTHH:mm:ss+00:00 | UTC (REST) | UTC with offset | UTC recommended |
| Business Central | YYYY-MM-DD | YYYY-MM-DDTHH:mm:ssZ | UTC | UTC | UTC |
Currency & Amount Handling
| System | Storage Model | Decimal Precision | Currency Identifier | Zero-Decimal Currencies (JPY, KRW) | Multi-Currency |
| Salesforce | Decimal (e.g., 100.50) | Up to 18 digits, scale configurable | CurrencyIsoCode | Stored as decimal (100.00 = 100 JPY) | Multi-currency org setting [src1] |
| SAP S/4HANA | Smallest unit via CURR type (e.g., 10050 for $100.50) | Defined by TCURX table; default 2 | TransactionCurrency | TCURX entry with 0 decimals | Parallel currencies (up to 10) [src2, src3] |
| Oracle ERP Cloud | Decimal (e.g., 100.50) | Configurable precision + extended precision | InvoiceCurrencyCode | Precision = 0 | Multi-currency per ledger |
| NetSuite | Decimal (e.g., 100.50) | 0 or 2 decimal places only | currency.id (internalId) | Currency Precision = 0 | Multi-subsidiary, multi-currency [src8] |
| D365 F&O | Decimal (e.g., 100.50) | Default 2; configurable | CurrencyCode (ISO) | Rounding rule = 1 (no decimals) | Multi-company, multi-currency |
| Workday | Decimal (e.g., 100.50) | 2-4 decimals | Currency_Reference | Via currency definition | Multi-currency per company |
| Acumatica | Decimal (e.g., 100.50) | Configurable (default 2) | CuryID (ISO) | Decimal places = 0 | Multi-currency per company |
| Business Central | Decimal (e.g., 100.50) | Configurable (Amount Rounding Precision) | currencyCode (ISO) | Amount Rounding Precision = 1 | Multi-currency per company |
Custom Field / Extensibility Comparison
| System | Custom Field Mechanism | API Access | Naming Convention | Discovery via API | Max Custom Fields |
| Salesforce | Custom Fields on standard/custom objects | Full REST/SOAP; __c suffix | MyField__c | describe endpoint | ~800 per object [src1] |
| SAP S/4HANA | Key User Extensibility | Exposed if published to OData | YY1_FieldName prefix | $metadata | Varies by object |
| Oracle ERP Cloud | Descriptive Flexfields (DFF) + Extensible Flexfields (EFF) | Via segment names | Attribute1..Attribute30 | Not via REST metadata | Up to 30 DFF segments per context |
| NetSuite | Custom Fields (entity, transaction, item, CRM) | Full REST/SOAP/SuiteQL | custbody_name, custentity_name | metadata-catalog | Thousands [src4] |
| D365 F&O | Extended data types + extensible enums | Via OData data entities | Standard naming; no forced prefix | $metadata | Entity design limited [src6] |
| Workday | Calculated Fields + Custom Objects | Custom Reports (RaaS) for reads | Custom object naming | Not via standard REST | Plan-dependent |
| Acumatica | User-Defined Fields (customization project) | REST with Usr prefix | UsrFieldName (case-sensitive) | $metadata | Screen customization limited |
| Business Central | Table Extensions + Page Extensions (AL) | Only fields on API page definition | Standard AL naming | $metadata on API page | Publisher extension required |
Picklist / Enum / Lookup Value Handling
| System | Mechanism | API Representation | Restricted Values? | Null/Blank Handling | Multi-Select |
| Salesforce | Picklist | String value | Restricted or unrestricted | Blank = NULL in DB | Semicolon-delimited [src1] |
| SAP S/4HANA | Domain Fixed Values / Check Tables | String (domain value) | Hard: check table enforced | Empty string or initial value | Multi-row child entity |
| Oracle ERP Cloud | Lookups (Standard + Extensible) | String (lookup code) | Enforced against lookup type | NULL on non-required | Child table pattern |
| NetSuite | List/Record fields + Custom Lists | String or internalId | Enforced against list | NULL or empty string | Pipe-delimited (SOAP), array (REST) |
| D365 F&O | Enum (base + extensible) | Integer internally; String via OData | Enforced | 0 = first enum value | Bitmap or child table [src6] |
| Workday | Reference ID / Integration ID | WID or Reference_ID | Enforced | NULL not accepted for required | Not standard |
| Acumatica | Selector / Combo Box | String value | Enforced | Empty string allowed | Comma-separated |
| Business Central | Enum (AL) | Integer or String via OData | Enforced | Default value (0 or empty) | Not supported |
Null / Empty Value Handling
| System | Null Semantics | Empty String Behavior | Default Value Logic | Clearing a Field via API |
| Salesforce | Fields can be NULL; API returns null | Treated as NULL for most types | Default values on create if not specified | Send null or fieldsToNull (SOAP) |
| SAP S/4HANA | Depends on data element; many have initial values | Empty = initial value for CHAR; 0 for numeric | Data dictionary initial values | Send initial value or omit from PATCH |
| Oracle ERP Cloud | NULL on optional fields | Empty string and NULL treated differently in some contexts | Setup configuration defaults | Send null explicitly |
| NetSuite | NULL supported; API returns null | Distinct from NULL | Field configuration defaults | Send null (REST) or nullFieldList (SOAP) |
| D365 F&O | NULL for nullable types; 0 for enums/numerics | Empty string != NULL for strings | Enum defaults to 0; numerics to 0 | Send null (some fields reject it) |
| Workday | NULL not accepted for required | N/A — structured references | Business process config defaults | Omit field = leave unchanged |
| Acumatica | NULL on optional fields | Some fields treat as NULL | GI or automation defaults | Send null in REST JSON |
| Business Central | NULL on optional fields | Accepted for text fields | Table definition defaults | Send null or empty string |
Multi-Language / Locale Field Handling
| System | Translation Mechanism | API Access to Translations | Storage Model | Fallback |
| Salesforce | Translation Workbench (labels, picklist values) | Describe API returns labels per locale | Single-value fields; translated labels are metadata | Default org language |
| SAP S/4HANA | Text tables (e.g., T001T) | $expand=to_Text or language nav | Separate text table per entity | Logon language, then EN |
| Oracle ERP Cloud | MLS on seeded fields | Accept-Language header | Separate translation table per MLS entity | Base language |
| NetSuite | Multi-Language feature (field-level) | SOAP: language header | Language-specific columns on record | Default subsidiary language [src4] |
| D365 F&O | Label translations; TranslationHelper for data | Accept-Language header for enum labels | Metadata store for labels; custom for data | System language [src7] |
| Workday | Built-in multi-language | Accept-Language header | Workday-managed store | Tenant language |
| Acumatica | Locale-specific attributes (limited) | Locale setting on auth | Primarily UI labels | System locale |
| Business Central | Translation files (.xlf) | Accept-Language for UI labels | App resource files; data single-language | System language |
Character Encoding & String Limits
| System | Encoding | Max String Length | Max Long Text | Unicode | Special Character Gotchas |
| Salesforce | UTF-8 | 255 (Text) | 131,072 chars (Long Text Area) | Full (incl. 4-byte emoji) | Escape ' in SOQL; BOM in CSV causes issues |
| SAP S/4HANA | UTF-8 (OData) | CHAR: 1-1333 bytes | STRING: up to 2GB | Full (OData); legacy codepage dependent | Double ' in ABAP; URL-encode $filter |
| Oracle ERP Cloud | UTF-8 | 240 (flexfields typical) | CLOB-backed (no practical limit) | Full | Escape backslashes and quotes in JSON |
| NetSuite | UTF-8 | 300 (Free-Form Text) | 1,000,000 chars (Long Text) | Full | Double ' in SuiteQL; UTF-8 BOM recommended for CSV |
| D365 F&O | UTF-16 (internal); UTF-8 (OData) | EDT-defined (20-100 typical) | Memo: very large (theoretical) | Full | Double ' in OData $filter |
| Workday | UTF-8 | Field-dependent | Rich text supported | Full | Escape XML entities in SOAP |
| Acumatica | UTF-8 | Default 256 per DAC | Note field: large text | Full | Standard JSON escaping |
| Business Central | UTF-8 | Text: 250; Code: 20 | BigText (internal) | Full | AL filter syntax differs from OData |
Data Mapping
Cross-System Date/Time Transformation Rules
| Source System | Target System | Transformation Required | Code Pattern |
| Salesforce (UTC) | NetSuite (PST default) | Convert UTC to target user timezone | new Date(sf_datetime).toLocaleString('en-US', {timeZone: 'America/Los_Angeles'}) |
| SAP (smallest unit) | Salesforce (decimal) | Divide by 10^(TCURX decimals) | sf_amount = sap_amount / Math.pow(10, tcurx_decimals) |
| Salesforce (UTC) | D365 F&O (UTC) | No conversion needed | Direct mapping |
| NetSuite (PST) | SAP (UTC) | Convert from PST/PDT offset to UTC | Parse offset; convert to UTC |
| D365 (integer enum) | Salesforce (string picklist) | Map integer to string label | Lookup table: {0: 'No', 1: 'Yes'} |
| Salesforce (18-char ID) | NetSuite (externalId) | Store SF 18-char ID as externalId | Direct string mapping |
| SAP (text table) | Salesforce (single value) | Select text for target locale | Filter to_Text by Language eq 'EN' |
| Oracle (DFF segment) | D365 (custom field) | Map Attribute1..N to named field | Static mapping per DFF context |
Data Type Gotchas
- SAP amounts in smallest currency unit: SAP CURR data type stores amounts in the smallest currency unit (e.g., 10050 for $100.50 USD). The TCURX table defines decimals per currency (default 2). OData V4 may still deliver internal representation. Always check
sap:unit annotation. Forgetting this creates 100x overcharges. [src2, src3]
- NetSuite timezone trap: Datetimes default to PST (UTC-8) / PDT (UTC-7). If integration user's timezone preference is wrong, all datetimes are systematically shifted. Set integration user timezone to UTC. [src4]
- Salesforce 18-char vs 15-char IDs: API returns 18-character case-insensitive IDs, but formulas may use 15-character case-sensitive IDs. Always store 18-character versions. [src1]
- D365 enum integer vs string: Uses integer enums internally (
NoYes::Yes = 1) but exposes as string labels via OData. Write behavior varies per entity. [src6]
- Salesforce multi-select picklist delimiter: Values are semicolon-delimited in API but comma-separated in UI. Parsing the wrong delimiter silently corrupts data. [src1]
- Oracle DFF segment order:
Attribute1 in dev may map to a different business field than Attribute1 in production. Validate per environment.
- NetSuite currency precision: Only supports 0 or 2 decimal places. Currencies requiring 3+ decimals (BHD, Bitcoin) need workaround fields. [src8]
- Workday Reference_IDs vs WIDs: WID (UUID) is immutable; Reference_IDs can be changed by admins. Store WIDs as the stable identifier.
Error Handling & Failure Points
Common Data Type Errors
| Error Scenario | Salesforce | SAP S/4HANA | Oracle ERP Cloud | NetSuite | D365 F&O |
| Invalid date format | INVALID_TYPE_ON_FIELD | OData parse error (400) | JBO-27024 | INVALID_DATE_FORMAT | OData 400 |
| Currency mismatch | FIELD_INTEGRITY_EXCEPTION | CX_BAPI_ERROR | INVALID_CURRENCY | INVALID_CURRENCY | CurrencyCode validation error |
| Picklist/enum invalid | INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST | Check table violation (400) | Lookup validation failure | SSS_INVALID_TYPE_ARG | Enum value out of range |
| Null on required field | REQUIRED_FIELD_MISSING | mandatory field missing | JBO-27014 | SSS_MISSING_REQD_ARGUMENT | OData required field error |
| String too long | STRING_TOO_LONG | OData payload error | ORA-12899 | FIELD_VALIDATION | Value exceeds max length |
| Encoding issue | Bulk CSV: INVALID_CONTENT_TYPE if BOM | Codepage conversion error | Unicode decode error | SuiteQL parse error | OData parse error |
Failure Points in Production
- SAP currency conversion drift: Integration maps SAP amounts directly without TCURX conversion. Works for USD/EUR (2 decimals) but JPY amounts are 100x too large (0 decimals in TCURX). Fix:
always read TCURX for the transaction currency; never assume 2 decimal places. [src2, src3]
- NetSuite timezone shift on DST transition: Integration user set to PST. During March DST transition, datetimes shift by 1 hour. Fix:
set integration user timezone to UTC; parse all datetime fields with explicit offset. [src4]
- D365 enum write failures on extensible enums: Integration writes valid string label but entity rejects it expecting integer. Fix:
test both integer and string forms; prefer integer for extensible enums. [src6]
- Oracle DFF segment mismatch across environments: Segments mapped differently in dev vs production. Fix:
export DFF segment mapping from both environments and diff; include in deployment checklist.
- Salesforce multi-select picklist corruption: Writing comma-delimited instead of semicolon-delimited. No error thrown. Fix:
always use semicolon delimiter; validate against describe metadata. [src1]
Anti-Patterns
Wrong: Assuming all ERPs use UTC for datetime fields
// BAD — Treating NetSuite datetime as UTC
const order_date = new Date(netsuite_record.tranDate); // "2026-03-15T00:00:00.000-08:00"
const utc_date = order_date.toISOString(); // Wrong if not parsing offset correctly
// Sends to Salesforce as 2026-03-15T08:00:00Z — 8 hours off!
Correct: Parse timezone offset from each system's format
// GOOD — Respect the timezone offset in NetSuite's response
const ns_datetime = "2026-03-15T00:00:00.000-08:00";
const parsed = new Date(ns_datetime); // JS Date correctly handles offset
const utc_iso = parsed.toISOString(); // "2026-03-15T08:00:00.000Z" — correct UTC
// For Salesforce, send the UTC value directly
Wrong: Mapping SAP amounts directly without TCURX conversion
# BAD — Direct mapping of SAP amount to Salesforce
salesforce_amount = sap_record['NetAmount'] # 10050 (SAP smallest unit for USD)
# Salesforce receives 10050.00 instead of 100.50 — 100x overcharge!
Correct: Apply TCURX-based currency conversion
# GOOD — Convert SAP smallest-unit amount using TCURX decimal places
TCURX_DECIMALS = {'USD': 2, 'EUR': 2, 'JPY': 0, 'KWD': 3, 'BHD': 3}
currency = sap_record['TransactionCurrency']
decimals = TCURX_DECIMALS.get(currency, 2) # Default 2 if not in lookup
salesforce_amount = sap_record['NetAmount'] / (10 ** decimals)
# USD: 10050 / 100 = 100.50 (correct)
# JPY: 10050 / 1 = 10050 (correct — no decimals for yen)
Wrong: Writing D365 enums as integers without checking entity behavior
// BAD — Assuming all D365 entities accept integer enum values
const payload = { "IsActive": 1 }; // NoYes.Yes = 1
// Some OData entities reject this and require the string form
Correct: Use the OData string label format for D365 enum writes
// GOOD — Use string label format; test each entity individually
const payload = { "IsActive": "Yes" }; // OData exposes as string
// For entities requiring full qualified form:
// "IsActive": "Microsoft.Dynamics.DataEntities.NoYes'Yes'"
Common Pitfalls
- Salesforce picklist API name vs label: API returns API name, not display label. Comparing against label silently fails. Fix:
use describe metadata to build label-to-API-name map. [src1]
- SAP OData V2 vs V4 date format: V2 uses
datetime'2026-03-03T00:00:00', V4 uses 2026-03-03 or 2026-03-03T00:00:00Z. Mixing causes parse errors. Fix: check OData version per API on api.sap.com. [src2, src3]
- NetSuite internalId vs externalId: Setting currency by name (
{"currency": "USD"}) fails. NetSuite requires internalId or reference. Fix: use internalId or externalId references; cache ID mappings. [src4]
- D365 date-effective entities: Some entities use ValidFrom/ValidTo. Simple PATCH may create new effective record instead of updating. Fix:
check entity metadata for date-effective fields. [src5]
- Oracle DFF context sensitivity: Attribute segments depend on context value. Writing without correct context puts data in wrong segment. Fix:
set context segment before populating attributes.
- Workday Reference_ID instability: Reference_IDs can change. Fix:
store WID as immutable key; Reference_ID for display only.
- Acumatica Usr prefix case sensitivity: Must be exactly
Usr (capital U, lowercase sr). Other casings fail silently. Fix: always use 'Usr' prefix exactly.
Integration Pattern Decision Tree
START — Data type mismatch between Source ERP and Target ERP
├── Date/DateTime issue?
│ ├── Both systems UTC? → Direct mapping
│ ├── NetSuite involved? → Convert from user-timezone to UTC first
│ ├── Date-only? → Use YYYY-MM-DD; strip time component
│ └── Full datetime? → Preserve with timezone conversion
├── Currency amount issue?
│ ├── SAP source? → Lookup TCURX decimals; divide by 10^decimals
│ ├── Zero-decimal currency (JPY, KRW)? → Verify both systems handle correctly
│ └── Multi-currency? → Map currency code alongside amount
├── Picklist/Enum mismatch?
│ ├── String → Integer (D365)? → Build lookup table
│ └── Multi-select? → Check delimiter (SF=semicolon, NS=pipe, Acumatica=comma)
├── Custom field issue?
│ ├── Oracle target? → Map DFF segments; set context first
│ ├── Acumatica target? → Use 'Usr' prefix exactly
│ ├── Business Central? → Verify field on API page definition
│ └── Others → Use standard custom field API (SF __c, NS cust*, SAP YY1_)
└── Null handling?
├── Target rejects NULL? → Map to default value
└── Clear a field?
├── Salesforce → null in JSON or fieldsToNull (SOAP)
├── NetSuite → null (REST) or nullFieldList (SOAP)
└── D365 → null (check if nullable first)
Diagnostic Commands
# === SALESFORCE: Inspect field metadata ===
curl "https://{instance}.my.salesforce.com/services/data/v62.0/sobjects/Account/describe" \
-H "Authorization: Bearer ${SF_TOKEN}" | jq '.fields[] | {name, type, length, precision, scale, picklistValues}'
# === SAP S/4HANA: Check OData $metadata for field types ===
curl "https://{tenant}.s4hana.cloud.sap/sap/opu/odata4/sap/api_business_partner/srvd_a2x/sap/businesspartner/0001/\$metadata" \
-H "Authorization: Bearer ${SAP_TOKEN}"
# Look for: Edm.Decimal (amounts), Edm.DateTimeOffset (datetimes), sap:unit annotation
# === ORACLE ERP CLOUD: Check entity fields ===
curl "https://{instance}.fa.{dc}.oraclecloud.com/fscmRestApi/resources/latest/invoices/describe" \
-H "Authorization: Bearer ${ORACLE_TOKEN}" | jq '.Resources[].attributes[] | {name, type}'
# === NETSUITE: Inspect record metadata ===
curl "https://{account_id}.suitetalk.api.netsuite.com/services/rest/record/v1/metadata-catalog/customer" \
-H "Authorization: OAuth ..." | jq '.properties | to_entries[] | {name: .key, type: .value.type}'
# === DYNAMICS 365 F&O: Check entity metadata for enums ===
curl "https://{env}.operations.dynamics.com/data/\$metadata" \
-H "Authorization: Bearer ${D365_TOKEN}" -o metadata.xml
# Parse XML for EnumType definitions and Property types
# === CURRENCY TEST: Validate decimal handling ===
# Create test record with amount 12345 in JPY, USD, and BHD
# Verify stored value in both source and target systems
When to Use / When Not to Use
| Use When | Don't Use When | Use Instead |
| Building field-level transformation logic between ERPs | Need rate limits or API surface comparison | ERP REST API Comparison |
| Debugging data type mismatch errors | Need a complete integration playbook for specific pair | System-specific integration playbooks |
| Designing a canonical data model for multi-ERP hub | Need middleware/iPaaS selection | iPaaS comparison card |
| Validating currency handling before go-live | Need a single-system deep-dive | Single-system API capability cards |
| Training developers on cross-platform type differences | Need ERP selection guidance | ERP selection cards |
Cross-System Comparison
| Capability | Salesforce | SAP S/4HANA | Oracle ERP Cloud | NetSuite | D365 F&O | Workday | Acumatica | Business Central |
| Date format | ISO 8601 UTC | ISO 8601 UTC (V4) | ISO 8601 w/ offset | ISO 8601 w/ PST | ISO 8601 UTC | ISO 8601 w/ offset | ISO 8601 UTC | ISO 8601 UTC |
| Currency storage | Decimal | Smallest unit | Decimal | Decimal | Decimal | Decimal | Decimal | Decimal |
| Currency precision | Configurable | TCURX table | Configurable | 0 or 2 only | Configurable | Per currency | Configurable | Configurable |
| Custom field access | Full (describe) | If published | Limited (DFF) | Full (metadata) | Via data entity | Limited (RaaS) | Full (REST) | Publisher ext |
| Enum type | String | String (domain) | String (lookup) | String or ID | Integer | Reference ID | String | Integer |
| Multi-language | Metadata only | Text tables | MLS | Field-level | Custom tables | Built-in | Limited | Label files |
| Null handling | NULL + fieldsToNull | Initial values | NULL explicit | NULL + nullFieldList | NULL or 0 | Omit = unchanged | NULL explicit | NULL or empty |
| Unicode | Full (UTF-8) | Full (UTF-8 OData) | Full (UTF-8) | Full (UTF-8) | Full (UTF-16) | Full (UTF-8) | Full (UTF-8) | Full (UTF-8) |
| ID format | 18-char alphanum | 10-digit numeric | Numeric | Numeric (internalId) | Alphanumeric | UUID (WID) | Integer | UUID (systemId) |
| Boolean | true/false | true/false | true/false | true/false or T/F | NoYes (0/1) | true/false | true/false | true/false |
Important Caveats
- Version-dependent behavior: Data type handling can change between releases. SAP OData V2 and V4 handle dates and currency amounts differently. Always verify against your specific system version.
- Edition-specific custom field limits: Salesforce Professional Edition cannot create certain custom field types. NetSuite Standard tier has fewer options. Verify for your edition.
- Sandbox configuration drift: Custom fields, flexfield segments, enum extensions, and translations may differ between sandbox and production. Always validate against production before go-live.
- Cloud deployments only: On-premise variants (SAP ECC, Oracle E-Business Suite, Dynamics AX/GP) may have different representations, encodings, and custom field mechanisms.
- Currency handling is highest-risk: SAP's smallest-unit currency storage is the single most common source of financial data corruption in cross-ERP integrations. Always implement and test TCURX conversion.
Related Units