Access Rights Database Reference

Hi All, Want to share with you reference about architecture of Access rights in Acumatica. This knowledge you can use for Sharing data between companies Copy data between companies for faster implementations Mass update of access rights with database Just for fun 🙂 All acumatica access rights are located in the 6 different tables: Users, Roles, UsersInRoles, RolesInGraph, RolesInCache, RolesInMember. Lets check all of them. Users – main entity that stores information about user. User management is done though This table includes such user configurations as password, name, email, password settings and some statistics. Roles – the main table that stores names and description of roles. Roles do not have… Read more

Change Azure VMSize for Acumatica Package

Hi All, Past several years Microsoft has added multiple possible VM sizes (that you can check here) and they actually will not stop at this point. So we need a good way to easily change some properties, if we want to have custom Azure configurations. Today i want to share with you the way how can you repack Acumatica Azure package. To complete there steps you need to have installed: Microsoft .Net 4.0+ for running PowerShell script. Azure SDK 2.9+ You can download it here. Actually you just need a one single tool that will do packing – MicrosoftAzureAuthoringTools-x64.msi. Than you will be able to find a CSPack.exe tool by this… Read more

Link Between GL And AP or AR

Hi There, In case you have not seen that before, Acumatica has links between GL Batch lines and AP/AR Invoices lines – Following conditions should be applied: GLTrain,TranType = ARTran.TranType; GLTrain,RefNbr = ARTran.RefNbr; GLTrain,LineNbr= ARTran.TranLineNbr; TranLineNbr is populated on release of a document in another module with the number of the corresponding line in that document. Please note that TranLineNbr can be empty in some cases. For example if you have consolidation posting to GL, than multiple AP/AR trans will be combined in one GL line, in that case TranLineNbr cannot be evaluated. Specially this field is not populated when PX.Objects.GL.GLTran.SummPost is ON. Using that knowledge you can update something in GL… Read more

Calling Base Actions by example of Generating Time Cards

Hi All, Just a short article where I can share with you customization that can generate time cards from uploaded time activities. Customization doing following: Selects the first and the last unreported (where no time-cards assigned) activity from currently selected employee. Goes week by week between first and last activities Create a new time card for every week using TimeCardMaint graph Code also automatically submit time card for approval In case there is unreported activity for already submitted or released time card, code can automatically generate time card correction and submit it again. It is not very useful customization, but it can be used as good example of calling actions in… Read more

Dashboards and Reports on Mobile

Hi All, Do you know that Acumatica Mobile native app has supported dashboards and reports since release of version 2017 R2. Here you can see YouTube video with full presentation of Acumatica Mobile capabilities – Acumatica Mobile App – Functionality and Customization But in this article I want to show you how to configure it by you own. Welcome under the cut. How to Add Dashboard There is not dashboards available out of the box with Acumatica Demo data but we can easily add new one just by modifying MobileSitemap.xml file. MobileSitemap.xml is the definition of the whole mobile UI. Upon login mobile player downloads sitemap definition and draws screens… Read more

Restore Large Snapshot

Hi Everyone, Have you seen such error before when you try to upload snapshot of the size more than a gigabyte? The Error message: “Snapshot file size exceed the maximum allowed size”. There are multiple reasons why it is not allowed – connection stability, IIS limitations, Memory size, on the fly processing limitations and so on. But what you still need to restore a snapshot and you need to in any possible way? Lucky you there is a stable way for that using Acumatica Configuration Wizard. Wizard uses the same engine as snapshots to import data during setup, so it can easily insert your snapshots data with no matter on… Read more

Visual Studio Code Snippets

Hi All, If you search on ways to optimize your development experience you can try to look at the code snippets for Acumatica events and DAC fields. Here it comprehensive instruction on how to develop own code snippets. I want to share with you snippets I use in my own local environment. Please follow the installation Instructions: Below you will see the XML code from GitHub Gist that you need save as a file: Acumatica.snippet Place this file to snippets location : C:Users<username>DocumentsVisual Studio 2015Code SnippetsVisual C#My Code Snippets Launch your Visual Studio and try to use it.   Snippet: View the code on Gist. Have a fast development!

