Optimizing Large Import

Hi All Want to share with you some good approaches to Import a large amount of data. If you ever tried to import some large set of data from Excel you actually know that it is not as fast as importing data into the SQL table. There are plenty of reasons why it is like this: Data validation Defaulting empty field Running of business logic Data integrity Updating of referenced data Security tracking Audit Of course all these rules have different effects in different modules. It is obvious that GL is much faster than SO Orders. At the same time, AR is faster than SO, but slower than GL. Also… Read more

Acumatica and Microsoft Flow

Hi Everyone, Recently Microsoft has added a new tool to their Office 365- Microsoft Flow With help of my college – Tim Rodman, we have done some investigations on how it can be used with Acumatica. I think that in modern internet of services and things services like Microsoft Flow, Azuqua and Zappier might be very useful. Microsoft flow is most modern here so it does not looks like very mature and stable now. But i belive it is quite promising as Microsoft has enough resources to integrate it with most of Office 365 services. Looking forward to see that progress. However even now it has some nice things, like… Read more

Enabling Upload from Excel for the Grid

Hi All, Today I want to share with you a way how to enable upload form excel for custom grid. Actually this is quite simple – Step 1 – define PXImportAttribute on data the data view under the grid. public class CSCalendarMaint : PXGraph<CSCalendarMaint, CSCalendar> { …        [PXImport]        public PXSelect<CSCalendarExceptions> CSCalendarExceptions; … } Step 2 – enable appropriate Grid Mode (Allow Upload) on the grid properties. This will enable upload button on the grid action bar with standard functionality. In some cases, you may want to have more control on the import process. In this case you also may implement optional interface: IPXPrepareItems. This interface should be implemented on… Read more

Using Colors in Acumatica

Hi All, Today I want to share with one way how you can highlight some Acumatica rows or data with colors or other text styles. Disclaimer: Please note that this way does not follows the standard customization way, so any changes may be not supported in future versions of Acumatica. Also it might be very complex to support this customization during Acumatica upgrades. Before we can change colors, first of all we need to do understand how Acumatica applies styles. Acumatica uses Cascade Style Sheets (CSS). All elements (Forms, Grids, Row, Fields, Buttons, …) are associated with one or many styles. All styles are defined in Acumatica folder itself You… Read more

Custom Formula for ACH/GIRO Providers

Hi All, In the previous article about custom payment providers i have mentioned that Schema file supports several build-in formulas, like: Count – Count of details or nested groups in group TotalCount –  Total lines in all nested groups BlockCount – Count of internal blocks including adjustments for fixed structure CountOneBased –  CountField  + 1. Required if you need calculate header or footer with details TotalCountOneBased – TotalCountField +1. Required if you need calculate header or footer with details You also can add more formulas there. For example if you want to have Count that will calculate header and footer together with details you may need TotalCountTwoBased formula. Please check this code… Read more

Client Events using JavaScript

Hi All, Today I want to share with you one way how you can add some client validations/calculation using JavaScript right in the browser with no accessing server data. In general i would suggest you to not do any complex calculations on client side and always use server for all data manipulations. However in some specific situations this approach may save a lot of processing time because client events may do calculations right in the browser. Also note that client logic will be available only for browser users and will not be triggered from web services API and Mobile application. The scenario that i want to do is quite simple… Read more

PXUIEnabled and PXUIRequired Attributes

Hi All, If you developing something on Acumatica xRP platform you know that changing of the UI fields visibility should be done through PXUIFieldAttribute on the RowSelected event. This works perfect on small screens with limited number of controls. But most of ERP screens are not really small. So most probably you already saw such types of code on the RowSelected in SOOrderEntry graph and many others. Not nice and really hard to support. Luckily now we have a different way to do it: PXUIEnabled – based on provided BQL conditions can automatically change UIFieldAttribute Enabled property. PXUIRequired – based on provided BQL condition can automatically change PXDefaultAttribute PersistingCheck property.… Read more

Getting started with Acumatica xRP Platform

Hi All, Sometimes I get a questions like this: How to start development with Acumatica xRP platform? How complex is it? Where we can get some guidance? So here I want to summarize all thoughts that I have about it. I would select these steps that i would recommend you to do: Ensure Pre-Requisites Get Acumatica Prepare Development Environment Learn Acumatica xRP Platform Do Development Communicate & Support Lets go though each of these steps in details under the cut. Knowledge Pre-Requisites To be able to do development you need to have a knowledge of technology and programming language used in Acumatica. This knowledge outside of Acumatica training course: Proficiency… Read more

100 articles on the Blog

Hi All! Today we have a small anniversary – 100 articles: Thank you for constant support and attention! I really hope that this information useful for you and will do my best to provide you more interesting articles in the future. Meanwhile, your opinion is very important for me, and I would be really happy to hear your feedback, requests and topic suggestions that may help you to know Acumatica better. Have a nice day ahead! Thank you.

Site Configuration using Customization

Hi All, Acumatica as most of web applications has some configurations that are stored on the file system. For example it can be a web.config or any other file that is stored in Site folder itself. During upgrade procedure Acumatica overrides all standard files to ensure that system will work correctly with all latest platform changes correctly. This is correct, as any automatic merge of configurations can cause to compilation errors. This is especially harmful if you site is in public cloud and you have no access to the instance. So that means if you do custom configuration (like redirection rules, filters or custom controls) your changes most probably will… Read more

