How to Use Delta Synchronization with OData API

For various reporting, BI, or data warehousing scenarios you often need a way to export and synchronize data between an Acumatica instance and your solution. OData API is a good fit for read-only scenarios, and it is widely used by different ISV solutions and external BI services such as Power BI. But reading the whole entity set every time when you need fresh data is very resource-consuming, so the preferred way is to use delta sync. What Is Delta Synchronization Delta (Differential) sync is a type of synchronization technology that only synchronizes newly created or updated records. It drastically reduces the amount of data passed between an Acumatica instance and… Read more

Remove Action Menu from Actions Drop-down

Hi All, Show example for you today – how to remove action from menu based on example of ChangeID function in CustomerMaint graph. Problem If you take VendorMaint and try to find who ChangeID is declared there you will be able to find following code: So you can see here that ChangeID button is added as a menu to the Action button. This works pretty well accordingly to example with adding sub-menu actions here. Now the question – what if we need to remove or hide this action? We can’t use automation steps as they cannot make button invisible. We cannot use PXUIFieldAttribute on ChangeID as this button is already… Read more

Open a Report in Acumatica

Hi All, Following a previous post about redirection architecture I want to show you an example of how can you use it to open a report. Here we need to use PXReportRequiredException, as it designed to open reports. But also we need to provide a report name and report parameters. Report Name is just a Screen ID that you can find in the sitemap Report Parameters is a Dictionary<string, string> that is basically a key-value pair. Key is a parameter name and value is a value. Parameter names are taken directly from the report. Here is the example code to create a button for report. I get this code from… Read more

Redirection and Dialog in Acumatica

Hi All, In the web application is mostly one-way communication – Browser send request, server receives it and response. This means If we don’t use a special technologies like a Web Sockets, that there is no way for server to communicate tho the browser Also if we don’t really know where is the user and if he still will interact with us. So here we have 2 major questions: How to return control to user when server logic needs it? Prevent data further data modifications? For example if dialog is required when user clicked save. In Acumatica we have solved these problems with exceptions. When we need to rise a… Read more

“This Form Cannot be Automated” – Investigation

Hi Everyone, I think everyone have seen this error message at leas once. This error message can appear as on customized Acumatica screens as on standard screens as well. But what is the reason of this error and what to do with it? Explanations This error is related to screen layout. When Acumatica need to perform any of the screen automations (like, scheduling, notifications, import/export data, web-services API calls, automation steps and so on), Acumatica parse screen layout and generates in-memory screen structure based on ASPX markup. This is needed to identify how many controls, forms, grids are located on the screen, what type of controls and how can they… Read more

Non-Programming Customization with Automation Step

Hi all, As you many know about this ” Some Acumatica ERP functionality is implemented through automation steps, which are steps to be executed on an Acumatica ERP form for specific records or objects generated in the system, depending on the properties of the record or object. For a data entry Acumatica ERP form, you can create any number of automation steps that redefine the functionality of toolbar actions, add values to combo box lists, or provide default values for the form elements, based on the properties of the records under processing. ” – Help Document Today I would like to share with you about the ability to do customization with… Read more

Grids Master-Detail Relationship

Hi Everyone, Sometimes you need to have a screen with 2 grids that depend on each other. When you change line in one grid, it should refresh records in another. In this case you need to establish Grids Master-Detail relationship. In general master-detail relationship for grids is almost the same as for form-grid. You can read more about it in T200 Framework Fundamentials Training Guide, Example 2.2, Setting Up the Master-Detail Relationship Between DataAs a summary from the training, we need to do 3 points Put PXDBDefault attributes in child DAC to auto-initialize dependent keys. Put PXParent attribute in child DAC to allow cascade deletion and few other functions. Use… Read more

Common Issues in Addon Solution Architecture

Hi Everyone, During past time, I used to review several ISV solutions and have collected some common issues that may significantly complicate development and support. Unsplittable Code Problem – Some ISV Solutions code and Acumatica code are very heavily connected and looks like “yin yang”. That means that there is no clear boarder between Acumatica and ISV solution that gives hard time to understand where exactly is the problem – Acumatica or Customization. And this leads to even bigger problem – unsplittable code makes impossible for ISV team to investigate bugs and issues – are they related to Acumatica or Custom code. In the end it makes impossible to escalate… Read more

Access Restrictions by Workgroups

Hi All, Today I want to share with you a quite advanced customization that can significantly enhance your data security. Lets start with business task first: Customer want to limit visibility of certain documents and entities between different users and group of users: Users should see the entity or document if he is creator, owner or belongs to a workgroup that can see the document. If users see the entity or document than all his managers should also see the same document. Users who don’t belong to assigned workgroups should not see the document or entity. It is possible that documents or entities are assigned to multiple workgroups simultaneously For… Read more

Files Sync Providers

