199 answers

ERP Help

The error your ERP just threw, the function you need to run, the customisation you are stuck on. Straight answers for Infor SyteLine, LN, M3, NetSuite, Oracle EBS, JD Edwards, Fusion, SAP, Dynamics, Epicor and more, from engineers who work in these systems.

Infor SyteLine / CSI

Error fix

Fixing SyteLine's 'Object reference not set to an instance of an object' error

SyteLine error object reference not set to an instance of an object

This is a generic .NET NullReferenceException surfacing through the SyteLine IDO Runtime, not a SyteLine-specific error code. It almost always means a form, script or IDO method referenced a field, row or object that came back null, usually after a customization, a missing related record, or a view/IDO method call before the form finished loading. Turn on detailed client logging and check the most recent customization or form event first.

Error fix

Diagnosing and fixing SyteLine session timeout errors

SyteLine session has timed out please log in again error

SyteLine session timeouts come from one of three independent layers: the IDO Data Service session timeout on the app server, the IIS/application pool idle timeout for the web (Mongoose Web) client, or a load balancer/proxy idle timeout in front of a CloudSuite hosted environment. Fixing the wrong layer is the most common mistake - you need to identify which layer is actually expiring the session before changing anything.

Error fix

Resolving SyteLine multi-site replication conflict errors

SyteLine replication conflict error row was already changed

A replication conflict in SyteLine's multi-site architecture means the same record (commonly an item, customer, or BOM) was changed independently at two sites between replication cycles, and the replication engine could not automatically merge the two versions. Check the replication conflict log first to see which record and which fields collided, then decide which site's version should win before resuming the queue.

Error fix

Troubleshooting SyteLine MRP and APS regeneration that fails or hangs

SyteLine MRP regeneration fails to complete

A SyteLine MRP or APS run that fails to complete, hangs indefinitely, or errors partway through is most often caused by data integrity problems (a BOM loop, an item with an invalid lead time or missing routing), a scheduling engine (APS) process that is stuck or resource-starved, or a concurrent MRP run conflict. Check the MRP/APS log first for the specific item or job it stopped on before assuming it is a system capacity issue.

Error fix

Fixing SyteLine's 'transaction out of balance' GL posting error

SyteLine GL posting error transaction out of balance

This posting error means SyteLine tried to create a general ledger journal entry where total debits do not equal total credits, which the GL will not accept. The most frequent causes are a missing or misconfigured account in the automatic account determination setup (COA mapping), currency rounding on multi-currency transactions, or a source transaction (inventory, job cost, AP/AR) that only partially calculated its cost or tax components before posting.

Error fix

SyteLine error: this row has been modified by another user since you began editing it

This row has been modified by another user since you began editing it

This is SyteLine's IDO optimistic concurrency check. It fires when the row's timestamp column (usually ts_prefix or a similar rowversion field) on the database no longer matches the value the client loaded, meaning another session, a background job, or an integration already saved a change. Refresh the record and reapply your edit; if it recurs constantly on one record, look for a duplicate integration process or a stuck lock rather than user contention.

Error fix

SyteLine error: invalid site or item not valid at this site

SyteLine invalid site error item not valid at this site

SyteLine is a multi-site system where items, warehouses, and most master data are site-specific by design. This error means either the item has never been extended to the site you are transacting in, your user login does not have access to that site, or the current site context on the form does not match the site of the referenced record. Add the item to the site via Item Sites, or correct the user's site security, and the error clears.

Error fix

SyteLine error: no cost record exists for this item at this site

SyteLine no standard cost exists for this item error

SyteLine will not post an inventory, job, or purchasing transaction that has no valid standard (or average) cost record for the item at that site and cost type, because the transaction needs a cost to value the GL entry. Run a cost rollup or manually enter the item's standard cost in Item Costs, make sure the cost is effective-dated to cover the transaction date, then reprocess.

Error fix

SyteLine EDI or BOD inbound document fails to create a sales order

SyteLine EDI order import fails to create sales order BOD processing error

An inbound EDI 850 or ION SyncSalesOrder / ProcessSalesOrder BOD that does not turn into a SyteLine order almost always fails validation before it ever reaches order entry logic - most often a customer, ship-to, or item cross-reference that the mapping expects but SyteLine does not have on file. Check the EDI translator's error log or the ION BOD document inbox first; the rejection reason is usually recorded there, not just a generic SyteLine error.

Error fix

SyteLine error: an error has occurred during report processing

An error has occurred during report processing SyteLine SSRS report

This generic SSRS error in SyteLine usually comes from one of three sources: the client cannot reach the configured report server URL, the report's data source credentials or connection string are wrong, or the report definition itself has a parameter or dataset problem. Check the report server URL setting in SyteLine first, then confirm the report is actually deployed to that server, then look at the SSRS server's own execution log for the real underlying error.

How-to

How to Run a Cost Rollup in SyteLine

Run Item Cost Rollup from Product Definition > Costing > Cost Rollup, select the site and item range, run it in Simulate mode first to review variances, then run it live to post new standard costs to Item records and the Costed Bill of Material.

How-to

How to Close a Job Order in SyteLine

Close a job order from Production > Job Orders once every routing operation is reported complete and the finished quantity has been received, then run Close Jobs to post the remaining WIP balance to variance and lock the job from further transactions.

How-to

How to Run a Cycle Count in SyteLine

Cycle counting in SyteLine runs through Inventory > Cycle Count: generate a count list by ABC class or location, print or enter tags, key the counted quantities into Cycle Count Entry, then review the variance report before posting the count to update on-hand quantity.

How-to

SyteLine Customer Order to Invoice: Step by Step

A SyteLine customer order flows from Order Entry through pick, pack, and Customer Shipment, then to invoicing, either through the Auto Invoice batch utility or manual Invoice Entry, posting revenue and relieving inventory once the shipment is confirmed.

How-to

How to Run MRP in SyteLine

MRP in SyteLine runs from Planning > MRP Processing as either a full Regenerative run or a Net Change run against demand from customer orders, forecasts, and safety stock; results appear as planned orders and Action Messages in the Planner Workbench.

How-to

How to Change an Item's Standard Cost in SyteLine

You can edit an item's standard cost fields directly on the Items form, or let Cost Rollup calculate it from the BOM and routing. Either way, the new cost only affects future transactions until you run Recost Inventory, which revalues on-hand quantity and posts the difference to the standard cost variance account in GL.

How-to

How to Set Up Lot and Serial Number Tracking in SyteLine

Lot and serial tracking is turned on per item on the Items form, with a tracking type of None, Lot, or Serial. Once enabled, every receipt, job move, and shipment transaction for that item prompts for a lot or serial number assignment, and SyteLine keeps a full genealogy you can trace forward to customer shipments or backward to the receiving vendor.

How-to

How to Handle Landed Cost and Voucher a PO Receipt in SyteLine

Landed cost charges such as freight, duty, and brokerage are added against the PO or the receipt, allocated across the received line items by value or quantity, and rolled into the item's received cost before it is vouchered. Vouchering itself is the 3-way match between PO price, receipt quantity, and vendor invoice, and mismatches beyond your tolerance percentage get held for review instead of posting automatically.

How-to

How to Release a Customer Order from Credit Hold in SyteLine

A customer order goes on credit hold when the customer's exposure, whether AR balance, open order value, or days past due, exceeds the limit set on the Customers form. Releasing it is a deliberate override on the order, usually restricted to users with credit management authority, and the real fix is reviewing whether the limit, the hold reason, or the customer's payment behavior needs attention.

How-to

How to Receive a Purchase Order and Return Goods to a Vendor in SyteLine

Receiving happens in PO Receipts against open PO lines, updating on-hand quantity and open PO balance. Returning goods is a separate return-to-vendor transaction that reverses the receipt, references the original PO and receipt, and should tie to an AP debit memo so the vendor invoice and payment reflect the returned quantity.

Advanced

How to Add Custom Business Logic to a SyteLine IDO with an Extension Class

SyteLine lets you add validation, defaulting, and side-effect logic to any IDO without touching Infor's generated code, by writing an IDO extension class in C# and hooking into the object's Before/After events. The extension assembly is compiled, deployed next to the IDO Runtime, and picked up once the runtime cache is refreshed.

Advanced

How the SyteLine Event System Works for Workflow Notifications

SyteLine's Event Manager lets administrators subscribe to IDO-level events, such as a purchase order being released or a customer credit hold being set, and fire an email, a Mongoose script, or a workflow action without writing an IDO extension. Cloud tenants can extend the same triggers into ION Workflow for multi-step, cross-application approval processes.

Advanced

How to Tune APS Finite Scheduling Performance in SyteLine

A slow APS run in SyteLine is almost always caused by an oversized planning horizon, too many resources marked as constrained, or an unindexed staging table, rather than the scheduling algorithm itself. Trimming the horizon, scoping constrained resource groups, and running incremental instead of full regenerative schedules typically cuts run time dramatically.

Advanced

How to Set Up Multi-Site Configuration in SyteLine

SyteLine supports multiple manufacturing or distribution sites either as separate Site records within one shared database, or as fully separate databases linked through intersite transactions and, in CloudSuite Industrial, ION. Getting the site model right up front, shared versus separate master data, intersite transfer setup, avoids a painful data migration later.

Advanced

How to Improve SQL Server Performance for a Slow SyteLine ERP System

Most SyteLine performance complaints trace back to a handful of SQL Server issues: stale statistics, missing indexes on high-churn IDO tables, blocking caused by the default isolation level, and IDO Runtime connection pool exhaustion. Working through those systematically, with DMV evidence, resolves the majority of slow system tickets faster than guessing at application-layer causes.

Advanced

How to Debug a SyteLine IDO Extension Class in Visual Studio

SyteLine IDO extension classes run inside the server-side IDO runtime, not inside Visual Studio, so breakpoints only hit once you attach the debugger to that process and deploy matching PDB files. Attach to IDORuntime.exe on classic installs or to the w3wp.exe worker process on IIS-hosted CSI, build in Debug configuration, and copy the DLL and PDB together before setting breakpoints.

