Context Parameters

Hi Everyone, In this topic I want to cover another architecture pattern we have in Acumatica – Usage of context related parameters. Problem Statement Within the event model it is not easy to pass parameters into the other child or related events. There is a way with local variables how it is shown in T300 Training Guide and Override Release Action Lesson. However it is a really not nice approach if events happens in different objects like here: public class SomeGraph : PXGraph<SomeGraph> { public void CreateBatch() { bool needValidate = true; //Create Batch } } public class JournalEntry : PXGraph<JournalEntry> { public void DAC_RowUpdated(PXCache cache, PXRowUpdatedEventArgs) { if (needValidate) { … } } } Solution In Acumatica we use an approach that we call Scopes. Scope is a class that set… Read more

Loops in Notification Templates

Hi Everone, There is a nice functionality in Acumatica that allows you to print details of the document inside the notification template. Together with other Data Fields, now you can put additional constructions like Loops (or for-each loops) <foreach view=”Products”> ((Products.InventoryID)) – ((Products.Quantity)) – ((Products.CuryExtPrice)) <br> </foreach> Here you can find following important elements: ((Products.InventoryID)) – is link to the data view and field. You can use designer to insert fields like this using button “Insert” -> “Data Field” <foreach> – here it is the reserved word for the beginning of the loop view=”Products” – this is a view name that is used to get data from database. You can… Read more

Generic Events Declaration

Hi Everyone, Starting from Acumatica 2017 R2 you may notice a different events declaration. We call in generic events or new events declaration. Here you can see an example for row and : protected virtual void _(Events.FieldUpdated<DAC, DAC.field> e) {} protected virtual void _(Events.FieldDefaulting<DAC, DAC.field> e) {} protected virtual void _(Events.RowUpdated e) {} protected virtual void _(Events.RowSelected e) {} protected void _(Events.CacheAttached e) {} From the functional side there is not difference between old and new events declarations. However with generic events you have 2 main benifits: No more mistakes in names of DACs or Fields. As you rerefence it by tipe whong name won’t be even compiled. Don’t need to cast DACs anymore from e.Row anymore. It will have a typeinside. PXCache cache = e.Cache; DAC row = e.Row; However there are a couple of… Read more

Team Development – Process and Responsibilities

Hi Everyone, Today want to give you one more view on the development process in Acumatica. When you have a team you have a different types of people with different skills. And everyone within a team should know their part of the whole process. In Acumatica every team has following members: Product Manager Developer Quality Asurance Engeneer Technical Writer They all and together participate in the feature delivery. And this diagram describes the best how feature workflow is organized between them: Now Let me describe it with details: Product Manager works with partners, clients and other information sources to prepare specification that will describe what feature should have from business… Read more

Acumatica MVP Program

Hi Everione, For someone who hasn’t notices that – Acumatica has very internstion badge for developers – MVP (Most Valuable Professionals). It can be used for promotional purposes by the company and by the individual MVP as well. This is designed to actively encourage greater contribution to our growing developer community and ecosystem. Please read more on Acumatica ADN Portal. And feel free to promote developers you know!

Continues Integration with Acumatica Platform

Hi Everyone, A bit earlier on Acumatica Cloud Development Conference I had a Black Belt Development practices. As part of it I covered an automation tools Acumatica supports. In this article I want to extend this topic a bit with more examples and links. Automate Acumatica Wizard Installation Acumatica installation wizard is a standard MSI (Microsoft Installer) package that can be managed with standard windows tools. For example there is msiexec.exe tool that can do installation and de-installation from console. Here you can read more about msiexec parameters. With Acumatica you can use following command to install it: msiexec.exe /i /a /qn “AcumaticaERPInstall.msi” /i – installation command /qn – quiet… Read more

Custom field on CR Quote screen

Hi Everyone, If you try to add a custom field on CR Quotes in Acumatica 2018 R2 you may face very weird behavior – field is added, can be saved to database but as soon as you refresh screen or record valued disappears. The reason of this issues is PXProjection that is described in my separate article: PXProjection – SQL Views using BQL  This image show you how projection is defined in Acumatica CRM PXProjection uses 2 Data Access Classes for quotes: One class represents the table – PX.Objects.CR.Standalone.CRQuote Another represents view as combination of DACs in select – PX.Objects.CR.CRQuote And to correctly work, custom field needs to be added in… Read more

Team Development with Acumatica

Hi Everyone, Today want to share with you some ideas on how to organize your team development with Acumatica. In the Asia region we are getting more and more big implementation project where customization is involved. In the same time we have a lot of new ISVs with own development. With that I’m getting more and more a question on how to organize continues team development with Acumatica. So here I want to answer * on this image you see Git as a source control. This is only an example and you may use other source controls like SVN, TFS, Mercury and others. Acumatica does not have preferences in source… Read more

Acumatica 6-tiers Web Architecture

Hi All, Recently got a question about Acumatica web architecture and tires. To answer it I have prepared slide that I would like to share with you now: Acumatica 6-tiers Web Architecture: Acumatica Cloud xRP Platform (Presentation, Business and Data Access tiers): The basic diagram of Acumatica SaaS hosting Have a nice development!

Use Split Container from Customization Browser

Hi Everyone, You may know that in Acumatica you can put several large containers (like grids and forms) together. But to controls or optimize space usage on small screen Acumatica uses special Split Container control. Basically this is the panel that you can drag and drop to reallocate space used by nested controls. To handle it Acumatica ASPX markup has special element: <px:PXSplitContainer runat=”server” ID=”PXSplitContainer1″ Orientation=”Horizontal”>   <AutoSize Enabled=”true” Container=”Window” />   <Template1> </Template1>   <Template2> </Template2> </px:PXSplitContainer> Under the Template1 and Template2 elements you can place other container controls like Form and Grid.  Here I have an example for putting grid into the Template1. <Template1>   <px:PXGrid runat=”server” ID=”grid11″ Height=”150px” SkinID=”DetailsInTab”  Width=”100%” SyncPosition=”True”>     <AutoSize Enabled=”True” MinHeight=”150″ />     <Levels>       <px:PXGridLevel DataMember=”DataMember1″>         <Columns></Columns>       </px:PXGridLevel>     </Levels>   </px:PXGrid> </Template1> Do not forget… Read more

Toggle List as Entry Point

Hi All, List as entry point is very nice feature that allows yoг to see multiple documents together. However in some cases you may want to get document faster and eliminate unnecessary clicks. Luckily Acumatica gives your options to choose if you want to enable it or now. You can control this for Modern UI and Classic UI separately.  Just go to screen Lists as Entry Points (SM208500) In the end to make my life few seconds easier I have created a simple button that can toggle On and Off lists as entry point wherever I need them or not. View the code on Gist. Have a easy UI.

Auto-Numbering Customization

Hi All, In Acumatica PX.Objects.CS.AutoNumberAttribute is responsible for almost all auto-numbering. However sometimes you may want to have control on it. For example change sequence depend on conditions or add specific numbers related to vendor or customer. These things quite easy to do with customization. Here I’m going to show you 2 scenarios: How to change numbering sequence How to change new number Change Numbering Sequence on the fly. AutoNumber Attribute generates new number on RowPersisting event. As you may remember from T200 Development Training guide RowPersisting of graph will be executed prior to attributes, so we can control what Attributes will do. This is correct for all  *ing events… Read more

Resort grid rows with Drag and Drop

Hi Everyone, In Acumatica 2018R1 we have a new cool feature to drag and drops rows of the grid to resort them. As you can see sorting is still based on database column (In my case it is Sort Order) but Acumatica can automatically reorder all rows based position you dropped it. This is just a first version so still have some limitations (like it is still not fully works with extensions for existing DACs), but I really like we can  bring new and very friendly user experience to ERP. How to implement it in own code? To have this feature you need to change several things in your Graph,… Read more

PXSelector and DirtyRead

Hi Everyone, Want to speak today about Dirty Read property of selector. Base explanation you can find in Acumatica API reference. How ever this one is very basic, so let me try to share with you real case. You may know about Readonly vs Merged data retrial from DataView. Basically if you use PXSelectReadonly data-view it will always return data only stored in database. If you use standard data-view like PXSelect Acumatica will get data from DB and than merge it with unsaved data from cache. This is fully applicable for data-views (PXSelect, PXSelectReadonly) and selectors as well. When you define PXSelectorAttribute than it will be always read-only by default.… Read more

Multi – Line Text Edit control

Hi Everyone, In case you need to store rather big text you may need to use multi-line text edits. Here I would like to share with you example based on Address Line on Customer Form. Multi line just a property of the text edit so if you just change mode of control in Customization browser you will be able to use enter in control already. As soon as you publish customization control will add cut angle what you can use to control its size with mouse: If you also set height property of control for example to “100px” size will be extended in UI by default: Important to note that… Read more

Extend Address Line length

Hi Everyone, Extending of field length in Acumatica is not a trivial task, so here I want to publish guidance on how I usually do that. To extend field we need to do 2 things: Extend allowed length in DAC attribute Extend length of Database Column Welcome under the cut for more details Extend Field in the DAC Here you need to find PXDBStringAttribute and redefine it. Allowed field length is passed in constructor so unfortunately you cannot easily change it with PXCustomizeBaseAttribute. In the end you have 2 ways: Redefine all attributes – [PXDBString(200, IsUnicode = true)] [PXUIField(DisplayName = “Address Line 1”, Visibility = PXUIVisibility.SelectorVisible)] [PXMassMergableField] Remove Specific attribute… Read more