Synchronize User Passwords between Companies with SQL Trigger

Hi Everybody, Here want to share with you one easy way how to easily sync passwords between users in all companies in Acumatica – we can use SQL triggers. A trigger is a special kind of code that automatically executes when an event occurs in the database server. Database Engine execute trigger when a user tries to modify data through a data using Update/Delete/Insert commands. In our case we can catch the event when password is changed in specific company and distribute it to all other companies we need. Code: View the code on Gist. Have a nice configurations.

Copy Dashboard

Hi All, Previously I shared with you how to copy dashboards using SQL script. Starting from Acumatica 2017R2 you can also copy dashboards with 2 more ways: Using customization project Export/Import from/to XML buttons Steps using Customization Project: Go to Customization Projects and create a new one. Find Dashboards section In the Customization Browser. Find and Select there a dashboard that you want to copy. Steps  Go and publish this customization to other companies Steps  Done, you can use it now. Please note that you can export customization project and copy dashboards to other Acumatica Instance. Steps using Export/Import from/to XML Another way you have Export to Xml/Import from Xml buttons… Read more

Multi-Company Drop-Down

Hi All, Today want to show you how to have different values of drop-down in different companies: Company One Values 1, 2, 3 Labels “1”, “2”, “3” Company Two Values 3, 4, 5 Labels “1”, “2”, “3” To do this we can use following nice features in Acumatica Platform: PX.Data.Update.PXInstanceHelper.CurrentCompany – to get ID of current company FieldSelecting – Event where you can change/adjust value just before it will be included in response to browser. e.ReturnState = PXStringState.CreateInstance(…) – State contains full description of control that should be generated in the user interface with app UI properties and configurations. By adjusting state on the fly you can change list of… Read more

Restrict Data Accessibility using Generic Inquries

Hi Everyone, In this article I want share with you one more idea of how can you use Acumatica Generic Inquires. Generic Inquires in Acumatica is key part of reporting and have plenty of usage examples: Notifications Using GI Environment Related Parameters Integration with OData Consolidation Reports And many others. Today I would like to add here scenario with restricting access right to data based on custom filtering conditions in the Generic Inquiry. Lets assume we have two departments who is using opportunities for Products and Services. But we would like to disallow them see opportunities of each other. Acumatica does not have data level security for opportunities, so we… Read more

Mirror Mobile Screen on Computer

Hi Everyone, Today want to share with you some tips on how to share your mobile screen with Acumatica to PC. That is really useful when you want to share great Acumatica mobile application with your customers. Mobizen  URL: Type: Free Platform: Android Internet connection is required. Free application that uses internet connection to share Android screen to your PC. Internet conenction is required. Here you can read how to configure local Acumatica instance to use it with mobile   TeamViewer QuickSupport  URL: Mobile App: Free for non commercial use Platform: Android Internet connection is required TeamViewer Quick Support allows you to connect from your PC to mobile and control… Read more

SQL In <> Operator in BQL

Hi There, Today want to show you example of amazing and very new BQL Operator – In<>. This operator was added just recently with Acumatica version 2017R2, so now you can pass there an array of values and Acumatica core will convert it to SQL IN ( … ) statement. Here is a code example: Object[] values = new String[] { “AC”, “IN” }; InventoryItem item = PXSelect<InventoryItem,        Where<InventoryItem.itemStatus, In<Required<InventoryItem.itemStatus>>>>.Select(Base, values); Console.WriteLine(item.Descr); This will be converted to following SQL Select * from InventoryItem InventoryItem Where InventoryItem.Status In (‘AC’, ‘IN’) Order by InventoryItem.InventoryCD Please note that In<> operator is available only with Required<> parameter and you need to pass array of possible values manually to Select(…) method parameters. Have… Read more

Acumatica Framework API Reference Guide has been Published

Dear Developer, I’m are happy to announce that Acumatica team has updated descriptions of all Acumatica Framework core classes and methods as part of new Acumatica Development Reference Library. All of them are located in one place now: Acumatica xRP Reference Guide The content is collected directly from the Acumatica code and presented in a clear and concise way. You can easily find the needed information and code examples, which you can use in your customization and custom solutions. Please let me know if you have any questions or other suggestions!