Advanced

How to Add a Custom Method to a SyteLine IDO in C#

Custom IDO methods let you expose new server-side business logic - beyond the standard Load, Update, and Delete - as a named, callable operation from the SyteLine client, a script, or an external integration. You declare the method and its parameters on the IDO Collection, then implement it in an extension class that handles invoke calls for that method name.

Advanced

How to Build SQL Views for Custom SyteLine Reporting

Reports should read from purpose-built SQL views, not directly from SyteLine's core transactional tables, so an Infor patch cannot silently break them and heavy report queries do not lock rows the ERP itself needs. Put custom views in their own schema or under a clear naming convention, build them on stable base tables, and grant reporting tools read access to the views only.

Advanced

How to Call SyteLine IDOs from an External Application

SyteLine exposes its IDO layer as a SOAP web service, commonly published through an IDORequestHandler endpoint, so an external .NET application, middleware platform, or script can Load, Update, Delete, and Invoke methods on the same IDOs the SyteLine client itself uses. You call it like any SOAP service: reference the WSDL, authenticate, and pass the IDO name, method, and parameters in the request.

Advanced

How to Schedule a Background Task in SyteLine Task Manager

SyteLine's Task Manager lets an administrator schedule recurring background work - an MRP or APS regeneration, a report run, a custom IDO method, or an external program - without a user triggering it manually from the client. You define a task with what to run and on what recurrence, and the Task Manager background service picks it up and executes it at the scheduled time.

Infor LN / Baan

Error fix

Infor LN bshell Process Stuck at 100% CPU: How to Diagnose and Fix It

infor ln bshell process using 100% cpu

A bshell process pinned at 100% CPU on the Infor LN application server almost always means one session is stuck in a 4GL loop, scanning an unindexed table, or waiting on a database lock. End the session from the Sessions Monitor first, then kill the OS process only if that fails, and check for a blocking database transaction before assuming it is a bug.

Error fix

Infor LN Not Authorized to Run This Session: How to Fix It

infor ln you are not authorized to run this session

Infor LN refuses to open a session with a not authorized message when the logged-in user's assigned role does not include that session, or when the session is blocked for the company they are logged into. Grant the session through Common > Authorization Management > Roles, or check the user's role and company context, and the session opens on retry. In most cases this is a permissions configuration issue, not a bug.

Error fix

Infor LN DAL Out of Sync After a Custom Field: Cause and Fix

infor ln dal out of sync error after adding custom field

Infor LN throws a DAL, or table, out of sync error, or simply drops a new custom field silently, when a table's dictionary definition is changed but the generated DAL and dependent forms are not regenerated afterward. Running the standard sequence, table compile, DAL generation, then session/form compile, in Tools > Development after every dictionary change resolves it. Skipping any one of the three steps is what causes the mismatch.

Error fix

Infor LN Jobs Stuck in Active or Waiting: Fix the Job Daemon

infor ln jobs stuck in active status job daemon

Infor LN background jobs, reports, batch processes and print jobs, get stuck in Active or Waiting status when the job daemon on the enterprise server has stopped or lost its connection, or when a prior job crashed without releasing its status. Restart the job daemon and reset the stuck job's status through the Jobs session, and the queue resumes. A daemon that keeps stopping usually points to a memory, license or database connectivity problem on the server.

Error fix

Infor LN Reports Stuck in the Print Queue: Device and Spooler Fix

infor ln report stuck in print queue device offline

Infor LN reports and forms stay queued and never reach the printer when the target device definition points to a printer that is offline, or the print listener on the print server has stopped. Check the device's status in Common > Printing > Devices, confirm the underlying OS printer is reachable, and restart the print listener if jobs remain queued after the printer itself is fixed. Most cases trace back to a genuinely offline printer, not an LN bug.

Error fix

Infor LN: "Record is locked by another user" error

Record is locked by another user error in Infor LN

This error means another LN session, interactive or batch, is holding an update lock on the same table row you are trying to change. Find the locking user or session in Active Sessions, confirm it is stale rather than genuinely running, and either wait or terminate it before you retry.

Error fix

Infor LN Studio: compile errors when building DAL/4GL code

Compile error in Infor LN Studio when building a DAL or 4GL script

A compile error in LN Studio usually traces back to a missing or mismatched package reference, a real syntax error in the DAL or 4GL source, or stale generated metadata that only a full rebuild clears. Read the first error in the log, not the last, since later errors are often cascades from one root cause.

Error fix

Infor LN: finalize run fails or gets stuck

Finalize run fails or gets stuck in Infor LN (Cost Price Calculation, Sales Invoicing, Statistics)

Finalize sessions such as Cost Price Calculation, Sales Invoicing, and Period-End Statistics run as a broadly locked, largely exclusive batch step, so they most often fail because another user has the module open, a prior finalize run did not close cleanly, or a specific record has bad master data. Read the finalize log for the exact record or reason code, not just the failure message.

Error fix

Infor LN: BOD mapping errors when publishing to ION

No mapping found error when publishing a BOD from Infor LN to ION

This error means the outbound Business Object Document from LN could not translate a field, code, or reference value into the ION-standard BOD schema, most often a missing code list mapping or an unmapped custom field, not a bug in ION itself. Fix the mapping on the correct side and reprocess from ION Desk rather than resending from LN.

How-to

How to publish a BOD from Infor LN to Infor ION

Publishing a Business Object Document from Infor LN means flagging the relevant table or session for BOD publish, confirming LN's connection point to Infor ION is active, and building the document flow in ION Desk so changes like a new sales order are broadcast as a standard OAGIS-style XML message that other applications can subscribe to.

How-to

Baan IV to Infor LN migration checklist

Moving from Baan IV to Infor LN is a re-implementation, not an in-place upgrade, because the two products differ in data model, session technology and, for LN Enterprise Edition, the underlying runtime. The checklist centers on inventorying customizations, converting master data, rebuilding logic rather than porting it, and running a real parallel test before cutover.

How-to

How to process a sales order to invoice in Infor LN

In Infor LN a sales order moves from order entry to cash through four linked steps: create and approve the Sales Orders session, release the order lines to Warehousing so a warehouse order is generated, confirm the outbound shipment, and then run the invoicing session that composes and posts the sales invoice to Financials. Each step hands off through an integration document, so a stuck invoice almost always traces back to a missing or unconfirmed step earlier in the chain.

How-to

How to set up and run a project in Infor LN PCS

Infor LN's Project Control System (PCS) manages engineer-to-order and project-based work as a structured hierarchy: a project header, a work breakdown structure (WBS) of activities, a budget or estimate against that structure, and actual cost and progress booked back against the same elements. Getting the WBS and budget structure right before any transaction posts is what makes project cost reporting usable later.

How-to

How to process inbound and outbound warehousing orders in Infor LN

Infor LN Warehousing splits every physical movement into inbound (goods arriving, mainly from purchase orders) and outbound (goods leaving, mainly for sales orders), each driven by its own warehouse order type. Inbound runs through intake, inspection if required, and put-away; outbound runs through order release, picking, packing and shipment confirmation, with each stage updating the order status other modules watch.

How-to

How to calculate item cost prices in Infor LN

Infor LN calculates an item's cost price by rolling up material, labor, machine, subcontract and overhead costs defined against cost components, using the item's bill of material and routing as the calculation base for manufactured items and purchase price for bought items. The calculation can run in simulation mode to preview the result or in update mode to actually change the item's standard cost, which then drives inventory valuation and variance reporting going forward.

How-to

How to close a financial period in Infor LN

Closing a period in Infor LN is not a single click; it requires clearing every module's outstanding integration transactions into Financials first, reconciling each subledger (AR, AP, inventory, WIP) to the general ledger, and only then closing the period through Periods and Fiscal Years, which blocks further posting to it. Skipping the reconciliation step and closing early is what causes stuck or orphaned transactions that have to be reopened and reworked later.

Advanced

How to extend business logic in Infor LN with DAL2

DAL2 lets you add custom validation, defaulting and calculation logic to Infor LN Enterprise Edition tables by writing a Java business logic handler class and registering it against a table event, without editing the standard DAL. Because the logic sits in your own package rather than inside Infor's base code, it survives upgrades that would otherwise overwrite a direct DAL change.

Advanced

How to create a custom session in Infor LN Studio

Infor LN Studio's session designer generates a new maintenance, overview or detail session from a table definition, then lets you arrange fields, attach DAL2 validation, and wire menu access, all inside a custom package so the session survives upgrades. Building on a custom table gives the lowest upgrade risk; extending a standard table needs more care and re-testing after every release.

Advanced

How to diagnose and fix a slow Infor LN session

A slow Infor LN session is usually caused by an unindexed or overly broad database query, unarchived data bloating a transaction table, or resource pressure on the Java application tier, and occasionally by a recently added custom DAL2 handler. The fix starts with isolating which tier the delay is actually in rather than guessing at a solution.

Infor M3

Error fix

M3 API Error: Record already exist

M3 API error: Record already exist

Record already exist means the MI Add transaction you called is trying to insert a key that is already present in the target M3 table, most often because a prior call succeeded and was retried, or because the key fields you built do not match what you think they match. Read the errorField and errorFieldGroup attributes on the response to see exactly which key field M3 flagged, then either switch to the matching Chg (change) transaction or fix the key construction in the caller.

Error fix

M3 API Error: Not Authorized to Program

M3 API SOAP call fails with Not authorized to program

Not authorized to program (or the equivalent transaction-level authorization error) means the M3 user ID the integration authenticates as can log in fine but has not been granted access to that specific MI program, transaction, or company/division through its authority group. Fixing it means adding the program/transaction to the integration user's authority group in M3, not changing anything in the calling code.

How-to

How to Build a Grid Mapping in M3 Enterprise Collaborator (MEC)

M3 Enterprise Collaborator (MEC) moves data between an external format (EDI, flat file, XML) and M3's own API by chaining a collection step (getting the document in), a grid mapping step (field-level transformation from source structure to M3 API call structure), and a delivery step (executing the mapped MI transaction). Building a new mapping means defining the source document structure, building the grid that maps each source field to its M3 API field, and testing with representative sample documents before going live.

