Thursday, 10 December 2015

Acumatica Overview Demo

Hi Everyone,

Just want to share with you super nice and professional demo from Acumatica team. In my opinion every partner should watch it and be able to show some parts of the system to prospect like here.

Acumatica overview video on YouTube.

Acumatica is leader in usability, and you can prove it with Nucleus Research ERP Value Matrix.
Acumatica on Nucleus Research Value Matrix

But to make customers believe it and say WOW, you have to show it.
Live demo of Acumatica is most important and impressive key sealing point where we have true advantage over other systems.

Show live Acumatica, speed up your deals closing process.

Thank you!

Wednesday, 9 December 2015

Reset User Password

Hi Everyone,

In Acumatica all passwords are stored as a Hash, so even if you get database, you are not able to login with user password.
But in case of trouble you can reset it to new one directly in the database. Just execute this query against the sql:

UPDATE Users SET Password = '123', LockedOutDate =null WHERE Username = 'admin'

Don't worry about clear text password - Acumatica will automatically calculate new hash on first login operation.
LockedOutDate is field where system stores last unsuccessful login attempt date-time. So if your user is locked out you can use this statement to unlock it.

Thank you!

Saturday, 5 December 2015

Personalize Acumatica for Demo

Hi Everyone,

Some times you want to impress your prospect with super nice demo. Of course you can do good investigation and nice presentation, but to be great you need to speak with customer on the same language. That means that you need to prepare customer specific data in your demo system. But also you can slightly customize Acumatica instance to show customer logo and icons.
Acumatica Custom Color Schema

What else you can easily customize to show nice and familiar UI to customer:
  • Customize login page images,
  • Customize logo,
  • Using different themes,
  • Customize style and colors.
Lets discuss all these stuff.

Monday, 30 November 2015

Custom Snapshots Configuration

Hi Everyone,

As you know Acumatica supports Snapshot functionality to copy, migrate, backup and restore data between one or multiple instance of Acumatica. Using snapshots you even can migrate data between different database types (Cloud, Microsoft Sql Serve, MySql).
You can get more about snapshots from this video - Acumatica Snapshot on YouTube

When you creating snapshot, system will go through all database tables, select appropriate data and put it into separate tenant (with negative tenant id, which is actually linked to original tenant by id number).
You can define what data will selected from the database, by defining Export mode:
Acumatica Snapshots Configurations
Snapshots is database level technology that knows nothing about business logic and other stuff. System will just go through all specified tables and copy all data with no restrictions and no validation.
But you can define your own configuration for snapshots engine.

Saturday, 28 November 2015

How to Generate a new DAC for Custom Table or View

Hi Everyone,

In Acumatica 5.2 we have a very nice feature where you can generate a Data Access class from the table definition just from Customization Browser UI.

To do this, go to the Customization Manager, open code section and create a new code file of type IBqlTable. If you specify a name of existing table, system will automatically load a definition for all fields from database.
IBqlTable is required interface for all data access classes in Acumatica. System will use it as a flag to understand what name should be used for table during SQL generation.
Acumatica Browser DAC Generator

When you click OK, system will analyze table structure and generate new DAC with all fields and appropriate attributes. All these stuff is done according to Acumatica naming convention.
Acumatica Auto-Generated DAC in Browser

And of course, you can always move this code file to extension library, if you need to use it with Visual Studio.

Have a nice customization!

Friday, 27 November 2015

Add a Custom Popup Panel

Hi Everyone,

Today I want to share with you some practices how you can do iteration with user from Acumatica business logic code. In general:
  • You can ask some simple question with strait forward answer, like: "Do you really want to delete this record? Yes/No"
  • You can use redirection feature to redirect user to some hidden screen, where he will do some additional configuration and processing.You can hide screen by putting it into the hiden folder of Acumatica sitemap. When screen is hidden user can access it only with redirection from some other screen.
    Acumatica Sitemap
  • But if you want to do more interactive dialog with user you may need use popup dialog with smart panel. In This case you can show some configuration to user that is related to requested operation. This panel will be hidden on the screen until you call it with appropriate code from your business logic. When user close panel, your code will be automatically notified about configuration changes.
    Acumatica smart popup panel

Thursday, 26 November 2015

First Chance Exception Log in Acumatica

Hi Everyone,

Acumatica has very powerful feature to catch and logging all exceptions that that has been thrown inside the system and application code. You are able to activate it in the Application Settings section of web.config file.