Acumatica Test Companies

Hi All, As you may know Acumatica does not limit the number of users that can connect to the system but it limits the number of cores that may be used by the system and number of tenants (companies) that can be created and used in the database. However these roles applies only for properly licensed instance. If you are using Acumatica in the trial mode (read more there), you have a limitation on 2 concurrently working users and maximum 10 tenants. Here I want to discuss with you some points number allowed tenants. When you apply license to Acumatica instance, you limit number of production tenants to allowed by… Read more

Reuse Session during API Calls

Hi All, If you using Acumatica Web Services you most probably saw the examples where you need to call Login and GetSchema methods before each valuable operation. This is OK in general, but if you building some complex and high loaded integration as the result you may get something like this: Not very nice as it creates additional traffic network traffic and unnecessary load to server. Much better way is to cache Cookies and Schema on the client side and refresh it only if it was not in use for some period of time. Here I want to share with you an example where I create a new class inherited… Read more

Most Popular Acumatica DAC Attributes

Hi All, Today I want to share with you some statistics on Acumatica xRP Attributes usage across Acumatica ERP Business modules. The goal of this article is to show you a full list of attributes that you may use for customization and also give you a chance to learn some new useful attributes, that you have not seen before. This data was collected from PX.Objects.dll of Acumatica 6 and may be different from version to version. All attributes are sorted by the usage frequency, highlighted by value and grouped by colours: Fields attributes Selectors and aggregate attributes Business logic Others In the brackets you can find approximate value of how… Read more

Alter GL Transaction during Inventory Release

Hi All Today I want to share with you one of possible ways how you can catch the process how Inventory release created a GL Batch and GL Transactions. Lets assume that we want to change description or Sub-Account during inventory receipt release, than i need to do following things: Create extension of INReleaseProcess, that is responsible for release operation. Override ReleaseDocProc, that is doing main release job. In this method we have links to JournalEntry and INRegister, where we can check what is going on and add some additional logic Add RowInserting event to JournalEntry that will handle creation of batch or tran Change description or sub-account where it is required In the… Read more

Encrypted batch payment file (ACH, GIRO)

Hi All, In Acumatica you can easily generate electronic payment files (such as ACH, GIRO and others). By using this process you will have a file that will have payment amounts and other required information. But what about data protection? Bu default payment file will have clear text amounts. Today i want to share with you how you can easily encrypt this file. Payment file will be generated by Acumatica Integration Services Export Scenario. The main class that is responsible for generation file is Integration Services Data Provider. In Acumatica out of the box we have only 2 providers : ACH and GIRO. In my Example i will show you… Read more

Acumatica Test Framework

Hi All, Acumatica has a strong focus on the Platform and Development tools, that can help all our clients and partners to provide better product faster and with lower cost. One of the nice and free tool that Acumatica provides as part of platform is Acumatica Test Framework. Acumatica test Framework is a set of tools and libraries that can be used for unattended black-box testing of any product or customization that is based on Acumatica Platform right in your favorite browser. For interacting with UI controls and components Acumatica Test Framework uses Selenium Web Driver. You can read more about Selenium here. The high level diagram of Test Framework… Read more

Replacing Cache with custom class

Hi All, Today i want to share with you a good trick how you can override original PXCache object. Why you may need it? To replace base cache logic, that should not be executed in some cases. Forbid cache to read data for database in case of virtual DAC Inject required logic to the standard workflow Do not clear cache data on graph clearing Access protected method And many other things. As you may know, that when you (or system) create a new instance of a graph, it will automatically instantiate all caches for each data views that are declared. Unfortunately, because this is unattended process it is almost impossible… Read more

Provide Default Value for Report Parameter from Branch

Hi All, Really often you may want to have some default values for report parameters, that may depend on environment. For example different default warehouse depend on branch where are you working now. Or different warehouse depend on current employee. But unfortunately it is not out of the box functionality in Acumatica. Luckily, using powerful Acumatica Customization engine it is quite easy to do. Let me share with you a way to archive it. Scenario: lets assume that we want to have different default warehouse on Inventory Valuation report based on different branch that is selected as current. We will do this task in 3 steps: Adding custom field to… Read more

Generate Grid Columns Dynamically

Hi All, Today I want to show you an example how you can generate grid columns dynamically. Sometime it is really important for dynamic inquiry report, where you want to show data that may be changed due to some other configurations. To add columns dynamically you should follow this plan: Create a separate method that will generate columns. Call method create above from the graph constructor. Please not that if you put method into any event you need to make sure that you generation columns only once. Also you logic assume that columns may be changes if user select some other values on the same screen you need to make… Read more

Custom Selector Attribute

Hi All, Today I want to discuss with you a ways to define selectors and data for them. Usually you define selectors like this: [PXSelector(typeof(Search<Carrier.carrierID>))] In this case system will automatically select value from database Carrier table and show list of Carrier IDs to user. In this case you have 2 potential problems: you should have a database table, otherwise you will see an error. There is no way to dynamically change or adjust data that is returned to user You can limited configurations to control selector behavior. To solve these problem Acumatica has a Custom Selector attributes: public class CustomerPriceClassAttribute : PXCustomSelectorAttribute {     public CustomerPriceClassAttribute()         : base(typeof(ARPriceClass.priceClassID))    … Read more