How-to

How to Add a Personalization Script to an M3 H5 Panel

M3 H5 lets an administrator attach a JavaScript personalization script to a specific panel of a specific program, using the MForms client API to read fields, react to panel and field events, and adjust the UI (hide fields, set defaults, validate input) without modifying the underlying M3 program. Scripts are written and attached through Personalization mode in H5, saved against the panel/program combination, and deployed to the users or roles who should see the behavior.

How-to

How to Create a New Item in M3 (MMS001)

A new item in M3 is created in two stages: item basic data in MMS001 (Item. Open), which defines company-wide attributes such as description, item group and unit of measure, then facility-level data in MMS002 (Item/Facility. Connect), which attaches the item to a specific warehouse or plant with purchasing, planning and costing parameters. An item is not usable for orders, purchasing or MRP until both stages are complete.

How-to

How to Enter a Customer Order in M3 (OIS100)

OIS100 (Customer Order. Open) is the primary M3 program for entering and maintaining customer orders, built as a header-then-line workflow: you first create the order header with customer, order type and delivery terms, then add order lines that each carry their own item, quantity, price and delivery date defaulted from customer and item agreements.

How-to

How to Run Period End Close in M3

M3 period end close is not a single button - it is a sequence: close sub-ledger activity in inventory, purchasing and sales first, reconcile and post any pending vouchers, then close the accounting period in the financials basic data so no further postings can hit it without explicit reopening. Doing the steps out of order is the most common reason a company has to reopen a period after close.

How-to

How to Attach and View Documents in M3 with IDM

Infor Document Management (IDM) attaches to M3 through key-based document classes: each document is filed against a document class that maps to a specific M3 program and key fields (order number, item number, customer number), so the paperclip or document icon on that M3 panel shows only documents whose stored key values match the record you are viewing.

Advanced

Paging M3 API MI List Transactions Past the Default Record Limit

M3 List transactions (the read/browse transaction most MI programs expose, such as CRS610MI.LstByNumber or OIS100MI.LstOrderHead) cap the rows returned per call using the MaxReturnedRecords input field, and by default many clients leave it low or unset, which looks like the API silently truncating results. Set MaxReturnedRecords explicitly, then loop the call using the last key values from the previous page as the starting position until fewer rows than the limit come back.

Advanced

How to Call M3 API (MI Programs) Through ION API

Calling M3 from an external system today almost always means going through ION API rather than the older direct MvxAPI SOAP endpoint: you create an ION API authorized app or service account in the ION API portal, download its .ionapi credential file, obtain an OAuth 2.0 access token, and call the M3 MI program transaction through the m3api-rest execute endpoint with that token.

Infor ION / OS

Error fix

Fix a 401 Unauthorized error from Infor ION API

infor ion api 401 unauthorized

A 401 from ION API almost always means the credentials in the .ionapi file no longer match what ION API Gateway expects - not that the password is simply wrong. Check whether the Authorized App or service account behind the file was revoked, regenerated, expired, or issued for a different tenant, then re-test with a direct OAuth2 client_credentials call before touching any calling code.

Error fix

Diagnose and fix a failed BOD document flow in ION Desk

ion document flow failed error in ion desk

A Document Flow showing Failed in ION Desk means a BOD (Business Object Document) stopped either at schema validation, at the mapping step, or at the target application. Open the failed instance's detail to see the exact failing element, fix the source data or mapping, then use Resubmit rather than re-triggering the original transaction to avoid duplicates.

Error fix

Fix a Ming.le homepage widget that will not load

infor ming.le widget not loading blank

A blank or endlessly spinning Ming.le widget is usually a permissions, session, or backend availability problem, not a broken widget itself. Confirm the issue is widget-specific, check the user's Security Group access to the underlying app, and look at the widget's network calls in browser dev tools to see whether it is failing with 401/403 or simply timing out against a down service.

How-to

How to query Infor Data Lake with Compass SQL

Compass is the SQL query layer in Infor OS for querying Infor Data Lake, where flattened copies of BODs published over ION are stored by Noun and Verb. Open a Compass SQL Workbench tab, browse the schema for the correct table, and run a filtered SELECT rather than pulling the full history, since Data Lake tables can hold years of append-only data.

How-to

Connect a Birst Space to Infor Data Lake and build a report

Birst is Infor's embedded BI layer, and the recommended way to report on live Data Lake data is a Live Access source inside a Birst Space rather than a static upload. Build the logical model over a filtered set of tables, apply row-level security, and publish the dashboard to a Ming.le homepage so users reach it without leaving Infor OS.

Oracle NetSuite

Error fix

Fix NetSuite SSS_USAGE_LIMIT_EXCEEDED Error

SSS_USAGE_LIMIT_EXCEEDED NetSuite error

SSS_USAGE_LIMIT_EXCEEDED fires when a SuiteScript execution consumes all the governance units (usage points) allotted to its script type before it finishes. Fix it by checking runtime.getCurrentScript().getRemainingUsage() before expensive calls, yielding or rescheduling in Scheduled scripts, and moving heavy record-count work into Map/Reduce, which yields automatically across stages.

Error fix

Fix NetSuite INVALID_FLD_VALUE Error

NetSuite INVALID_FLD_VALUE error

INVALID_FLD_VALUE means NetSuite rejected a value you tried to set on a field because it does not match the field's expected type, list option, or reference record. Fix it by confirming the internal ID or text value actually exists on that field's source list and matches the field's value type (text versus list versus record reference) before setting it.

Error fix

Fix NetSuite SSS_MISSING_REQD_ARGUMENT Error

SSS_MISSING_REQD_ARGUMENT NetSuite error

SSS_MISSING_REQD_ARGUMENT means a NetSuite API call, most often record.create(), record.load(), or search.create(), was called without a parameter that method requires, such as type or id. Fix it by checking the object literal you passed against the current SuiteScript 2.x API signature and confirming no required key is undefined at runtime.

Error fix

Fix NetSuite RCRD_HAS_BEEN_CHANGED Error

The record you are trying to edit has been changed by another user NetSuite

RCRD_HAS_BEEN_CHANGED, shown to users as a message that the record was changed by another user or in another window, fires when NetSuite's optimistic concurrency check detects that the record's last-modified stamp changed between when it was loaded and when the save was submitted. Fix it by identifying the concurrent writer, whether a user, a workflow, or a script, and serializing the conflicting updates instead of both racing to save the same record.

Error fix

Fix NetSuite INSUFFICIENT_PERMISSION Error

NetSuite INSUFFICIENT_PERMISSION error

INSUFFICIENT_PERMISSION means the role executing the request, whether a logged-in user or the role behind a script deployment, lacks a specific permission needed for the record type, transaction type, or subsidiary being accessed. Fix it by checking the role's permission list under Setup > Users/Roles > Manage Roles against the exact record and level (View, Create, Edit, or Full) the operation requires.

Error fix

Fix NetSuite SSS_REQUEST_TIME_EXCEEDED Error

SSS_REQUEST_TIME_EXCEEDED NetSuite error

SSS_REQUEST_TIME_EXCEEDED fires when a synchronous request, most often a Suitelet page render, a RESTlet call, or a Client Script action, runs past the maximum wall-clock time NetSuite allows for that request type, independent of how many governance units the script had left. Fix it by moving long-running work out of the synchronous request path into a Map/Reduce or Scheduled Script and having the UI or integration poll for completion instead of waiting on one call.

Error fix

Fix NetSuite CANNOT_CONVERT Error

NetSuite CANNOT_CONVERT error SuiteScript

CANNOT_CONVERT is thrown when SuiteScript tries to coerce a value into a data type the target field or API call does not accept, most often a text string passed to a date or numeric field, or a value passed to N/format.parse() with a type parameter that does not match the string's actual format. Fix it by matching the value's JavaScript type and format string exactly to what the field or format.parse() call expects before passing it in.

Error fix

Fix NetSuite SSS_INVALID_SUBLIST_OPERATION Error

SSS_INVALID_SUBLIST_OPERATION NetSuite error

SSS_INVALID_SUBLIST_OPERATION fires when a SuiteScript sublist line API, such as selectLine, commitLine, getCurrentSublistValue, or insertLine, is called in a context that does not support it, most often mixing dynamic-mode line APIs with a record loaded in standard mode, or reading a current sublist value before a line has been selected. Fix it by loading the record with isDynamic set consistently with the API style you use, and always calling selectLine or selectNewLine before any getCurrentSublistValue or setCurrentSublistValue call.

Error fix

Fix NetSuite INVALID_KEY_OR_REF Error

NetSuite INVALID_KEY_OR_REF error

INVALID_KEY_OR_REF fires when NetSuite cannot resolve a key used to reference another record, most commonly a parent record id on record.create's initial defaultValues, a joined internal id in a saved search filter, or a foreign key style reference in a CSV import mapping, because that id does not exist, is inactive, or is not visible in the current role or subsidiary context. Fix it by confirming the referenced internal id actually exists and is accessible before the reference is used, rather than assuming a previously valid id is still good.

Error fix

Fix NetSuite SSS_REQUEST_LIMIT_EXCEEDED Error

SSS_REQUEST_LIMIT_EXCEEDED NetSuite error

SSS_REQUEST_LIMIT_EXCEEDED fires when the number of concurrent inbound requests, typically SuiteTalk web services or RESTlet calls, against an account exceeds the concurrency limit allowed for that account's service tier, independent of any single script's governance units or run time. Fix it by serializing or queuing integration calls, adding retry with backoff on the caller side, and consolidating many small calls into fewer bulk operations.

How-to

How to use formula fields in a NetSuite saved search

In the saved search Results tab, add a column, set Field to "Formula (Text)", "Formula (Numeric)", "Formula (Date)" or "Formula (Currency)", then type an Oracle SQL expression into the Formula box using curly braces around field IDs, e.g. {trandate} or {item.custitem_weight}. Formula fields can also go on the Criteria tab so you can filter on the calculated value itself.

How-to

How to write and run SuiteQL queries in NetSuite