<add key="EnableFirstChanceExceptionsLogging" value="false" />
<add key="FirstChanceExceptionsLogFileName" value="firstchanceexceptions.log" />

If you do not change the file name, it will be available by this path: “<SiteFolder>\App_Data\firstchanceexceptions.log”

This log can help a lot if you get any error without stack trace, or when you getting any problem without any information in the UI. Also this log can be very useful for Acumatica support team.

You need to understand that using this mechanism you will catch all exception even good and handled ones. Because of this system will fill this log file quite fast, so i recommend you to enable it only for short periods of time, where you are investigation the issue.

Starting from Acumatica 5.2 you also can enable if from user interface.
Catch Expetions in Acumatica Request Profiler

Have a nice troubleshooting. 

Context Scopes in Acumatica

Hi Everyone,

During developing on Acumatica, you may face some restriction, from the platform side, for example:
  • You can select data only according to current user rights - if user does not have access to branch, there is no way to get data related to another branch.
  • There is restriction to read data just from current tenant, now way to get consolidated data by several tenants.
  • You are not able to read deleted data.
  • You can read data just within one connection to database.
All these stuff and some more is configuration of the platform. To give you ability to control these behavior Acumatica has a set of internal classes "Scopes". When you initialize scope it will tweak framework, to allow you do some forbidden stuff by default. When you dispose scope, it will revert all settings to the previous state.
Scope changes are applicable only for the current thread and will not affect other users/threads.
Also scope, if you use scope like here:

using (new SomeScope())
//Do some logic here

It will affects only the underlined code. System automatically revert changes when code leaves this block.

Now, lets discuss what types of scopes you can use in Acumatica:

Thursday, 12 November 2015

Union Selects in BQL

Hi Everyone,

Sometimes you want to select and combine data from different tables in database. There is no standard way to do it in BQL, but we can go with several workarounds:
  • Create a SQL server view. In this case you just create a view on SQL Server side with selecting, calculating and combining all data into one big select. After this you can create/generate a DAC that will be associated to the view. In the code you can easily use new data access class as you wish. System will always generate selects to SQL server view as it is normal table.
  • Use data view delegate, where you can execute several selects to database. When you have received data you can calculate and combine data with programming code as you wish. This way can be slower on big amount of data, but also here you have more control.
Here I want to describe in details the second way to do it.

Wednesday, 4 November 2015

Custom Pictures to Login Page

Hi Everyone,

Do you want to customize login screen to see custom images that are related to your own company?
Acumatica Login Page

No problem, just put it into the Images folder (C:\Program Files (x86)\Acumatica ERP\<Your Site Name>\Icons) with the specific name pattern (login_bg<Number>.jpg).
Acumatica Pictures for Login Page

Add Custom Field to Full-Text (Universal) Search

Hi Everyone

Sometime you need to do some customization to meet customer requirements. One of these requirements can be an additional field where they can store some references to other systems/documents.
Acumatica Custom Fields

But when you have a reference you have to search it in the system. Here I will guide you, how to customize Acumatica to be able to search additional fields.

Tuesday, 27 October 2015

Branches, Companies and Tenants

Hi Everyone,

All business are unique and diverse, so some times you may need to implement customer who has set of separate legal entities (companies). Companies may have different uses, accounts, currencies and so on, but you still want to build a consolidate reporting. What Acumatica can offer here?

For a number of legal entities, you can set up Acumatica ERP in one of two ways, depending on the business requirements of the companies:
  • Tenants (aka Companies) - an independent tenant for each company
  • Branches - one tenant for all companies and configure a set of branches for each company.
Branches vs Tenants overview:
Listed on the login page
Selected within a tenant
Separate COA, Currency, Calendar
All 3 are the same
Restricted by License Edition
No transactions across companies
Inter-branch transactions available
Separate consolidation process
Consolidated reports out-of-the-box
Isolated access security
User access control by branch policies

Wednesday, 21 October 2015

How to add new Functionality for Acumatica

Hi Everyone,

Acumatica is great product and it has a lot of build-in features to cover huge amount of different requirements  But you know that all businesses are unique and some times requires some additional stuff that is not a part of standard product.

Well, Acumatica is fully customizable product, so you can easily change any build-in logic according to your specific business processes.
But how to do this better? Do you need to develop it by you own? Ask Acumatica for support or for standard feature?
Do you remember this picture? It absolute truth for this process too. Lets discuss your options.

