Introducing Acumatica Cloud ERP: 2026R2
Technical discussions focused on Customizations for developers. See Low Code | No Code Forum for non-technical discussions
Recently active
public new PXSelectJoin<RQRequisition, LeftJoinSingleTable<Customer, On<Customer.bAccountID, Equal<RQRequisition.customerID>>, LeftJoinSingleTable<Vendor, On<Vendor.bAccountID, Equal<RQRequisition.vendorID>>>>, Where2< Where<Customer.bAccountID, IsNull, Or<Match<Customer, Current<AccessInfo.userName>>>>, And2< Where<Vendor.bAccountID, IsNull, Or<Match<Vendor, Current<AccessInfo.userName>>>>, And< Where< RQRequisition.status, Equal<RQRequisitionStatus.bidding>, Or<RQRequisition.status, Equal<RQRequisitionStatusExt.Revived>, Or<RQRequisition.status, Equal<RQRequisitionStatus.closed>, Or<RQRequisition.status, Equal<RQR
I’m working on a requirement in Acumatica ERP where I need to restrict certain basic or master data by company. By default, this data is shared across companies, but in my case, it needs to be company specific.There are multiple instances where this applies, not just the examples below: Salespersons → used in Sales Orders / Invoices Staff → used in Appointments / Service Orders My current approach is to add a Company ID field to each of these master records and then modify filters in the relevant screens using PXRestrictor to only show data for the current company.However, since this logic needs to be implemented in many places, I’m looking for a more centralized or scalable approach to handle this requirement.Is there a recommended way in Acumatica to control or restrict shared data by company without having to manually filter it in every screen?
export class TimecardWithTotals_Custom { //@linkCommand("ViewTimecard") //@removeDecorator("linkCommand") @columnConfig({ editorConfig: { linkCommand: "ViewTimecard" } }) TimeCardCD: PXFieldState; }I tried all to remove the link command, nothing works
Hi all,I've open-sourced MuiLint, a linter for the Acumatica Modern UI in Visual Studio rather than Visual Studio Code like AcuMate. The HTML merge fails quietly: a selector typo, a self-closing <field/> or a Usr field missing from the TypeScript just means the field never appears. MuiLint flags them as you type.Visual Studio: squiggles, lightbulb fixes, completions, and F12 into the stock HTML or the .ts CI: a command-line tool and a GitHub Action, with SARIF output 13 rules, configurable through .editorconfig, with no running site neededIt works alongside AcuMate (VS Code) and Acuminator (C#) rather than replacing either.Get the .vsix from the latest release. False positives count as bugs, so please report them on GitHub or here.Not affiliated with or endorsed by Acumatica.
when creating a new Stock Item and typing in the Inventory ID field, Acumatica does not display matching existing Inventory IDs as autocomplete suggestions. This behavior is available in places such as the Sales Order line Inventory ID field.The requirement is to provide a similar autocomplete/drop-down suggestion list while typing in the Inventory ID field on IN202500. For example, if the user types LAP, the field should suggest existing Inventory IDs such as LAP-001, LAP-002, etc. However, the user must still be able to enter a completely new Inventory ID (for example, LAP-004) and create a new Stock Item. In other words, the suggestions should assist the user but should not require the entered value to already exist.I would appreciate any guidance on the recommended Acumatica 25R2 approach or customization code for achieving this while preserving the standard InventoryRaw/dimension and Inventory ID creation behavior. Thanks in advance!
I am trying to override a method in the Self Service Portal installed as MUI. The error states that my signature doesn’t match the one I am overriding. Looks correct to me... public class ICSInventoryLineMaint : PXGraphExtension<SPInventoryItemMaint> { public static bool IsActive() => true; public delegate IEnumerable FetchItemsDelegate(FetchItemsSource source = FetchItemsSource.Catalog, bool readOnly = false); [PXOverride] public IEnumerable FetchItems(FetchItemsSource source = FetchItemsSource.Catalog, bool readOnly = false, FetchItemsDelegate base_FetchItems = null) {Here is a screen shot showing the squiggleThe original method signature is:public virtual IEnumerable FetchItems( FetchItemsSource source = FetchItemsSource.Catalog, bool readOnly = false){I set my delegate as optional as this is a necessary thing to do when there is an optional parameter in the original signature.It looks like my signature matches the original.Any idea what I have done wrong?
We're on 2026 R1 and building field-change history for time-in-stage reporting, starting with CRLead.Status and CROpportunity.StageID. Each change should add a row to a custom table, BXFieldHistory (entity NoteID, field name, old value, new value, changed by, changed on).Updates come from several places: the stock screens, Lead → Opportunity conversion, mass-update screens, and an external integration using the contract-based REST API. So we plan to attach a custom attribute (a PXEventSubscriberAttribute subclass) to the fields through a DAC extension with PXMergeAttributes, rather than one graph extension per screen.public class BXTrackHistoryAttribute : PXEventSubscriberAttribute, IPXRowUpdatedSubscriber, IPXRowPersistedSubscriber{ // RowUpdated: compare e.Row vs e.OldRow, remember the change // RowPersisted: write the BXFieldHistory row}What's the supported way to write the BXFieldHistory row from inside the attribute, so it commits or rolls back with the parent record in e
I’m in the process of converting custom screens from classic to modern UI for 26R1. Some of these screens are primarily used by shop floor employees via the mobile app. Is there anything special I need to do for that, or will they still keep working? Are there upcoming changes that will require updating the mapping to accommodate the move to the new UI?I haven’t been able to find answers on this.
Hi, I am trying to make API calls with O Auth 2 Authentication but facing some issues, previously I used Authentication based on Cookie. So I followed the steps to create an O Auth 2 connection, create a client id, client secret with O Auth 2 Flow as ‘Resource Owner Password Credentials. The Bearer token is getting generated when I hit this access token URL “/identity/connect/token”. The issue is whenever I make an API call with the generated token I get a 200 response with No data (image attached). First I got a response something like this :<script> window.open("/Main","_top");</script>So I passed the Accept and Content-Type in the header and then started getting an empty response. (Note: A bulk import is happening from Acumatica using APIs, so is this because of API usage limits? I am not sure about this)I'm new to this system and wonder if I'm missing something. Thanks
Hello,I’m working on a customization that extends a standard Acumatica screen. I’ve added several new fields, and this customization is part of our module. When we deploy the module, we also want to deploy the related help content.I created a new Wiki and successfully added help articles for our custom screens. My question is: How can we deploy an updated help article for a standard Acumatica screen as part of our module?Any guidance or best practices would be appreciated.
acuminator-mcp: Acuminator as an MCP servercontou-consulting/acuminator-mcp: Acuminator MCP ServerAcuminator is the Roslyn analyzer that ships with Acumatica. acuminator-mcp exposes it over MCP so AI assistants (Claude Code, Cursor, etc.) can run it against their own output.Three tools:analyze_project runs Acuminator against a .csproj or .sln, returns diagnostics as code, file, line, column, project. analyze_snippet analyzes a raw C# snippet against a reference project (auto-discovered from the working directory). get_diagnostic_docs fetches the official docs for a PXNNNN code.Diagnostic messages are omitted on purpose. The code is the handle, the agent looks up details when it needs them. All three tools are marked read-only so auto-approve runs them without prompting.InstallWindows, .NET Framework 4.8 (the runner is net48 only, auto-downloaded on first use), Python 3.10+, pipx.pipx install git+https://github.com/contou-consulting/acuminator-mcp.git@v0.1.1claude mcp add --scope user a
I am trying to add the customer order number on the add payments smart panel. I read that this can be done by using delegates, but I am struggling to get this to work.I added the dac: using PX.Data;using PX.Objects.CA;using PX.Objects.SO;namespace PX.Objects.CA{ public class PaymentInfoExt : PXCacheExtension<PaymentInfo> { #region UsrCustomerOrderNbr [PXString(40)] [PXUIField(DisplayName = "Customer Order Nbr", Enabled = false)] public virtual string UsrCustomerOrderNbr { get; set; } public abstract class usrCustomerOrderNbr : PX.Data.BQL.BqlString.Field<usrCustomerOrderNbr> { } #endregion }} using PX.Data;using PX.Objects.AR;using PX.Objects.CA;using PX.Objects.SO;using System.Collections;namespace PX.Objects.CA{ public class CATranEntryExt : PXGraphExtension<CATranEntry> { [PXOverride] public virtual IEnumerable payments(Func<IEnumerable> baseMethod) { foreach (PXResult&l
Hi all, could not find any related topic and being confused by MYOB support in the past have a silly question. Our setup has a lot of published customisations 10+ for example. If I need to re-publish one of them or update the one of the existing custimisation is that possible or do all customisation need to un-published and republished again?
I’m trying to add a new tab to the purchase order screen and add a placeholder fieldset that spans the entire width of the tab that someone can add user defined fields too.Before I can begin to explore the typescript and html side of things I can’t even upload files from my computer to the customization after extending the Purchase Order screen. (The Files or Modern UI files I don’t see an upload widget)I see the typescript and html from the purchase order screen am I supposed to edit that or upload my own?The other forum threads I’ve seen show typescript samples but no instructions on how they got that far.
Hello,I have a customization package that was originally created for Acumatica 2025 R1. I imported it into the Modern Portal (2026 R1), published it, clicked Convert to Modern UI, and published again.After that I'm not sure how to add these screens to the portal menu. They do not appear in the Select Forms dialog when I try to add them to a workspace.I also noticed that the Portal Map screen no longer exists in 2026 R1. When I open the Site Map, set a Workspace and Category for my screens, save, and then refresh the page, my changes are lost.I must be missing something in the deployment process. Is there a documented workflow for adding custom screens to the Modern Portal menu in 2026 R1?Any help is appreciated. Thank you!
Adding a restocking fee to an RC return order | Community Has anyone implemented a Shopify restocking fee import into Acumatica RC refund orders?I’m looking for a code-level approach to retrieve the restocking fee from Shopify and add it as a separate line to the RC refund order.I checked the Shopify refund data and couldn’t find the restocking fee directly in the REST OrderRefund model.Is there an existing Acumatica API/model or recommended approach to retrieve the Shopify restocking fee and add it to the refund order?
I have seen this come up in the Modern UI Issues thread. We are not live on 26R1 yet, but pop-up windows not reliably remembering their size has been an ongoing frustration during testing.I found a workaround, but no documentation for it. Does anyone know how this actually works, or where it is documented? I would rather set it properly than rely on a browser-side hack.26R1 (possibly earlier) appears to store pop-up window dimensions in the browser's local storage, keyed by screen ID. Adding or editing key/value pairs changes the size the pop-up opens at.Example: from Sales Orders (SO301000), clicking the Customer ID link opens Customers (AR303000) in a pop-up window. By default it opens too small, and resizing it does not reliably persist. Adding or editing these keys in local storage makes it open at a consistent size:AR303000_oheightAR303000_owidthThere are also iheight and iwidth keys. I do not know what distinguishes the "o" set from the "i" set. (Outer vs. inner frame, maybe?) W
npm run watch --- --env customFolder=development screenIds="TR300300" run successful but in browser my screen is not changed. But if i republish my project change become
Hi,I have a Labor Item filed on grid and when I update the field on one line, value changes for this field for other lines. And in the cache it looks right. But to see the changes on grid, I need to hit the Refresh button for changes to be visible. The logic of updating the field for other lines is written in RowUpdated event handler and i wrote View.RequestRefresh() for FieldUpdated event handler but it did nothing too. I tried adding AutoCallBack for grid with Refresh command and for target i wrote the id of the grid. And, well, it refreshes but only when i click on other cell of grid. And when i just click on my grid or want to change some field, the grid is always refreshing. So I dont think this option works for me. What is the recommended approach to force the grid to repaint secondary cached rows after a field update without losing input focus or requiring a manual refresh button click?
Environment: Acumatica 2026 R1 (SaaS), Modern UI, screen EP305000 (Employee Time Cards). We’re new to Acumatica and building our first customizations.We've added a custom column to the Time Entry Summary grid that opens a dialog for the selected row. It works perfectly with a mouse. We cannot find any way to reach or activate it from the keyboard, and we've run out of documented options. Classic UI has PXDSCallbackCommand.ShortcutKey for binding a key combination to a callback command. What replaces it in the Modern UI? We'd be happy with a screen-level hotkey that acts on the currently selected row — it doesn't have to be cell focus.What we builtAn unbound field on a cache extension — no database column, value computed server-side:public sealed class EPTimeCardSummaryNoteStatusExt : PXCacheExtension<TimeCardMaint.EPTimeCardSummaryWithInfo>{ public abstract class usrNoteStatus : IBqlField { } [PXString(24, IsUnicode = true)] [PXUIField(DisplayName = "Daily Notes")]
I’m stumped here. I have a screen with a tree view driving a form and details grid. this was working perfectly in the classic UI but I simply cannot get it functioning in the MUI. The modern UI displays the tree nodes correctly, but no matter what I do, the grid and form stay empty as if totally disconnected from the tree nodes. Anyone have suggestions or direction? The documentation has very few examples, and I also wasn’t able to find any answers by reviewing the front end code for the Configuration Entry screen. I’m assuming IF the issue is in the front end code, it’s in the “@treeConfig” decorator, but I’ve tried changing so many things and it hasn’t affected the dependent form or grid at all. I’m left thinking something may need to be changed in the graph. Classic UI, from and grid load as expectedASPX from Classic UI <%@ Page Language="C#" MasterPageFile="~/MasterPages/FormTab.master" AutoEventWireup="true" ValidateRequest="false" CodeFile="PV302010.aspx.cs" Inherits="Page_PV
Hi @Everyone I am getting issue in Modern UI files when we extension screen in multiple project Example :- we have Bill of material screen in Acumatica so extension file Main File :- AM208000.ts @gridConfig({ preset: GridPreset.Details, pagerMode: GridPagerMode.NextPrevFirstLast, adjustPageSize: true, autoRepaint: ["BomMatlRecords", "BomStepRecords", "BomToolRecords", "BomOvhdRecords", "OutsideProcessingOperationSelected", "CurySettings_AMBomOper"],})export class AMBomOper extends PXView {} Extension 1 :- AM208000_EWPAQMS_generatedunder ts file we have code export interface AMBomOper_EWPAQMS_generated extends AMBomOper { }@gridConfig({ preset: GridPreset.Details, pagerMode: GridPagerMode.NextPrevFirstLast, adjustPageSize: true, autoRepaint: ["EWQCBOMVariables", "EWQCInspectionPlanDetail", "EWQCAssociateChecklistGroups"],})export class AMBomOper_EWPAQMS_generated {}Issue :- my code is working but main view under the autoRepaint its not working while i publishing my files i dont know ho
Hello everyone,I’m facing a very disturbing issue regarding modern UI. I have a really basic processing screen, to mass update Matrix Items.When trying to access this screen I have the following error : The view [Blank] doesn’t exist. Here are the stack traces : I don’t have this error on my local instance, just on the customer’s one.Error seems to be realted to the note process, I tried so many configuration but I can’t make things work. If I go to “Applay updates”, and press the “Reset Caches” Action, everything MIGHT work, until the next publication. I even tried changing the screenID since there seems to be some corrupted info stored in some cache, but it didn’t solve anything. I don’t understand why at all… Does anyone have any idea? Attached you’ll find : -My graph (as a txt)-The DACs used in the screen. (as a txt).-My Modern UI files and my classic UI files in the customization project. If you need any other information, please ask. Have a great day.
I can publish with cleanup if I go into every single project and select from the menu but is there a way to do it from the Customization projects page?
I thought I would be clever with a synchronization project. I need to know when the last time I synced the data in a INSiteStatusByCostCenter record. So I created a separate table called INSiteStatusByCostCenterTPSync. This is the DAC: [Serializable] [PXTable(typeof(INSiteStatusByCostCenter.inventoryID), typeof(INSiteStatusByCostCenter.subItemID), typeof(INSiteStatusByCostCenter.siteID), typeof(INSiteStatusByCostCenter.costCenterID), IsOptional = true)] public class INSiteStatusByCostCenterTPSync : PXCacheExtension<PX.Objects.IN.INSiteStatusByCostCenter> { #region InventoryID [PXDBInt(IsKey = true)] public virtual Int32? InventoryID { get; set; } public abstract class inventoryID : BqlInt.Field<inventoryID> { } #endregion #region SubItemID [PXDBInt(IsKey = true)] public virtual Int32? SubItemID { get; set; } public abstract class subItemID : BqlInt.Field<subItemID> { } #endregion #region SiteID [PXDBInt(IsKey = true)] public
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.