SuiteQL is NetSuite's read-only SQL dialect over the underlying record tables, run either interactively from Analytics > SuiteQL Query Tool (or the older /app/suiteanalytics query page), through REST at /services/rest/query/v1/suiteql, or programmatically via the N/query module in SuiteScript 2.x. It supports standard SELECT, JOIN, WHERE, GROUP BY and window functions against table names that mostly match record type IDs (transaction, transactionline, item, customer).

How-to

How to build a workflow in NetSuite with SuiteFlow

Go to Customization > Workflow > Workflows > New, pick the record type and select Server, Client, or both as the trigger context, then build states and transitions on the workflow diagram, attaching actions (Set Field Value, Send Email, Create Record, Custom Action Script) to each state or transition. Release the workflow (top right dropdown, Testing to Released) once validated, since a workflow left in Testing only fires for the workflow owner.

How-to

How to create an assembly build or work order in NetSuite

For simple manufacturing with no routing or WIP tracking, use Transactions > Manufacturing > Build Assemblies (or Enter Assembly Build), select the assembly item, quantity, and location, and NetSuite consumes the BOM components and receives the finished item in one transaction. For multi-step production needing routing, WIP accounting or partial completions, create a Work Order (Transactions > Manufacturing > Work Orders) and process it through Work Order Completion, which requires the Advanced Manufacturing feature (SuiteSuccess Manufacturing or WMS add-on) or the Manufacturing bundle.

How-to

How to run intercompany transactions in NetSuite (OneWorld)

Enable the Intercompany Framework and Automated Intercompany Management features (Setup > Company > Enable Features > Company), then create an Intercompany Sales Order or Purchase Order between two subsidiaries in the same NetSuite account; NetSuite auto-generates the matching intercompany transaction on the counterparty subsidiary and posts the elimination journal entries during period close if Advanced Intercompany Journal Entries is also enabled.

How-to

How to Customize NetSuite Advanced PDF/HTML Templates

NetSuite Advanced PDF/HTML templates use FreeMarker markup inside an XML-for-PDF or HTML wrapper, edited under Customization > Forms > Advanced PDF/HTML Templates. You reference transaction body fields with ${record.fieldid}, loop line items with a list directive over record.item, and control layout with standard XSL-FO style tags in the barcode/pdf namespace.

How-to

How to Import CSV Data Into NetSuite Reliably

NetSuite's CSV Import Assistant, under Setup > Import/Export > Import CSV Records, maps spreadsheet columns to record fields, matches existing records by internal ID or a chosen field, and can create, update, or upsert in a single run. The most reliable imports use a saved import map, reference records by internal ID where possible, and stage the file with a header row that exactly matches expected column types.

How-to

How to Set Up Revenue Recognition With NetSuite ARM

NetSuite Advanced Revenue Management (ARM) recognizes revenue on a schedule independent of invoicing by generating a Revenue Element from each transaction line, applying a Revenue Recognition Rule to determine timing, and optionally allocating revenue across performance obligations using Standalone Selling Price (SSP). Setup requires enabling the ARM feature, defining recognition rules, and mapping item revenue categories before transactions start generating revenue plans.

How-to

How to Set Up Approval Routing in NetSuite

NetSuite offers two approval routing paths: native transaction approval (Enable Features > Transaction approvals, then per-employee Approval Limit and Purchase Approval Limit fields) for simple single-approver chains, and SuiteFlow (Customization > Workflow > Workflows) for multi-step, condition-based, or parallel approval routing with escalation and notification logic.

How-to

How to Build NetSuite Dashboards and KPI Scorecards

NetSuite dashboards are assembled from portlets (KPI, KPI Scorecard, List, Trend Graph, Report Snapshot) added via Personalize Dashboard, where KPI portlets show a single metric with a comparison period and KPI Scorecards show a table of multiple KPIs across time periods and can be published to a role for standardized reporting.

Advanced

Avoiding governance limit errors in NetSuite Map/Reduce scripts

A NetSuite Map/Reduce script gives each map or reduce invocation of a key its own fresh governance allotment instead of sharing one pool across the whole run, so most SSS_USAGE_LIMIT_EXCEEDED failures come from a single key doing too much work, not from the total record count. Fix it by moving heavy logic out of getInputData, keeping map and reduce functions idempotent and cheap per key, and checking runtime.getCurrentScript().getRemainingUsage() before expensive calls.

Advanced

Authenticating NetSuite RESTlets with OAuth 2.0 and Token-Based Authentication

NetSuite RESTlets can be called with either Token-Based Authentication (TBA, OAuth 1.0a signed requests) or OAuth 2.0, and both require a Setup > Integrations > Manage Integrations record before any token is issued. Machine-to-machine OAuth 2.0 uses a client credentials grant with a JWT bearer assertion signed by a certificate; TBA uses a consumer key/secret plus a per-user access token signed with HMAC-SHA256.

Advanced

Working with NetSuite's SuiteTalk REST Web Services API

SuiteTalk REST exposes NetSuite records at https://ACCOUNTID.suitetalk.api.netsuite.com/services/rest/record/v1/{recordType}/{id} and ad hoc SQL-like queries at /services/rest/query/v1/suiteql, both authenticated with TBA or OAuth 2.0. It returns JSON, paginates large result sets with limit/offset and a hasMore flag, and needs expandSubResources or a specific fields query to pull sublist and related data efficiently.

Advanced

Setting up NetSuite SuiteAnalytics Connect for ODBC and JDBC access

SuiteAnalytics Connect is a separately licensed feature that exposes a read-only relational view of NetSuite data over ODBC or JDBC for BI tools like Power BI, Tableau and Excel. Setup means enabling the feature, downloading the driver, configuring a DSN against the account's connect host, and using a role with the SuiteAnalytics Connect permission.

Advanced

Managing NetSuite sandbox refresh alongside SDF deployments

A NetSuite sandbox refresh clones production data and customization state into the sandbox account, which means any sandbox-only changes not captured in an SDF (SuiteCloud Development Framework) project are wiped, while changes that were already deployed to production survive because they come along with the refresh. Plan refreshes around your deployment calendar, and redeploy or validate your SDF project immediately after every refresh.

Advanced

N/query versus N/search: choosing the right SuiteScript data access module

N/query runs SuiteQL directly against NetSuite's relational schema and is generally cheaper and faster for joins, aggregation and large filtered pulls, while N/search wraps the same saved-search engine used by the UI and is better when you need formula columns, summary types or a saved search object you can reuse. Both consume governance units per page fetched, but N/query's ability to express a join in one query often beats the multiple round trips a search-based join pattern requires.

Advanced

Choosing between User Event and Client scripts in NetSuite

User Event scripts (beforeLoad, beforeSubmit, afterSubmit) run server-side on every save regardless of how the record was created, including CSV import, web services and workflows, and are the only reliable place to enforce business rules. Client scripts (pageInit, fieldChanged, saveRecord, postSourcing) run only in an interactive browser session and can be bypassed entirely by any non-UI record save, so they should handle UX (field visibility, warnings, defaults) rather than validation that must never be skipped.

Advanced

How NetSuite scheduled script queueing actually works

A Scheduled Script deployment queued behind other jobs is not failing; NetSuite runs a limited number of scheduled and Map/Reduce script queues concurrently per account, so deployments wait their turn based on account concurrency and deployment priority. The practical fixes are staggering trigger times, setting deployment priority correctly, and designing scripts that reschedule themselves cleanly with N/task instead of running one long unbroken execution.

Advanced

Setting up a NetSuite SuiteCloud CI/CD pipeline

A repeatable NetSuite CI/CD pipeline uses SuiteCloud CLI for Node.js authenticated non-interactively with a Token-Based Authentication saved authentication ID, running suitecloud project:validate then project:deploy against a target account from a pipeline runner rather than a developer's machine. The main setup work is generating CI-specific TBA credentials, storing them as pipeline secrets, and keeping manifest.xml/deploy.xml accurate so deploys are deterministic.

Advanced

Exporting large volumes of data out of NetSuite reliably

For large NetSuite exports, the right tool depends on frequency and volume: SuiteAnalytics Connect (ODBC/JDBC) suits ad hoc and scheduled BI pulls with SQL filtering, SuiteQL over SuiteTalk REST or N/query suits programmatic incremental syncs, and a Map/Reduce script suits transformations that must happen inside NetSuite before export. Whichever method is used, filtering by lastmodifieddate for incremental pulls instead of re-exporting the full dataset every run is what actually makes large exports sustainable.

Oracle E-Business Suite

Error fix

Fix FRM-40735: WHEN-VALIDATE-RECORD Trigger Raised Unhandled Exception ORA-06508

FRM-40735: WHEN-VALIDATE-RECORD trigger raised unhandled exception ORA-06508

FRM-40735 with ORA-06508 almost always means a PL/SQL package used by the form was recompiled while your session still held the old cached state, or the trigger's own exception handling does not trap a real data error. Exit the form completely and re-enter it; if the error repeats for all users, recompile invalid objects on the database and check for a bad custom trigger.

Error fix

Oracle EBS Concurrent Manager Will Not Start: How to Fix It

Oracle EBS concurrent manager not starting

A concurrent manager that will not start in Oracle EBS is almost always one of three things: the node registered in FND_NODES no longer matches the actual hostname (common after cloning), stale OS processes are blocking a fresh start, or the database and listener the manager connects to are unreachable. Check the internal manager log, verify the node name, clear stale processes, and restart with adcmctl.sh.

Error fix

Fix Oracle EBS Workflow Notification Mailer Not Sending Emails

Oracle EBS Workflow Notification Mailer not sending emails

When EBS notifications stop reaching inboxes, check the mailer status in Oracle Applications Manager (OAM) Workflow Manager first - a Suspended or Error status almost always points at an SMTP or IMAP connectivity or credential problem introduced by a mail server change, not at Workflow itself. Fix the mail server configuration, restart the mailer component, and requeue the backlog.

Error fix

Fix ORA-01555: Snapshot Too Old in Oracle EBS Concurrent Requests

ORA-01555: snapshot too old in EBS concurrent request