Hi All, Acumatica architecture is very extensible and many functions can be extended just with new class of specific interface/base class.Import Data Providers, Dashboards, Credit Card Processing, Bank Statement Import and so on. Most of them already described in different sources. However today I want to show you how to create a custom File Sync Provider. The list of providers that you can see in the Synchronization Types is actually dynamic. That means you can add there more functions without changing base code of Acumatica. To add a new File Sync Provider you need to to 2 things: Create a Provider class that can handle files Export/Import Extend Combo-box to… Read more

Sales Basics For Developers

Hi All, Here I want to share with you some information and my observations on how ERP Sales works in our business. As developers or consultants we are not often involved in sales processes and not often understand how company earns money. However I believe that is an essential knowledge for every single employee as only trough understanding of company targets we can properly define priorities. This is continuation of my previous article – Accounting Basics for Developers. Nature of Sales Sales in general is very chaotic thing that may be affected by so many different aspects: personal preferences (like/dislike more), knowledge (know how to use), personal relationship (trust someone… Read more

Working with Generic Inquiries from Code

Generic Inquiries is a powerful tool to build ‘no code customizations’ for Acumatica ERP. However, it is also a tool that may be used in code too. In this article I show couple of examples of working with Generic Inquiries from code. Redirect to a Generic Inquiry You can redirect user to a Generic Inquiry from code almost the same way you redirect user to any other screen. To do that, you throw special PXRedirectToGIREquiredException. This exception has several overloads with different arguments. The simplest one requires only one argument – name of a Generic Inquiry (the one you see in Inquiry Title field on Generic Inquiry Design screen). See… Read more

Records Post-Processing

Hi All, Today want to share with you some thoughts about how to organize additional processing in Acumatica.Commonly we may need to to something together with document release: create contract, send EDI request (like inter-company), call 3rd party API and so on. Most common way to do so is just code infection in the save or release process. Than you do 2 things just together.However this leads to some troubles: Performance – when you do 2 operations simultaneously you have to lock transaction for longer period of time, that finally affects other users as they have to wait. Repeating – if operation fails and you have to repeat it you… Read more

Developer Webinars Feb for 2019 R1 Updates

Hi all, As last post related to our webinars for developer in 2019 (https://asiablog.acumatica.com/2019/02/acumatica-announced-a-webinar-series-for-developers.html), We would like to share with you some recording in case you missed the session. Credit Card Processing Enhancements – 22nd FebruaryBelow in the recorded session, we discuss our roadmap for our credit card processing plugin for 2019 R2 and discuss what’s new in 2019 R1 .  We talked about our new processing plugin interface, mobile credit card payments, portal payments, changes in our Credit Card Payments workflows, and deprecating older plugins. Generic Inquiry Improvements – 25th FebruaryPivots, navigation, totals, side panels, conditional colorization, OData and Push notifications. All these features are supported by our Generic Inquiries. We demonstrated all of these… Read more

Partner Custom Training – Interviews

Hi All, Few months ago I was conducting a specialized training for About IT partner of Acumatica in South Africa. We have discussed many things like: development, issues investigation, implementation projects, internal ERP usage and many others. Here I want to share with you three interviews we recorded as part as these activities. Feel free to request Acumatica to provide training for whether you need it. Acumatica team will be happy to work with you on agenda and your questions.

Generic Inquiry Tips & Tricks

Hi everyone! As you may know, a lot of things (such as OData, Push Notifications, Dashboards) in Acumatica are based on Generic Inquiries. In this post I’d like to share some tips and trick related to building GIs I found useful. I hope you’ll find them useful too. Join conditions containing multiple tables. Probably, the most unintuitive trick that you can do is adding join conditions based on fields that are not in the list of Parent Fields or Child Fields. Actually, you can use every field from every table to build join conditions in GI just like you do in SQL. You are not restricted by just Parent fields… Read more

How To: Count number of prints in Acumatica

Hi All In this post I will explain how to use Acumatica’s Audit feature help to keep count of how many times a invoice report was printed and then with a little bit of Acumatica Report Designer knowledge, you can indicate on the report if it is a copy/duplicate. The objective in this example is to print a invoice with a header “Tax Invoice” and when it is printed a second time to show “Copy of Tax Invoice”. Audit Feature First you have to setup an Audit of the [ARInvoice.Printed] field on the AR301000 screen: On Invoice and Memos screen (AR301000), the checkbox field below is updated to a true value… Read more

Prevent SO Invoice from Posting Inventory

Hi All, A quick customization tip for you – if you need to cut Inventory posting from SO Invoice you can just simple override PostInvoice and don’t call the base method.In this case Invoice will be successfully released, but inventory transaction will be totally ignored. This customization might be important in some cases and have an easy customization!

Accounting Basics for Developers

Hi All, Long time ago, one my good friend explained me the accounting principles in 30 minutes in a way where I (a system developer, that time) understood it and never forget anymore. This knowledge serves me for a more than 5 years now and I promised myself to share this knowledge with every one how needs. So here it is – Accounting basics for developers.I’ll focus on accounts, account types and general ledger to explain where it is coming from and why it is like this. I guess you’ll understand how to use it after that! Part 1 – Owner is a Core Historically wise, everything has started from… Read more