Archives / 2019 / February
  • How to add parallelism to Shipments creation in Acumatica

    Hello everybody,

    Today I want to leave short note on new feature of Acumatica: ParallelProcessingOptions. Main purpose of that class is adding paralelism to processing screens. Take a look on it's declaration:

    public abstract class PXProcessingBase<Table> : PXSelectBase<Table>, IPXProcessing, IPXProcessingWithCustomDelegate where Table : class, IBqlTable, new()


       . .  .

       public System.Action<PXParallelProcessingOptions> ParallelProcessingOptions;

       . .


    As you can see, ParallelProcessingOptions is a member of PXProcessingBase, while PXProcessingBase is a parent for PXProcessing. For Acumatica developers it means that starting from 2018 R2 you can easily turn on parallel … more

  • How to filter customer by Email in Acumatica API with Postman

    Hello everybody,

    I want to add few more words about Acumatica API usage.

    Recently I was asked on how to find customer by email in Acumatica. And I was asked to provide example of Postman functionality. That wasn't easy task, first of all because I'm not very skilful in Postman, but after few more efforts I was able to deliver Postman url.

    But first of all let's consider how to configure Acumatica.

    Acumatica configuration.

    First of all, you'll need to either use your own endpoint, or default. For learning sake I recommend you to use your own. Also add customers screen to it. First gif visualizes this process:

    I want to add few comments on this visualtion. Object name, that I gave: … more

  • Addition to PXDatabase.Update in Acumatica

    Hello everybody,

    today I want to share a new feature for me in Acumatica from code standpoint. 

    So, suppose that you want to update some column in Acumatica database, but you want to avoid graph creation, loading necessary fields, and all that you need to do is just update column. For example over adding some value.

    You can't achieve it with simple call to


    Or if you can, then let me know, because I didn't find the way how to do it. 

    But instead I found another new method in Acumatica which is named PXUpdate.

    For example you can use this method for adding to each email in table contact value ".someaddition"

    PXUpdate<Set<Contact.eMail, Add<Contact.eMail,  … more

  • How to get companyID in Acumatica 2

    Hello everybody,

    today I want to leave another post related to getting Acumatica. There is one more way of gettinc current company id. For this purpose you can use class of Acuamtica named SharedFunctions.

    It has plenty of interesting staff, as well as getting Current company id. Take a look on it:

    var companyId = SharedFunctions.GetCurrentCompanyId();


  • How to interfere with Acumatica after publish of customization

    Hello everybody,

    today I want to tell you about interesting class in Acumatica: CustomizationPlugin. Take a look on how reflector shows it's source code:

    namespace Customization


      public abstract class CustomizationPlugin


        public virtual void OnPublished()



        public virtual void UpdateDatabase()



        public void WriteLog(string msg)






    As you can see, this class has three methods:




    Each of those events allows you to update Acumatica after some events happening. For example after publish, on stage of updating database, and also you can use it … more

  • How to override properly CreatePaymentProc method of SOOrderEntry graph in Acumatica

    Hello everybody,

    today I want to leave short note on how to override and call CreatePaymentProc method of Acumatica which I discovered today with Naveen from Kensium.

    My favorite way of overriding methods in Acuamtica with usage of Action and passing there parameters doesn't work. That is because Acumatica uses in method CreatePaymentProc out modifier. Due to this, delegate declaration is needed. 

    After some efforts and refactorings we found following code that is working:

    public class SOOrderEntryExt : PXGraphExtension<SOOrderEntry>


        public delegate void CreatePaymentBase(SOOrder order, out PXGraph target, string paymentType);


        public virtual void  … more

  • How to increase length of Customer id column

    Hello everybody,

    today I want to describe interesting case. Recently I was asked to increase length of Customer ID at page AR303000.

    As usually such tasks can be achieved via creating extension to DAC class with setting new length, 

    and with SQL statement that increases length of column. But that is not the case with Customer ID. That is because

    Customer ID is Segmented Selector. And everything related to segmented selectors should be managed 

    at page Segmented Keys page ( CS202000 ). All that is needed to be done is increasing the Length field of segmented keys.

    Other approaches can lead to corruption of segmented keys. Especially if you decide to do it in database with DB scripts.  … more

  • How to shrink database of Acumatica with rebuilding of

    Hello everybody,

    today I want to leave another portion of SQL Server optimization for Acumatica database. In case if your db become huge, and you want to make it smaller, you can try following SQL code:

    DECLARE @Table NVARCHAR(128)  

    DECLARE @Database NVARCHAR(128)

    DECLARE @Command NVARCHAR(500)

    PRINT N'Shrinking database files'


    PRINT N'Rebuilding all indexes'

    SET @Database = DB_NAME()

    SET @Command = 'DECLARE TableCursor CURSOR FOR SELECT ''['' + TABLE_CATALOG + ''].['' + TABLE_SCHEMA + ''].['' + 

        TABLE_NAME + '']'' as TableName FROM [' + @Database + '].INFORMATION_SCHEMA.TABLES 


    EXEC (@Command)  

    OPEN  … more

  • How to find sizes of tables in Acumatica

    Hello everybody,

    today I want to share with you SQL statement that may help you to find sizes of tables occupied by Acumatica. It goes below:


        t.NAME AS TableName,

        s.Name AS SchemaName,

        p.rows AS RowCounts,

        SUM(a.total_pages) * 8 AS TotalSpaceKB, 

        CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,

        CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00 / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceGB,

        SUM(a.used_pages) * 8 AS UsedSpaceKB, 

        CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB, 

        (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB,

        CAST(ROUND(((SUM( … more