ORA-01555 in a concurrent request means the program tried to read data from undo that has already been overwritten, usually because the report or custom PL/SQL ran long enough, or committed often enough mid-cursor, that the undo tablespace could not retain the needed read-consistent image. Increase UNDO_RETENTION and undo tablespace size first, then review the program for commits inside open cursor loops.

Error fix

Fix adop phase=prepare Failures in EBS 12.2 Online Patching

adop phase=prepare fails in EBS 12.2 online patching

An adop prepare phase failure in EBS 12.2 almost always means the patch edition (patch file system) and the run edition are out of sync, or a previous cutover or cleanup did not complete cleanly. Read adop.log for the specific worker error, resync the file systems with adop phase=fs_clone if needed, and never start a new patch cycle on top of an unfinished one.

Error fix

FRM-92101: There was a failure in the Forms Server during startup

FRM-92101 There was a failure in the Forms Server during startup

FRM-92101 fires when the browser cannot complete the handshake with the Forms listener servlet, almost always because the Forms server process did not start, formsweb.cfg or jserv.conf has a bad entry, or a client-side Java/JRE version mismatch is blocking the applet. Check the apps tier Forms log first, then the client Java version, then the config files.

Error fix

GL period will not close: unposted or unaccounted journal batches

You cannot close this period, there are unposted journal batches

Oracle EBS General Ledger blocks a period close whenever unposted journal batches, unaccounted subledger transactions, or pending mass allocations still reference that period. Run the Unposted Journals and Period Close Exceptions reports to find the offending batches, then post or reverse them before retrying the close.

Error fix

AutoInvoice import fails with invalid line/header exceptions

AutoInvoice import failed invalid line exceptions in RA_INTERFACE_ERRORS_ALL

AutoInvoice rejects lines when the interface data references an invalid or inactive customer, transaction type, GL date outside an open period, currency, or accounting flexfield combination. The AutoInvoice Execution Report and RA_INTERFACE_ERRORS_ALL tell you exactly which interface line and which field failed validation, so start there rather than guessing at the source system feed.

Error fix

Oracle Workflow error: Attribute does not exist for item type

Wf_Engine_Util Attribute does not exist for item type

This Oracle Workflow error means a workflow activity, function, or notification message is referencing an item type attribute (via SetItemAttrText/GetItemAttrText or a &ATTRIBUTE token) that was never defined on that item type, was deleted, or is misspelled - almost always introduced by a custom workflow change that was not fully synchronized. Compare the attribute list in Workflow Builder against every reference to it in the process.

Error fix

Concurrent request completes with Warning and an FDPSTP message

Concurrent request completed with warning FDPSTP

A concurrent request ending in Warning with a message mentioning FDPSTP means the underlying program's own completion status was not a clean Normal, and the post-processing step (FDPSTP) that handles printing/output is simply reporting that upstream condition. Always open the request log first - the real cause is almost always inside the program's own log, not in FDPSTP itself.

How-to

How to Import AP Invoices in Oracle EBS with Payables Open Interface Import

Load invoice header and line data into AP_INVOICES_INTERFACE and AP_INVOICE_LINES_INTERFACE, then run the Payables Open Interface Import concurrent program to create standard invoices in Oracle Payables. Rows that fail validation land in AP_INTERFACE_REJECTIONS with a specific reject reason you can query directly, without opening the Invoice Workbench.

How-to

How to Use Forms Personalization in Oracle EBS (No CUSTOM.pll Needed)

Forms Personalization lets you change field properties, set defaults, run built-ins and show messages on any Oracle Forms screen through Help > Diagnostics > Custom Code > Personalize, with no custom library or forms compile required. Rules are stored per form and responsibility in FND_FORM_CUSTOM_RULES and apply at runtime for every user who opens that form.

How-to

SQL to Find Responsibilities Assigned to a User in Oracle EBS

Join FND_USER to FND_USER_RESP_GROUPS on USER_ID, then to FND_RESPONSIBILITY_TL on RESPONSIBILITY_ID and APPLICATION_ID to get the responsibility name, filtering the END_DATE columns to show only currently active assignments. This is the standard query DBAs and support teams use instead of clicking through System Administrator > Security > User > Define for every user.

How-to

Oracle EBS Month-End Close Checklist: GL, AP, AR

Close sub-ledgers before General Ledger: finish and account for all Payables and Receivables transactions, close the AP and AR periods, transfer journals to GL through Create Accounting, reconcile sub-ledger to GL, then close the GL period last. Closing GL before a sub-ledger is fully accounted is the single most common cause of a reopen.

How-to

How to Close an Inventory Accounting Period in Oracle EBS

Before closing an Inventory period, run the Pending Transactions report to clear every uncosted or erroring material transaction, then close through Inventory > Accounting Close Cycle > Inventory Accounting Periods. Inventory will refuse to close while pending transactions remain, and any that get force-closed into the next period will misstate both months' costed inventory value.

How-to

How to Create a BI Publisher Report in Oracle EBS

An EBS BI Publisher report has three parts: a data model that produces XML data (usually a SQL-based data template), a Data Definition registered in the XML Publisher Administrator responsibility, and an RTF or Excel template built with the BI Publisher desktop tools and uploaded against that definition. A concurrent program then ties them together and runs the same way any standard EBS report does.

How-to

How to Register a Custom Concurrent Program in Oracle EBS

Registering a custom concurrent program in EBS takes three linked steps in the System Administrator responsibility: register the Executable pointing at your actual code object, register the Program that references that executable and defines its parameters, then add the program to a Request Group so it is visible under the target responsibility's Submit Request window.

How-to

How to Set Up AME Approval Rules in Oracle EBS

AME routes approvals for iProcurement, iExpense, PO approvals, and other seeded transaction types through Conditions built on Attributes, combined with Approver Groups into Rules. Build and test every rule in Test status using the AME Test Workbench before flipping the transaction type to Production, since production rule changes route real approvals immediately.

Advanced

How the adop Patching Cycle Works in Oracle EBS 12.2

adop, AD Online Patching, applies patches to the offline patch edition of the file system while users keep working on the current run edition, then switches editions in a short cutover window. A standard cycle runs prepare, apply, finalize, cutover and cleanup, each invoked as its own adop phase= command.

Advanced

How to Extend an OAF Page in Oracle EBS Without Touching Seeded Code

Use OAF Personalization, through the Personalize Self-Service Defn responsibility or the Personalize Page link, for layout, prompts and simple rules, and Controller Extension, a custom Java class that extends the seeded controller, for logic changes such as new validation or events. Both approaches survive patching because the seeded XML and Java classes are never edited directly.

JD Edwards

Error fix

JDE UBE failed (status E): how to read jde.log and jdedebug.log

JDE UBE failed to navigate to report queue, how to read jde.log

A UBE (batch report/program) that ends with status E in Work With Submitted Jobs tells you almost nothing on its own. The real error is in jde.log on the enterprise server, in the job's own PDF/log subdirectory (jdedebug.log if you turned on debug), and in the work directory for that job number under PrintQueue or the OS temp path.

Error fix

JD Edwards: record is being used by another user (record reservation)

JD Edwards record is being used by another user, cannot update

EnterpriseOne places a soft record reservation lock when a user opens a record for edit, tracked in the F00165 table, and releases it when the user saves, cancels, or the session ends cleanly. A stuck lock almost always means a session died abnormally (browser crash, network drop, kiosk timeout) without triggering the release, and it must be cleared by an admin, not by the original user retrying.

Error fix

JD Edwards business function (BSFN) errors: how to diagnose them

JD Edwards business function error, BSFN failed to load

A BSFN error in EnterpriseOne means either the compiled function was not found for the current package build, or the function ran and threw an internal exception (often a null business view row, an unhandled C runtime error, or a failed table I/O). The fix path is different for each, so the first step is always determining which one you are facing from jde.log.

Error fix

JDE package build failed: how to find the real cause

JD Edwards package build failed, how to find the cause

A package build (Full or Update) that ends in a failed or errored status on the deployment server does not explain itself in the Package Build Workbench screen. The real diagnostic detail is in the package's own log subdirectory on the deployment server, which holds a build log, a table conversion log, and per-object compile logs that pinpoint the actual failure.

How-to

How to set up JD Edwards Orchestrator (step by step)

An EnterpriseOne orchestration chains one or more requests (form requests that drive an interactive application, or service requests that call a BSFN, business service, or SQL) plus optional rules and notifications, then exposes the whole thing as a callable REST endpoint via the AIS (Application Interface Services) server. The setup work happens in Orchestrator Studio, not the Fat Client.

How-to

How to set data selection and processing options in JD Edwards

Data selection controls which rows a UBE's underlying business view reads (a filter, stored per version in F9210/F9211), while processing options control how the program behaves once it has that data (a settings template stored per version in F983051/F983052). They are configured from the same Version Detail screen but are separate, unrelated mechanisms that new users routinely confuse.

How-to

JD Edwards table conversion: how it works and how to run one

Table conversion (TC) is the EnterpriseOne mechanism that updates a table's physical structure and converts its existing data whenever a table's definition changes in Object Librarian, most commonly running automatically as part of a package build. Simple field additions or size changes convert automatically; more complex changes such as splitting a field or transforming values need a custom conversion routine attached to the table object.

How-to

How to set up BI Publisher output for a JD Edwards report

BI Publisher for JD Edwards EnterpriseOne lets a UBE render through an RTF or PDF template designed in BI Publisher instead of EnterpriseOne's own print engine, giving far more control over layout for things like invoices, checks, and financial statements. Setting it up means confirming the connection to a BI Publisher server, building or importing a template against the report's XML data structure, and associating that template with the specific report version through Report Design Aid.

How-to

JDE One View Report stuck pending: how to publish it to other users

One View Reports are a type of User Defined Object (UDO), and like other UDOs, a report a business user designs is saved as Pending by default and only visible to its creator until an administrator with UDO administration security approves it and assigns it to a role or *PUBLIC. This approval and availability step, not the report design itself, is the most common reason a finished One View Report is not showing up for anyone else.

Advanced

