Archives / 2018 / September
  • Acumatica Test Framework in Acumatica. Part 2 (Practice)

    In this part we implement real automation test for creating POOrder - screen PO301000;

    Before to start, please read first part of rhis post. 

    The main steps:

    Create solution and add nedeed components from SDK folder

    Add new project (Net library) to solution 

    Configure generator and run it for create .cs class with all components on screen PO301000

    Add POOrder.cs and describe some methods for test

    Add the main class (for example F100_Part1_Lesson1.cs) where we describe Execute() method

    Run solution, view result of test

           Create solution and add nedeed components from SDK folder

    CCreate a test solution by using Visual Studio 2017 as follows:

    In Visual Studio 2017, … more

  • Acumatica Test Framework in Acumatica. Part 1 (theory)

    Ok, 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 or nice example of it is this video.

    The high level diagram of Test Framework components is described here:

    Acumatica Test Framework Architecture:

    As you can see here the core thing of the test framework is Element IDs – Each HTML element has own ID how browser can find it. … more

  • How to use Chart component in Acumatica

    Hello everybody,

    today I want to share one more trick on how to chart in Acumatica. Imagine following case: you have some information about your sales orders, and want somehow to visualize it wiht nice picture. 

    How to do it? You can use charting component of windows. Here I've described building elements of charting library. Charting library is located at System.Drawing library.

    Main purpose of this article is to demonstrate how to use Charting library without going deep about image management. 

    Basically code shows how to load filtered information about sales order add data points, generate dynamic picture and show it on the form.

    Firstly let me show to you picture part:

    <%@ Page  … more

  • Dependency Injection with Acumatica and Autofac from inside customization

    Hello everybody,

    today I want to write a few words about something that I consider as cool achievement: dependency injection in Acumatica with help of Autofac. Before sharing any code I'd like to mention why Autofac and not other framework? Because Acumatica itself is built on Autofac. For you as a developer it basically means that you can omit nuger versioning or any kind of versioning with Acumatica. You just reference Autofac, and it will be available for you in your project.

    Keeping this idea in mind, let's suppose that you have following class in your code:

    public class EmailNotificationSender : IEmailNotificationSender


        public void SendEmail(string to, string subject, string  … more

  • How to use column name in DB that differs from field name in DAC class

    Hello everybody,

    today I want to leave a short workaround for the following case:

    you have DAC class, with column Data, but in db you have column BlobData. How to map your BlobData on Data? For such case you can use attribute DatabaseFieldName.

    Take a note, how Acumatica used it:

    [PXDBBinary(DatabaseFieldName = "Data")]

    public virtual byte[] BlobData { get; set; } more

  • Technology is not the biggest threat to the bank

    In this article I want to express my opinion on why I disagree with title that technology is threat to the bank of Antony Jenkins.

    First of all, I'd like to point that anything that is new, can poses a threat to something, that already exists on the market. And task of those which exist is either to use it, or they will be forced to close themselves.

    First subheading of Antony is job losses of bank workers. I definitely agree that job losses of bank workers will happen. And absolutely agree that job losses will happen because of improvement of data collecting, AI process data faster etc. But I disagree that such a think poses any threat to bank. I can say even opposite, such job loss … more

  • Investments terms in Real estate

    Hello everybody,

    today I want to document some terms related to real estate investment with simple words.

    NOI or Net operating income

    NOI or net operating income is income after all expances but before morgage payment ( in case of real estate ). 

    Cap rate

    Cap rate or capitalization rate is something which says what profit you'll get in percentage from benefiting something that you use during one year.

    I assume with example it will be easier to understand.

    Suppose, you want to buy a flat which you plan to give as a rent for others.

    You pay for buying a flat 40 000$. Monthly rent of flat income after paying all bills is 350$. What is cap rate ( capitalization rate )? Below goes the … more

  • How to send email via Acumatica notifications mechanism

    Hello everybody,

    Today I want to share a note on how to send email via Acumatica notifications mechanism:

    var sender = new NotificationGenerator


        To = "",

        Subject = $"Subject information {DateTime.Now:d}",

        Body = "Body od message",

        BodyFormat = EmailFormatListAttribute.Text



    With such code, Acumatica will send email.


  • Notes on Acumatica developers summit 2018

    Hi all,

    Recently I visited virtual developers conference for Acumatica.

    Here I want to document some details that were mentioned during that summit.

    First of all, I'd like to say that idea from Gabriel Michaud about making some global functionality for each page.

    Using PXGraph extension for creating a global button

    Consider for example how to implement a global button using PXGraphExtension:

    public class GloalGraphExtension : PXGraphExtension<PXGraph>


        public override void Initialize()


            if (!string.IsNullOrEmpty(Base.PrimaryView))


               //Add a "Test" button in the toolbar    

               Type primaryViewItemType = Base.Views[Base.PrimaryView]. … more

  • Acumatica developers conference 2018 part 1

    Hello everybody,

    I want to summarize what I've seen and heard at latest Acumatica Developers conference.

    First of all, I'd like to say that idea from Gabriel Michaud about using of attributes that can save plenty of time during development.

    Part 1

    Everyday trips and tricks (Magic attributes and BQL operands)

    Lets start. For examle how to make a field required (or visible, or enabled) dynamically:

    Traditional way (old version):

    protected virtual void SOOrder_RowSelected(PXCache cache, PXRowSelectedEventArgs e)


        SOOrder doc = e.Row as SOOrder;

        if (doc == null)




        if (doc.OrderType == "SO")


              PXDefaultAttribute. … more

  • Microsoft Chart basic elements

    Hello everybody,

    recently I've found Microsoft Chart elements description picture, and was very much surprised with it. So I've decided to leave picture at mine blog as well.

    First of all take a look at those elements on the picture;

    Description of Chart Details

    Axis Label

    Labels along axis.

    Axis TitleThe title of an axis.

    Chart AreaThe chart picture consists of one or more chart areas, which are rectangular areas that are used to draw series, labels, axes, grid lines, tick marks, and so on. Multiple series can be plotted in one chart area, depending on the chart types involved.

    The plot area, used to plot chart data, is also contained within a chart area.

    Chart PictureThe chart … more

  • Select distinct values in Acumatica selector

    Hello everybody,

    today I want to post how to make distinct select from some column in Acumatica.

    So, imagine that you've decided not to normalize some column for Acumatica to SOOrder class. For example like this:

    public class SOOrderExt: PXCacheExtension<SOOrder>


            #region Region

            public abstract class region : IBqlField




            [PXUIField(DisplayName = "Region", Visibility = PXUIVisibility.Visible)]

            public virtual string Region { get; set; }


    Then in other place, if you need to make distinct selector for Region, you can use code like this:

    #region Region

     public abstract class region  … more

  • How to speedup parallel processing in Acumatica

    Hello everybody,

    recently I've get advice from Acumaitca on how to speed up parallel processing of sales orders creation with usage of Multithreading. Their advice was to add following line in web.config:

        <add key="AsyncNumbering" value="true" />

    With that line your Acumatica graphs will have separate numbering sequences which can create some gaps in your numberings, but definetely speed up creation of new lines. more

  • Abbreviations in Warehouse management

    Hello everybody,

    today I want to leave a note on warehouse abbreviations. For me all of them are not easy to keep in mind, so I decided to post them here:




    Third party logistics


    Automated data collection


    Advanced planning & scheduling


    Advanced shipment notifications


    Automated Storage Revival system


    Application service provider


    Independent software vendor


    Automatic identification and data collection


    Bill of material is a list materials required to produce an item


    Charged coupled device is a barcode scanner that takes digital image of the barcode instead of … more

  • Some properties of graph in Acumatica

    Hello everybody,

    today I want to mention few interesting properties of Graph in Acumatica:




    Names are pretty self-explanatory, but let's go a bit deeper.


    Imagine following situation: you created some code in graph, and have huge desire to add some logic, which will be executed only when it is used in Import mode. For example in case of import you'd like not to add discount. How to tell this to Acumatica? For example like this:

    if (!sender.Graph.IsImport) AddDiscount(sender, doc);

    This will tell to Acumatica not to add discount to your entity during Import.


    Another use case. Imagine, that you want some logic to be executed during … more