Joins with PXRestrictor

Hi There, There is a chance that you wanted to use PXRestrictor, but there is no needed table to provide a validation. Please note that “BAccountClass” table is not defined in the querry from the PXSelector. Resultantly, the Where condition “rictorAttribute(typeof(Where<BAccountClass.IsInternal, Equal<True>” will not work and will give you an SQL Interpretatino error. Further more, there is not way to add a Join to BAccountClass table from the PXRestrictor attribute, since this is not something supported by Acumatica framework yet. However, there is a relatively easy way to workaround this with subselect query from Where statement using the Exists<> BQL Command. This is not a perfect way from the performance… Read more

Feature Validation in Grid Lines

Hi There! As you may know, Acumatica has a pretty nice and easy way to create and validate if a certain feature is enabled. You can read about it here. However, that way works well only if you have to hide fields, columns, grids, forms. What if you want to hide some records from the grid based on the feature? Normally this is not a trivial task and requires a lot of code in the data view delegates and so on. And even you do all of these things, you won’t be able to use it in the Generic Injuries. I would like to suggest an alternative approach where we… Read more

Add actions to the Process Orders screen (SO501000)

Hello Everyone, I would like to share my experience with the Workflow Automation steps in the Customization Project on this functionality. In the Process Order screen, we have below limited actions that are allowed to be scheduled. Create Shipment Open Order Remove Credit Hold Prepare Invoice Cancel Order Create and Authorize Create and Capture Apart from these actions, we can also add the other actions to this processing screen using Workflow automation steps and also allow us to be scheduled. Please find the steps below. Step 1: In the Customization project, add the Sales Order screen(SO301000) using Add Screen à Customize Existing Screen action. Step 2: On the left menu… Read more

Implement Numbering Sequence for Customized Field

In this article, I would like to cover how to add a numbering sequence to the customized field in the custom screens. Numbering Sequences are useful to generate a unique number or ID each time a user creates a document. I have created a new customized screen i.e. Deck Setup with DeckNbr as a auto-numbering field. Please find the details below. Example Deck Setup Graph Code Sales Order Preference screen customization Introduced a new custom field i.e., Deck Numbering Sequence in the Sales Order Preferences screen. The numbering sequence is to be used to assign IDs to Deck when a new Deck is created by using the Deck Setup screen.… Read more

Working With and Troubleshooting Copy Paste Functionality

Intro Copy pasting data in different software has became a must have quality of life functionality over the years. So, in Acumatica ERP there is of course a built-in mechanism for copy-pasting documents. However, since different documents have different business rules, copy-pasting functionality is not that straight forward and may be a little bit tricky at times. Let’s see how a developer can control the copy-paste behavior and troubleshoot it in case of incorrect behavior. Functionality Description First I’d like to quickly overview the Copy-paste functionality in Acumatica ERP. Copy paste button presents on many forms in the system. It usually looks like that: Let’s see what each button does:… Read more

Add New Custom Feature to the Enable/Disable Features screen (CS100000)

Hi Everyone, Today, I’ll show you how to add a new custom feature to the Enable/Disable screen. This feature is useful when implementing a new integration/connector module and a few screens associated with this module. Below, I have created a sample integration/connector module and developed a couple of screens associated with this module. This custom feature is useful when we want to enable/disable the screens based on the configuration. Here’s how to do it: STEP 1: Create a new customization field by extending the FeatureSet DAC STEP 2: If you wanted to add this new feature under some other module, (Example: Commerce Module) we need to decorate the Feature DAC… Read more

Enable Customization Fields When Document is Completed

Hello Everyone, I would like to share my experience with the Workflow Engine on this requirement, which I recently worked on. Usually, these kinds of tasks are requested by clients/customers to update the customization fields even when the document is completed/closed for reference purposes. For instance, If we have added a customization field at the Sales Order Line level, and still we wanted to edit/update the customization fields when Sales Order document status is changed to completed to have a field as a reference purpose, we need to perform below activities. We need to allow the caches to update in the RowSelected event when Sales Order is Completed status. Extend… Read more

Acumatica Summit 2021 – Keynotes Live

Hi everyone, hope you are stay safe. It has been a long time. Today I would like to share with you some update about Acumatica Summit 2021. There are a lots of fantastic thing in summit, and this year is very hard for us to travel, but do not worry you can watch key notes live: Day 1 Keynote Livestream on 7/19: acumati.ca/3gt53aJ Day 2 Keynote Livestream on 7/20: acumati.ca/3gzelRr Have a great day everyone and stay safe.

Dependency Injection in Acumatica ERP

Recently I had a chance to work with Dependency Injection in Acumatica ERP. I want to share how it works and how one can use it. Let’s assume that we have a REST Service, which we want to inject into Sales Order Entry and work with it using Actions. First, we need to create interfaces that we will use for injecting the implementations into the Sales Order Entry. Now we can add the implementations of the interfaces : and The final step will be to register our implementations with Autofac, which is done by defining an Autofac Module and overriding the Load method: Now we can inject our types into… Read more

Playing with PXSelectorAttribute

Sometimes it’s necessary to add some columns to Selector to show different values , calculated based on complex formulas involving multiple tables. Usually these kind of tasks are requested by customers to show different quantities for item/warehouse selectors based on some simple or complex calculation rules. For example, you are implementing custom availability based on some item parameters and need to show the quantity by warehouse. Below I will describe one of the ways to implement this kind of field. Let’s assume that we need to show some Available Quantity for the Warehouse in the Warehouse Selector on the Sales Order Line. Below is the SiteID field definition from the… Read more

Show user-friendly description instead of a field value in the grid for a selector

In many cases it will be more usable to display a user-friendly description instead of a field value in the grid for a selector. To do that, firstly you should add DescriptionField for the corresponding selector definition in your DAC, and then either add SelectorMode to the selector definition, or add DisplayMode property to the aspx. For example, before adding DisplayMode property, my grids contains just field values: After I add DisplayMode=”Text”, a DescriptionField value is displayed instead of field value: The other supported values of the DisplayMode property are “Hint” (the column cell contains the value-description pair of the field) and “Value” (default value, the column cell contains the… Read more

Random Value cannot be null error on implementing EPApprovalAutomation.

It took me weeks to figure out what is happening on my screen when I implement the Standard approval automation on my customized screen. The Culprit: The NoteID field with [PXDBGuid()] which is the default attribute when you generate new dac via Customization Project. just change it to [PXNote] because NoteID is required in EPApprovalAutomation class for the reference of Document to Document relationship. Happy Coding!

Redirection to a Dashboard in Acumatica ERP

In this article I cover different ways to navigate to a dashboard in Acumatica ERP. Redirection from Generic Inquiry Let’s start with the simple example of navigation to a dashboard from a generic inquiry. For this example I use generic inquiry that just shows a list of customers. Our goal in this example is to add navigation from the generic inquiry to the Customer View dashboard for specific customer. To do that we need to edit the generic inquiry as following: Open the generic inquiry in edit mode and open Navigation tab. Click Plus button in Screens section. Select sitemap node corresponding to the destination dashboard. As the dashboard in… Read more

Switch between Old and New Processing result UI

Hi All, You know that starting from Acumatica 2019r1 there is a new processing result window that shows more information about record processed and pending. However you should know that it is possible to control this behavior via graph code. There is a virtual property at PXGraph -> IsProcessing which identifies if this page should display processing result in the new format. And you can override this property in a processing graph to not display the Processing dialog box on the processing page. If the value is false, the progress and the result of the processing are displayed on the page toolbar. By default, the value is true (the Processing… Read more

Maximize Selector Drop-Down with JavaScript

Hi Everyone, Some time ago I had a question – is it possible to automatically maximize (expand) selector window when we opens it. Out of my research I know now that there is no settings for that in the selector configurations but this is very possible with Javascript. And following another example of Javascript in Acumatica I want to share this example with you. First thing we need to do is to add a Javascript control to Acumatica grid where you are planning to expand selector. Than we just add the Javascript method that finds the selector panel from passed parameters and calls it’s method to expand Now we need… Read more

Implement PXTransactionScope

Sometimes, part of your coding requires you to revert any transactions that were processed in the middle of a transaction. Acumatica Framework has the function to cope with that. That is using the PXTransactionScope(); As mentioned also in the Blog before by Sergey Marenich (ctrl + click to follow link : https://asiablog.acumatica.com/2015/11/using-scopes-in-acumatica.html) PXTransactionScope– this scope will initialize new transaction, so you can wrap-up some changes into transaction, when system will revert all changes together on any exception. Do not forget to call commit for the transaction scope before dispose it. Sample code snippet below is one of the many ways you can implement the PXTransactionScope. You must call the method ts.Complete(); to… Read more

Rename Acumatica Instance

Hi All, Once in a while everyone need to rename Acumatica instance to the better name. In this article I want to share with you 2 ways how you can do that Using Wizard Acumatica Configuration Wizard has a nice function to rename any of the installed instances. Renaming includes the Instance name and Virtual Directory Name. To do so: Open Wizard Go to “Perform Application Maintenance” Choose instance you want to rename Click “Instance Info” Use “Rename” links next to “Instance Name” or “Virtual Directory Name” Don’t forget to Save and close the window using OK button. Sql Server Database should be renamed manually, but wizard can help to… Read more

Run report with Side Panel

Hi everyone, Since version 2018R2, Acumatica has released feature call Side Panel on generic inquiry screen. It is a great feature to enhance the usability. In case that you have missed it, you can also check released notes here and configuration here. With side panel now, you can help user work more effectively by avoiding to many navigation. In one screen, you can do a lot of things for instance: view details of record or linked object, review dashboard, report, etc … Today I would like to share about the configuration. It can help user who need to work with some report or printed form can access it easier. Let… Read more

Acuminator Outlining

Hello everyone!This is a third post in the series describing Acuminator. It will be dedicated to the feature called outlining. So, what does outlining mean? It’s an ability to collapse code parts unimportant to you at the moment in the code editor. I’m sure every .Net developer that uses Visual Studio or VS Code has seen this feature. You can collapse classes, methods and many other syntax structures. In C#, you can also add your own collapsible blocks with regions. Acuminator Outlining Now you may ask: “How is this feature related to Acumatica?” There are many really big BQL queries in Acumatica code. Some of them do not even fit… Read more

Where Acumatica name came from?

Hi All, Just a short interesting question “Why Acumatica is named Acumatica”? Actually it is combination of words Accounting (accou-) and Automatics (-matic). So we get “Accu-matic-a” 🙂 Last “A” is just for good sound. Also if you ever found wandering why PXGraph is named as Graph, than there is a reason – it is related to data structure inside. Using DataViews you define relation between database tables. These relations looks like a graph-structure as has a lot of direct and indirect references back and forth. So that is the reason.