How to set up row security in JD Edwards Security Workbench

Security Workbench (fast path SECURITY, application P00950) is where every type of EnterpriseOne security record is defined, including row security, which restricts which rows of data a role or user is allowed to see or act on based on a key field like business unit or company, independent of whether they have access to the application itself. Application security controls whether a role can open a program at all; row security controls what data they see once they are in it.

Oracle Fusion Cloud ERP

Error fix

Fix FBDI Import Failures From Interface Table Validation Errors

FBDI import failed - interface table validation errors

When a Fusion FBDI import job errors out, the cause is almost always bad data in the interface tables (an invalid value set, a wrong date format, or a missing required column), not the ESS job itself. Open the process's Interface Errors Report or the Correct Import Errors spreadsheet to see the exact rejected rows and reason codes, fix the source data, and resubmit from the interface tables instead of re-running the whole FBDI load.

Error fix

Clear An Oracle Fusion ESS Job Stuck In Blocked Status

Oracle Fusion ESS job stuck in Blocked status

A Blocked status on an Oracle Fusion Enterprise Scheduler (ESS) job almost always means an earlier instance of the exact same job is still running or stuck, and the job definition does not allow simultaneous requests. Find and finish, or cancel, the earlier request first; only then does the Blocked request move to Running.

Error fix

Fix The Oracle Fusion "You Don't Have Access To This Data" Error

You don't have access to this data. Contact your help desk

This generic Oracle Fusion security message means the function privilege and the data security scope did not both line up for that user on that record - most often the job role is assigned but the matching data role, security profile, or business unit and ledger context in Manage Data Access for Users is missing. Fix it by checking data access setup for the user's role, not by re-granting the same job role again.

How-to

OTBI vs BI Publisher: Which One Should You Use

Use OTBI when a business user needs ad hoc, self-service, real-time analysis with no fixed layout. Use BI Publisher when you need a pixel-perfect, scheduled, high-volume, or externally distributed document such as an invoice, check, or statutory report. Most Fusion implementations end up using both, not one instead of the other.

How-to

Paginate And Authenticate Oracle Fusion REST API Calls Correctly

Oracle Fusion Cloud REST APIs authenticate with HTTP Basic Authentication, an integration user's credentials, over HTTPS by default, and paginate with limit and offset query parameters rather than a page number. Loop on the hasMore flag in the response until it returns false to retrieve a full result set.

How-to

HCM Data Loader Vs FBDI: Which One Loads Your Fusion Data

HCM Data Loader (HDL) is the dedicated bulk tool for HCM business objects - workers, assignments, compensation, absences - and uses a plain-text .dat file with METADATA and MERGE or DELETE action lines, not a spreadsheet template. FBDI is the general Financials and SCM bulk-load framework built on Excel macro templates that stage data into interface tables. If the object lives in HCM, use HDL; if it lives in Financials, Procurement, or SCM, use FBDI.

How-to

Connect Oracle Integration Cloud (OIC) To Fusion ERP

OIC connects to Fusion ERP primarily through the prebuilt ERP Cloud Adapter, which wraps Fusion's REST and SOAP web services with OAuth-based authentication and pick-list discovery of available business objects and operations, instead of you hand-building every REST call. Use the adapter for standard integrations; drop to a generic REST or SOAP adapter only when the ERP Cloud Adapter does not yet expose the specific service you need.

How-to

Fix Wrong Row Counts When Joining Across OTBI Subject Areas

Most subject areas in Oracle Fusion OTBI are self-contained and only support reliable analysis within their own folders; dragging a folder from a second subject area into the same analysis without a genuine shared join key silently produces duplicated or missing rows because OTBI has no way to correctly relate the two fact grains. Fix it by staying inside one subject area where possible, or by explicitly using a subject area that Oracle designed to cross domains, rather than combining arbitrary folders yourself.

How-to

Oracle Fusion Period Close: A Practical Checklist

Closing a Fusion GL period cleanly means closing every feeder subledger first (Payables, Receivables, Costing, Fixed Assets), running Create Accounting to post everything to GL, reconciling subledger-to-GL balances, and only then setting the GL period status to Closed - not Close Pending, which still allows adjustments. Close Monitor gives a single dashboard of every subledger's close status instead of checking each module separately.

How-to

Extend Oracle Fusion Safely With Sandboxes And Visual Builder Studio

Fusion customizations - a new field, a validation rule, a redesigned page layout, or a standalone custom app - are built inside a sandbox, an isolated workspace that lets you make and test changes without affecting other users until you explicitly publish. Application Composer handles fields, objects, and business rules; Visual Builder Studio builds new standalone pages and full custom applications that can embed inside or sit alongside Fusion.

SAP

Error fix

SAP M7 021: Deficit of SL Stock Quantity

SAP error M7 021 Deficit of SL stock quantity

M7 021 fires during a goods issue, delivery, or confirmation when SAP checks the unrestricted-use (SL) stock for the exact plant, storage location and batch combination and finds less than what you are trying to post out. Fix the entry (batch, storage location, quantity) first; only enable negative stock or downgrade the message to a warning if the business genuinely needs to post ahead of a receipt.

Error fix

SAP IDoc Status 51: Application Document Not Posted

SAP IDoc status 51 error

Status 51 tells you the IDoc reached the application layer and failed to post, but the status text itself is not the error - the real cause sits in the status record's long text or the linked application log. Fix the underlying data or configuration, then reprocess the IDoc through BD87 rather than editing the status.

Error fix

SAP Short Dump TIME_OUT: Maximum Runtime Exceeded

SAP runtime error TIME_OUT short dump

A TIME_OUT runtime error means a dialog (or RFC) work process ran longer than the maximum allowed runtime, controlled by profile parameter rdisp/max_wprun_time (600 seconds by default). The fix is almost always to move the long-running work to background processing or tune the underlying program, not to raise the timeout.

Error fix

SAP F5 060: Posting Only Possible in Periods X and Y

SAP F5 message posting period closed for account type

Message F5 060 fires when a document date falls in a fiscal period that the posting period variant has not opened for that account type. Either change the document/posting date into an open period, or have Finance open the required period and account type in OB52 for the relevant variant.

Error fix

SAP KI 235: G/L Account Requires an Assignment to a CO Object

SAP error KI 235 no cost element defined

KI 235 means a primary cost or revenue element exists (or should exist) on a P&L account, but the posting you are entering has no valid Controlling object - cost center, order, WBS element or profitability segment - to receive it. Add the account assignment on the posting, or set a default cost center via OKB9 so future postings resolve automatically.

Error fix

SAP CO11N Confirmation Errors and How to Fix Them

SAP CO11N confirmation error deviation too large

CO11N (time ticket confirmation for production/process orders) throws several distinct errors: deviation from the standard value is too large, goods movement not possible for a component, or the order/operation status does not allow confirmation. Each has a specific cause in order status, routing tolerance settings, or component availability, not a single generic fix.

How-to

How to Read MD04 Exception Messages in SAP

The exception indicator in MD04 flags procurement elements whose date or quantity no longer matches the current demand situation - it is SAP's built-in change signal, read element by element in the detail screen, not just the header icon. Triage by exception group first, then decide to reschedule, cancel, or accept each one.

How-to

How to Use BAPI_TRANSACTION_COMMIT Correctly

SAP's BAPI programming model separates business logic from the database commit on purpose, so a caller must explicitly call BAPI_TRANSACTION_COMMIT after a successful BAPI - usually with WAIT = 'X' - or the created object never actually persists. Skipping this step, or forgetting WAIT, is the most common reason a BAPI 'runs fine' but nothing gets saved.

How-to

SAP VL150: Collective Processing of Documents Due for Delivery

VL150 (and its more commonly used successor VL10) mass-creates outbound deliveries for sales orders that are due by a selected date, based on shipping point, route, and delivery-relevant item category. Orders that do not appear are usually held back by a delivery block, an incomplete order, a failed availability check, or a delivery date outside the selection window.

How-to

SAP SE16N vs SQVI: Table Browser vs Ad Hoc Query

SE16N is a single-table browser: fast filtering, formatted display, and export from one table at a time, with an optional edit function for authorized users. SQVI (Quick Viewer) builds ad hoc queries that join multiple tables without writing ABAP, and can be saved as a reusable report. Use SE16N for a quick look at one table; use SQVI when you need data joined across two or more tables.

Microsoft Dynamics

Error fix

Fixing "Cannot create a record in (table). The record already exists" in D365 F&SCM data entity imports

Cannot create a record in (table). The record already exists - D365 F&SCM data entity import

This is the standard kernel duplicate-key exception, thrown when the Data Management Framework tries to insert a staging row into a target table whose unique or alternate key already matches an existing record. It almost always means the entity's insert-vs-update logic did not recognize the target row as an update, not that you have a true accidental duplicate in your source file.

Error fix

Fixing "There are currently no batch servers available for processing" in D365 F&SCM

There are currently no batch servers available for processing D365 finance and operations

This message means the batch framework cannot find any AOS instance flagged as a batch server and available for the batch group the job is assigned to. The fix is almost always in server configuration (System administration > Servers) or batch group assignment, not in the batch job itself.

Error fix

Fixing "You do not have the following permissions on TableData (table): (permission)" in Business Central AL

You do not have the following permissions on TableData: Insert Business Central

This runtime error means the current user's assigned permission sets do not grant the required Insert, Modify, Delete, Read, or Execute right on that specific table. It is most common right after installing or updating a custom AL extension, because Business Central checks object-level permissions even for tables an extension owns.

Error fix

Fixing "The CIL object was not found" in Dynamics AX 2012

The CIL object was not found. This could be caused by that CIL was not generated - AX 2012

This error appears when the AOS tries to execute compiled CIL for a class or method that has not actually been regenerated since a code change was imported or edited, so the .NET runtime has nothing matching to run. The fix is a full compile followed by a full CIL generation and an AOS restart, not just a partial or incremental rebuild.

How-to

Handling OData 429 Too Many Requests throttling in D365 Finance and Operations