Remove base Attribute with Customization

Hi All In my previous article “Append and Replace of DACs Attributes” I have described how can you replace append attributed in DAC with customization. Today I would like to add one more useful attribute – PXRemoveBaseAttribute. This one can help you to just remove one specific attribute from base field and replace it with new one if needed. [PXDBString(32)] [PXDBDefault(“Test”)] [PXUIField(DisplayName = “Test” )] public String Field { get; set; } Example 1: public Extension : PXCacheExtension<DAC> {     [PXRemoveBaseAttribute(typeof(PXDefaulAttribute))]     public String Field { get; set; } } Example 2: public Extension : PXCacheExtension<DAC> {     [PXRemoveBaseAttribute(typeof(PXDefaulAttribute))]     [PXDBDefault(“New String”)]     public String Field… Read more

Rates per Day in the Report

Hi All, Today I would like to share you my experience in building report that needs to translate currency rate on the fly. The main challenge in this task as you may not have rates for every day. So that mean if your document is for 20th of Jan but there is no rate for that date, you need to find the latest available from list of the rates. Unfortunately this task is solvable just with standard Joins and standard DACs as we need to have little bit more tricky logic. So to fix that I have created an SQL view that can find last available rate for the particular… Read more

Move Customization project to Source Control/Another Server

Hi There, When you are doing customization it is usually much faster and easier to start it using Acumatica Customization Browser and even create an extension library from there. But later, you might need to move customization somewhere: to source control folder to another production/testing/development server to use Acumatica ERP instead of framework. In this article I want to show you how to link all the things together if you move it. Customization usually consists of 2 things: Customization package – just a zip file that contains all the changes that should be applied during customization publication. Sources of extension library – that is something that should be kept outside… Read more

Difference between Acumatica ERP and Framework

Hi All, Previously I had quite a lot of questions about how to integrate development done on Acumatica Framework with Acumatica ERP. Usually them main reason of that question is misunderstanding of what is Acumatica Framework. Acumatica Framework (what you can download as separate installer from portal) is designed to develop product that is completely separated from Acumatica ERP. That is why there are less functions and no code integration with ERP. In case you are see benefits of using functions form Acumatica ERP (like segmented keys, numbering, accounts, subaccounts, customers/vendors, inventory items), it would be much better to start development on Acumatica ERP itself from the beginning, and do… Read more

DACs Inheritance and Caches

Hi All Want to speak today about DACs inheritance in Acumatica and some issues that it cause to development. As you know C#/.NET as OOP-oriented framework support inheritance of objects, but when in comes SQL and Database structure than there is no inheritance between tables. As a bonus I will explain why we need BAccount and BAccount2 DACs and what is the difference. Inheritance In Acumatica we want to leverage benefits of OOP to simplify references between objects, minimize database size required, ease of reporting and so on. As a result of that we have designed system in such way to support it: You can have parent DAC public class BAccount : IBqlTable { …… Read more

Multiple DataViews on the same Form

Hi All, If you didn’t know previously, in Acumatica has introduced new syntax of defining DataViews/Fields. Previously you have to create a new Form, assign DataView to form and than add there fields. But now you can use following construction: “DataMember.DataField” right in the DataField property. <px:PXSelector DataField=”BranchID” /> <px:PXCheckBox DataField=”DefLocation.IsRemitContactSameAsMain” /> <px:PXTextEdit DataField=”RemitAddress.AddressLine1″ /> <px:PXTextEdit DataField=”RemitAddress.AddressLine2″ /> Also, a DataMember can be specified as an attribute of a PXPanel, and it will be inherited by all internal controls. <px:PXPanel RenderStyle=”Simple” DataMember=”RemitContact” >     <px:PXMaskEdit ID=”edFax” runat=”server” DataField=”Fax” />     <px:PXMaskEdit ID=”edPhone1″ runat=”server” DataField=”Phone1″ /> </px:PXPanel> Have a nice development!