Monday, 19 October 2015

Analyze Running Queries on Database

Hi Everyone.

If you face database performance issues, you might need some way to get running queries from there. SQL profiler is good, but some times you do not have it or you don't have access to it.

But if you can run SQL queries, you can use this script. It will show you immediate snapshot of all running queries.

If you are searching for statistical information you can use that query. This one will show you to 30 heaviest queries on the sever.

Have a nice development!

Analyse Size of Acumatica Database

Hi Everyone,

Sometimes, when you have big Acumatica database, you might want to know how much space does it taken by what table.

This script can help you:

Wednesday, 14 October 2015

CompanyMask for Data Sharing Between Tenats in Acumatica

Hi All,

CompanyMask – is a special column that stores binary mask that defines where this record should be visible and where you can update this record. 
Acumatica stores data in database separated by different tenants. All tenants are isolated, but you have some options how you can share data between them. To do it, your database and table should meet some conditions:
  1. Your table should have CompanyID and CompanyMask columns. Without CompanyMask data will be completely separated with no way to read it from other tenant from code.
  2. CompanyMask should be configured to allow other tenants select and update this record. Mask contains two flags for all companies. First flag –  s it possible to select this record from particular company or not. Second flag – is it possible to update this record from particular company or not. So as more companies you have in database, as longer will be a company mask value.
  3. Companyes should be arranged in proper tries. In company table we have ParentID column, that stores hierarchy of companies. Only child companies can see records of parents companies. Parent companies not able to select date of child companies. Also companies from different chains not able to so get data of each other.
Lets discuss, how does it works base on example.

System Columns in Acumatica Database

Hi All,

Acumatica has some special database columns, like CompanyID, Branch, NoteID  and so on.
Here I will describe what types of special columns you may expect in Acumatica database and when do you need to use them.
All these field are optional and does not required to be in all tables.

In this article you will find Description of:
  • CompanyID 
  • CompanyMask
  • DeletedDatabaseRecord
  • BranchID
  • Tstamp
  • NoteID
  • GroupMask
  • And other Audit Fields:
    • Created/LastModifiedByID
    • Created/LastModifiedDatetime
    • Created/LastModifiedByScreenID
Welcome in the article if you need more details.

Wednesday, 7 October 2015

Customize Email Processing in Acumatica

Hi Everyone,

You know that Acumatica CRM has ability to process incoming mails, create cases or leads, attach messages to existing contacts and so on.
Lets discuss how doe it wars and is there any ability to customize it.

First of all, to enable mail processing you should activate and configure it for your email account on "Email Accounts" screen
Acumatica Email Processing Preferences

How to Customize Selector in Acumatica

Hi Everyone,

Sometimes you want to add additional selector column to the screen, but this process not always is super strait forward.
Acumatica Selector
I will try to guide you step by step, how to add additional address line column to location selector on Sales Orders Screen.

Friday, 2 October 2015

Script to Select Audit Data from Database

Hi Everyone

Have you seen this when you select data from Audit table in Acumatica?

Acumatica stores all audit in one table Audit History. Keys and Changed fields are saved to database in combined mode. Data is concatenated with symbol \0, thats why you are not able to read this fields with just normal SQL server management studio.

To resolve it, you can replace special symbol just with normal colon. Use this script:

Wednesday, 30 September 2015

On-The-Fly Data Transformation using Virtual Data Access Class

Hi Everyone,

Sometimes you want to show existing data in the different format (for report, inquire or corporation purpose).
In my example I want to show you how to transform transform database table into something different. I have a table with years, groups and values, I want to group data by year and compare it between selected years.
Acumatica Data Transformation

Tuesday, 29 September 2015

Acumatica Demonstration Ideas

Searching for a coolest demo?

First of all, I recommend you to install cloud instance to show the real speed of Acumatica and use Sales Demo pack of demo data.

Here I will provide some ideas, what you can show.

How to Install Acumatica for Demo

Hi Everybody

Quite often I have a questions about how to do good Acumatica demo. Here I want describe some ways how you can provide a demo.

What we need to provide demo:
  • Place where we can install Acumatica demo instance
  • Installed instance of Acumatica
  • Prepared demo data
  • Demo presentation and script
  • List of coolest features