D365 F&SCM protects shared AOS capacity by throttling OData and custom service calls, returning HTTP 429 with a Retry-After header once a client sends too many requests too quickly. The durable fix is to honor Retry-After with backoff and redesign high-volume or frequent-polling integrations to use batching, business events, or Data management instead of tight request loops.

How-to

Setting up Electronic Reporting (ER) formats in D365 Finance and Operations

Electronic Reporting (ER, also called GER - Global Electronic Reporting) is the D365 F&SCM framework used to generate country-specific tax reports, e-invoices, and payment files without X++ code. You build it in three layers: a data model, a model mapping to source tables, and a format that renders the mapped data. Work is done under Organization administration > Electronic reporting.

How-to

Calling and extending the Business Central API v2.0

The Business Central API v2.0 is a REST/OData endpoint at api.businesscentral.dynamics.com/v2.0/{tenant}/{environment}/api/v2.0, authenticated with Azure AD OAuth 2.0. It exposes standard entities like customers and items, and lets you publish your own with an AL API page.

How-to

Embedding Power BI reports inside D365 Finance and Operations workspaces

D365 F&SCM can show Power BI tiles and full reports directly inside workspaces and forms, backed by either the entity store (aggregate measurements over BYOD) or embedded reports published from Power BI Desktop. Configuration happens under System administration > Setup > Power BI, then reports are attached to workspaces through personalization.

How-to

Creating and selecting custom report layouts in Business Central

Business Central reports can render through a Word layout (simple, single-level documents like invoices) or an RDLC layout (complex, multi-level, grouped reports). Custom layouts are uploaded and assigned per report through the Report Layout Selection page, or shipped inside an AL extension with the rendering(...) property.

Advanced

Planning an AX 2012 to Dynamics 365 Finance and Operations upgrade

Moving from AX 2012 to D365 F&SCM is a platform change, not a version bump: X++ customizations go through a code upgrade to the new extension/overlayering model, and data moves through a structured data migration, both coordinated as an Upgrade project in Lifecycle Services (LCS). Plan it as a project with its own testing cycle, not a routine patch.

Epicor

Error fix

Fixing Epicor BusinessObjectException: BPM Directive Errors

Epicor BusinessObjectException: A Business Process Management (BPM) directive has raised the following error

A BusinessObjectException that says "A Business Process Management (BPM) directive has raised the following error" means a directive on that business object stopped the transaction, either deliberately via a Raise Exception widget or accidentally via an unhandled .NET error in Custom Code. Expand the InnerException on the error dialog to see the real message and the directive name, then open BPM Designer for that object and method to find the widget that fired.

Error fix

Fixing Epicor REST v2 API 401 Unauthorized Errors

Epicor REST v2 API 401 Unauthorized error

A 401 Unauthorized calling Epicor's REST v2 (api/v2/odata) endpoint almost always comes down to one of three things: a missing or wrong x-api-key header, valid credentials but an API key scoped to a different company than the one in the URL, or REST services simply not enabled for that endpoint. Confirm the API key exists and is active in Application Studio (or the classic REST API help page), matches the company segment in the URL, and that the account used for Basic auth or OAuth has the right security group.

How-to

Fixing a Slow Epicor BAQ (Business Activity Query)

A slow BAQ in Epicor is usually caused by unindexed join columns, a subquery or calculated field forcing a table scan, or the BAQ pulling far more rows than the dashboard actually displays before filtering client-side. Fix it by reading the SQL Server execution plan Epicor generates, moving filters into the BAQ criteria instead of the dashboard filter panel, and replacing subqueries with joins where possible.

How-to

Epicor MRP Runs but Generates No Suggestions

When Epicor's MRP process completes without a job or purchase suggestion for a part you expect one for, the cause is almost always the part's own configuration (Part Class Type, Make Direct, Non-MRP flag, planning Time Fence) or the demand not being linked in a way MRP recognizes, not a defect in the MRP engine. Work through the part's Planning tab, its safety stock and lead time setup, and the demand source (sales order line status, job material requirement) before assuming the run itself failed.

How-to

Preserving Customizations When Upgrading to Epicor Kinetic

Epicor Kinetic's web UI does not simply inherit classic smart-client customizations - most need to go through the Update Customization / Application Studio conversion process, and some WinForms-specific customizations cannot convert directly and must be rebuilt in the Kinetic designer. Plan the upgrade as a customization inventory and rework project, not a single technical cutover step.

How-to

How to import data with Epicor DMT (Data Migration Tool)

In DMT, pick the target data type (e.g. Part, Customer, PartWhse), Generate a template from the connected Epicor server so column names match your version's schema exactly, populate the spreadsheet, load it into DMT, run a Pre-Process/validate pass first to surface errors before committing, then Process to write the records.

How-to

How to build a Kinetic homepage dashboard in Epicor

Kinetic homepage dashboards are built from Active Homepage Maintenance: create a BAQ that returns the metric or list you want, add a KPI or List widget referencing that BAQ, arrange widgets on the homepage layout, and assign the homepage to a role or company so the right users see it.

How-to

How to close job costing and the accounting period in Epicor

Before closing an accounting period in Epicor, run Capture Costs (or confirm background costing is current) to post all labor, material, subcontract, and burden to jobs, review the WIP report for jobs that should be closed or investigated, close completed jobs so their costs relieve WIP, and only then close the GL period, since GL close blocks further transaction posting into it.

Advanced

How to create and call an Epicor Function

Open Function Studio from the main menu (Customization > Function Studio) or from inside a BPM designer's Call Context widget, define a Library and Function with typed inputs/outputs, write the logic in the C# widget, then compile and test with the built-in test harness before calling it from a BPM directive, a dashboard, or another function.

Advanced

Epicor Application Studio: understanding customization layers

Kinetic UI is built in layers loaded in order - Base (Epicor-delivered), Customization (Application Studio, company/layer-wide), Personalization (user- or role-specific, applied on top), and optionally Extended (packaged add-on layers) - and a change you make will not appear if a higher layer overrides the same control or if you are testing in the wrong layer context.

Mid-market & small ERPs

Error fix

Fix Odoo AccessError: You Are Not Allowed to Access Records

AccessError: You are not allowed to access records. This operation is allowed for the following groups

Odoo raises AccessError when a user's security groups do not grant a CRUD right on a model through ir.model.access.csv, or when an ir.rule record rule filters the specific record out for that user or company. Fix it by adding the user to the group named in the error, editing the model's access rights, or reviewing the record rule's domain under Settings > Technical > Security.

Error fix

Fix Fishbowl Error: MySQL Server Has Gone Away

Fishbowl error: MySQL server has gone away

This error means the Fishbowl Server lost its connection to the underlying MySQL database, usually because a session sat idle past MySQL's wait_timeout, MySQL itself restarted, or a large import or report exceeded max_allowed_packet. Raise the relevant MySQL timeout and packet settings, confirm the MySQL service is actually running, and restart both MySQL and the Fishbowl Server service.

Error fix

QAD Says "Unable to Connect to the Application Server": How to Fix It

QAD unable to connect to the application server

This error almost always means the Progress OpenEdge AppServer broker behind QAD is stopped, unreachable over the network, or out of licensed connections, not a database problem. Confirm the broker process is running and healthy in OpenEdge Explorer, check the port and firewall path from the client, then restart the broker with clean agent settings.

Error fix

Odoo Scheduled Actions (Cron) Not Running: How to Fix

Odoo scheduled actions (cron jobs) not running

Odoo scheduled actions usually stop firing because no cron worker is available (workers or max-cron-threads misconfigured), the action is set inactive, or an earlier job crashed and left an ir.cron row stuck in the running state, which blocks the queue. Check Settings > Technical > Automation > Scheduled Actions first, then the server config and the ir.cron table.

How-to

How to Create a Generic Inquiry in Acumatica

Generic Inquiries (GI) are Acumatica's no-code query builder for joining tables, adding filters, and exposing the result as an inquiry screen, dashboard data source, or API endpoint. Open System > Customization > Generic Inquiry, add your base table, define joins and conditions, then run and save. No SQL or customization project is required.

How-to

How to Void a Check in Sage 100

Sage 100 voids checks through Accounts Payable > Main > Check and Payment Voiding. Select the bank code, choose the check number, and Sage reverses the Cash Disbursements Journal entry and reopens the invoice it paid. A check that already cleared in Bank Reconciliation or falls in a closed period needs an extra step before it can be voided cleanly.

How-to

How to Run Requirements Planning (MRP) in SYSPRO

SYSPRO's MRP engine lives under Planning and Scheduling > Requirements Planning. Set planning parameters per warehouse, run the Requirements Calculation to net demand against supply, then review and release the resulting suggestions as purchase requisitions or work orders. A full regenerative run typically runs on a schedule, with net change runs in between to pick up new activity.

How-to

How to Close a Job in JobBOSS2

A job in JobBOSS2 will not close cleanly until every routing operation is marked complete, all material has been issued or returned, and all labor and cost transactions are posted. Review the job's Work In Process detail first, clear any open items, then change the job status to Complete and run final job costing before it is locked.

How-to

How to Create a Quote in E2 Shop System

A quote in E2 Shop System starts with a header identifying the customer and part, then adds routing operations with time and rate, material and outside processing costs, and a markup to reach a sell price. Once accepted, the quote converts directly into a job or sales order so the estimate carries forward as the job's cost basis.

How-to

How to Set Up an EDI Trading Partner in Plex Systems

Setting up an EDI trading partner in Plex's EDI Data Manager means defining the partner and their connection details, mapping the specific document types they will exchange (purchase orders, forecasts, shipping schedules, ASNs, invoices) to Plex's Customer and Part records, and running the partner through test mode before flipping them to production.

How-to

How to Run Live Scheduling in Global Shop Solutions

Live Scheduling in Global Shop Solutions builds a finite-capacity schedule from job routing operations against defined work centers, then presents it as a drag-and-drop board that shop supervisors adjust to reflect real shop floor priorities. Its accuracy depends on work centers, standard hours, and shop floor data collection all being kept current, since the schedule is only as good as the routing and capacity data feeding it.

How-to

How to Create an Import Scenario in Acumatica