Lets go through this points. We start with hosting and installing Acumatica and finish with presentation materials.

Tuesday, 22 September 2015

Acumatica Platform Architecture

Hi Everybody

Today I want to share some information about Acumatica Architecture from web interface to database.

We will go through:
  • Frameset structure
  • Page structure
  • Main communication protocol between browser and server
  • Business logic architecture
  • Acumatica ORM architecture.

Frameset Structure
Acumatica is based on ASP.NET technology, so the main thing under main page is Frameset
Acumatica Frameset
Frameset consists of different menus and the page.
Green part is customizable using sitemap, localization, access rights and some settings.
Orange part is customizable using Customization Manager, access rights, localization, and many different settings.. Also you can develop new pages using Acumatica Framework.

Welcome tho this article, if you want to see more!

Monday, 21 September 2015

How to use Acumatica Trace

Hi All,

What you need to check if you have any problem and you want to investigate it?
Lets discuss Acumatica traces and log files/tables.

The first place that you should check if you faced the issue in application is the standard Acumatica trace.
Acumatica Trace Button

Acumatica Trace Window

Do you interesting in using PX trace from the code? Them welcome to this article.

Setup Notifications to the Approver

Hi Everyone,

Are looking for a way, how to setup notifications in Acumatica?
If yes, please follow these steps:
  1. Create Automation Notification 
  2. In the Addresses tab, specify the “Document” in the Source field and selected the “Approver>Default Contact> Email” in the Email field. Assuming this is the field to be used for to notify the approvers of a document.
  3. Create an Expense Claim and activate the approval process by un-ticking the Hold checkbox. 
  4. Approver shown in the Approval Details.
  6. Make sure the Approver’s email is updated in the Employees screen.
  8. Notification is created. 
  9. Make sure that you have scheduler for sending notifications. And also check that you email account is specified correctly.

Have a nice Implementation!

Saturday, 19 September 2015

Get Data from Stored Procedures In Acumatica

Hi There,

As you may know, by default Acumatica does not support stored procedures.

The reason of this is hidden in multi-tenancy.
Acumatica able to host more than one tenant in the same database. To do this, In each table it has a CompanyID column, which is a tenant ID. User from one tenant must not be able to get access to date of other tenant.
So to make sure that Acumatica getting data from the right tenant and this date is secured, Acumatica platform automatically adds the special restriction by CompanyID to every select statement ( ... where [table].CompanyID in { 1, 2 } )

If you are using stored procedures than platform is not able to make sure that the result date is getting from the correct company, so Acumatica does not support stored procedures for select data at all. So to make everything secure, Acumatica uses only normal tables and views to generate SQL statements (including reports). 

But to make it adjustable we have several options how we can extend this approach:

Thursday, 17 September 2015

Log Exceptions with First Chance Excetion Log

Hi All

Microsoft .Net has a very nice feature like First Chance Exception Log. You can easily use it in your Acumatica to log specific exceptions.
Read more about first chance exceptions.

Now I want to share with you my logger example:

Cache Data in Memory using Database Slots

Sometimes you need to use some dynamic data from the database, but you need it so often, so retrieving data process becomes a big performance issue.
What you need to do? Cache the data? But your date is dynamic and can be modified by the user. So you need to implement some mechanism to reset your cache? Another bicycle...

Acumatica Framework can address this issue with Database Slots Technology:
  • Framework stores your data in the HttpContext in special dictionaries. 
  • Framework automatically calls Prefetch method on first access to cached data. 
  • Framework automatically monitors dependant tables and will reset cache when someone has updated it. 
  • Framework automatically handles cluster mode. 
  • Access to the cached values is significantly faster.

Wednesday, 16 September 2015

Add New Screen to Acumatica Mobile Application

Hi Everyone,

Have you ever heard about Acumatica Mobile Framework?
It a pretty nice thing, how you can extend some ERP functionality from Web UI to Acumatica's native mobile application.

Today I want to guide you - how to create new screen. As example I will take a Journal Transaction screen.
Why this screen?
  • This screen is simple enough to understand the logic.
  • This screen is complex enough to move it mobile application. If you try to use this screen from mobile phone you will understand that it is not so easy, because of plenty controls and buttons. Of course, we can simplify it with customization or access rights, but we want to have this functionality from desktop browser.
  • This example with data entry screen can be used with plenty similar screens.

Ok, now we want to start developing.