Import scenarios in Acumatica live under System Integration > Import Scenarios: you pick a source (a file or a Generic Inquiry), map each source field to a target DAC field on the destination screen, then run or schedule the scenario. A small sample file run through the wizard first makes the field mapping step far faster than mapping blind.

How-to

How to Run a Physical Inventory Count in Sage X3

Sage X3 physical counts run through Stock > Counts: create a count session scoped to a site, category, or zone, generate the count sheet to freeze theoretical quantities, enter counted quantities, review the variance report, then validate to post stock and valuation adjustments. Blocking movements against the counted locations during the window keeps the variance meaningful.

How-to

How to Set Up Business Events and Actions in IFS

IFS Business Events fire when a defined condition on a Logical Unit is met, such as a new record, an update, or a specific attribute changing, and Actions subscribe to those events to send email, invoke a workflow, or call an external service. Both are configured in Solution Manager (or the Events and Actions work area in IFS Cloud) without requiring custom PL/SQL for most standard cases.

How-to

How to Set Up Indirect Rate Pools in Deltek Costpoint

Indirect rate pools in Costpoint group related indirect costs, such as fringe, overhead, G&A, or material handling, so they can be allocated to direct cost bases using a defined rate. Pools and their bases are configured under the Indirect Rate Structure area, with pool tiers sequenced so that lower-level pools like fringe allocate into higher-level pools like overhead before G&A is calculated.

CIO & IT leadership

CIO briefing

ERP Upgrade or AI First? A CIO Decision Framework

In most cases, add a grounded AI layer on top of your current ERP first, because it proves value in weeks and shows exactly what an upgrade would need to fix. Reserve a full ERP replacement for cases where the platform itself is end of support, unsupported, or structurally blocking the business, not simply because it feels dated.

CIO briefing

How Much Does ERP AI Actually Cost?

A scoped pilot against one ERP module typically runs 15,000 to 50,000 USD; a single-department production deployment runs 50,000 to 150,000; a multi-module enterprise rollout runs 150,000 to 500,000 or more, plus ongoing hosting and usage costs. Native vendor copilots are usually priced per active user per month on top of existing licensing, not included free.

CIO briefing

Adding AI to a Legacy ERP Without Replacing It

Yes, for most legacy ERPs still running in production. If the system exposes its data in any queryable form - ODBC, an API, a scheduled export, or even a read replica of the database - a grounded AI layer can sit alongside it, answering questions and automating workflows without touching core code, buying years of runway before a forced migration.

CIO briefing

Does Your ERP Vendor's AI Copilot Increase Lock-In?

Native vendor copilots such as SAP Joule, Oracle Fusion AI agents and Microsoft Copilot in Dynamics 365 are usually bundled or low-cost to start, but they only see that vendor's native data model and typically bill on consumption, which raises both switching cost and long-run cloud spend. Use them for what they do well inside the vendor's own UI, and keep cross-system or custom-field questions on a vendor-neutral layer.

CIO briefing

Is Your ERP Data Ready for AI? A Readiness Checklist

Most ERP data is ready enough to start a scoped AI pilot immediately; full data-quality remediation is not a prerequisite. A handful of specific gaps - duplicate item or customer masters, inconsistent units of measure, missing descriptions, and orphaned records - will visibly degrade AI answers and are worth checking before the pilot, not after.

CIO briefing

ERP Selection in 2026: Where AI Actually Matters

Treat AI as one evaluation column among many, not the deciding factor: fit, data model, industry depth, and total cost of ownership still decide most ERP selections. Test AI claims live against your own data during the demo, not the vendor's canned dataset, and separate "embedded copilot" marketing from features that ship and work today.

CIO briefing

Cutting ERP Support Cost with AI: What Actually Moves the Needle

AI reduces ERP support cost mainly by deflecting the high-volume, low-complexity tickets: "how do I run X report," "why is this field locked," "what does this error mean." It does not remove the need for tier 2/3 staff who fix configuration, data, and integration problems, so budget the savings against ticket volume, not headcount, in the first year.

CIO briefing

Two-Tier ERP Plus AI: Closing the Reporting Gap Without Re-Platforming

AI does not remove the rationale for a two-tier ERP strategy (a heavy Tier 1 system like SAP or Oracle at corporate, a lighter Tier 2 system like NetSuite or Dynamics at subsidiaries), but a shared, grounded AI query layer across both tiers can close the cross-entity reporting gap that is the strategy's usual weak point, without a costly re-platforming project.

CIO briefing

Building an ERP Modernization Roadmap That Includes AI

Sequence a modernization roadmap as data and integration cleanup first, a grounded AI query layer second (which can run on the current ERP, before any platform upgrade), and platform migration or upgrade third, timed on its own business case rather than forced early to enable AI. Trying to do all three simultaneously is the most common way modernization programs stall.

CIO briefing

On-Prem vs Cloud ERP AI for Regulated Manufacturers

For ITAR, CMMC, and export-controlled manufacturers, the deciding question is not on-prem versus cloud in general but whether controlled unclassified information (CUI) or export-controlled technical data ever leaves your boundary to reach an AI model. An on-prem or private-VPC-deployed AI layer keeps that data inside your control boundary; a vendor's shared cloud AI service usually does not, regardless of how the core ERP itself is hosted.

CIO briefing

Do You Need an ERP AI Governance Board?

Yes, once more than one AI use case touches ERP data - even a lightweight, four-person committee that meets monthly beats no governance at all. Its job is narrow: approve which ERP data an AI tool can touch, set the review cadence for accuracy and access, and own the kill switch if something goes wrong. It should not be a bureaucratic gate that slows every pilot to a crawl.

CIO briefing

Measuring ERP AI ROI After Go-Live

Measure ROI with three metric families - time saved on named tasks, error or rework reduction, and adoption depth - tracked against a pre-go-live baseline you captured before the tool launched. Most CIOs skip the baseline and then cannot prove anything six months later, so capture it in week one even if the AI tool is not fully ready.

CIO briefing

ERP Data Sovereignty for AI: What CIOs Need to Check

Data sovereignty for ERP AI comes down to one question: does your ERP data, or any derivative of it (embeddings, cached responses, logs), ever leave the jurisdiction or infrastructure boundary you are required to keep it inside. Cloud-hosted, multi-tenant AI copilots from major ERP vendors often cannot answer that question precisely; on-premises or single-tenant deployments in your own cloud region can.

CIO briefing

Staffing an ERP AI Team: What Roles You Actually Need

Most mid-market organizations do not need a dedicated ERP AI team at pilot stage - one ERP-literate technical owner working part-time with an implementation partner is enough. A dedicated team becomes worthwhile once you have more than two or three live AI use cases in production, at which point you need a named owner for prompt/data quality, one for integration and access, and a business-side owner for adoption.

CIO briefing

ERP AI Vendor Due Diligence: What CIOs Should Actually Check

The single highest-signal question in ERP AI vendor due diligence is 'show me it answering a real question against our actual ERP data, live, not a demo dataset.' Beyond that, focus diligence on data grounding method, security and access model, exit/portability terms, and references from customers on your specific ERP platform - not on feature checklists, which most vendors can match on paper.

CIO briefing

SyteLine or CloudSuite Industrial: how to decide in 2026

Infor's roadmap has converged on CloudSuite Industrial (CSI), which is SyteLine's code line delivered as a multi-tenant cloud service on AWS with continuous updates; on-prem SyteLine still runs and is still supported on current versions, but new Infor OS, ION, and AI-adjacent capability lands in CSI first. The decision is not 'SyteLine is dying' so much as 'on-prem SyteLine is a slower lane on the same road.' CIOs should decide based on integration needs, customization depth, and whether IT wants to keep owning SQL Server and patching, not on vendor pressure alone.

CIO briefing

NetSuite or Infor: which fits a growing manufacturer in 2026

NetSuite wins on financials, multi-entity consolidation, and speed of implementation, and is the stronger pick for a manufacturer that is asset-light, distribution-heavy, or scaling through acquisition. Infor's manufacturing lines (SyteLine/CSI, LN, M3) win on shop-floor depth: routings, APS scheduling, configure-to-order, and discrete/process manufacturing complexity that NetSuite's manufacturing module still handles more thinly. The right answer depends on where the operational complexity actually lives, not on brand preference.

CIO briefing

Oracle EBS 12.2: stay on-prem or move to Fusion in 2026

Oracle has committed to Premier Support for E-Business Suite 12.2 into the early 2030s, which is longer than many CIOs assume, so there is no forced 2027 cliff for EBS specifically (that date is commonly confused with SAP ECC's 2027 deadline). The real decision drivers for EBS customers are: how much the org depends on customizations that do not translate to Fusion's SaaS model, whether continuous quarterly Fusion updates fit the org's change-management capacity, and whether Fusion's standardized processes are an acceptable tradeoff for the customizations currently in EBS.

CIO briefing

SAP ECC 2027: what mid-size manufacturers should actually do

SAP's mainstream maintenance for ECC 6.0 ends in 2027, with extended maintenance available at additional cost typically through around 2030 depending on the specific agreement. Mid-size manufacturers have three real options: migrate to S/4HANA (on-prem or cloud) before 2027, pay for extended maintenance to buy 2-3 more years, or move off SAP entirely. With limited internal SAP resourcing, most mid-size manufacturers should already be past discovery and into a scoped S/4HANA conversion plan by now, or actively budgeting for extended maintenance as a deliberate bridge, not a default.

CIO briefing

ERP AI: when to hire a partner versus build it in-house

Build in-house when you have or can hire engineers with real experience in retrieval-augmented generation, your ERP's specific API/data model, and production LLM deployment, and when the AI capability is a genuine long-term differentiator worth owning. Hire a partner when time-to-value matters, your team's strength is running the ERP rather than building AI infrastructure, or you want to validate the use case with a working pilot before committing to a multi-quarter internal build. Most mid-size manufacturers are better served starting with a partner-led pilot and deciding on in-house investment once the use case is proven.

Want answers from your own ERP data?

ERPray answers questions from your live ERP, grounded and permission-aware, on-prem if you need it.