Monday, 28 November 2016

PXUIEnabled and PXUIRequired Attributes

Hi All,

If you developing something on Acumatica xRP platform you know that changing of the UI fields visibility should be done through PXUIFieldAttribute on the RowSelected event.

This works perfect on small screens with limited number of controls. But most of ERP screens are not really small. So most probably you already saw such types of code on the RowSelected in SOOrderEntry graph and many others.

Not nice and really hard to support.
Luckily now we have a different way to do it:

  • PXUIEnabled - based on provided BQL conditions can automatically change UIFieldAttribute Enabled property.
  • PXUIRequired - based on provided BQL condition can automatically change PXDefaultAttribute PersistingCheck property.
  • PXUIVerify - based on provided BQL condition can automatically change validate that new value meets provided conditions. Also can trigger validation on update of dependent fields,

Usage of PXUIEnabled:

#region isActive
public abstract class isActive : PX.Data.IBqlField
{
}
[PXDBBool]
[PXDefault(true)]
[PXUIEnabled(typeof(Where<isFinancial, NotEqual<True>>))]
[PXUIField(DisplayName = "Active", Visibility = PXUIVisibility.SelectorVisible)]
public virtual Boolean? IsActive { get; set; }
#endregion


Usage of PXUIVerify:
#region TimeBillable
public abstract class timeBillable : IBqlField { }
[PXDBInt]
[PXTimeList]
[PXDefault(0, PersistingCheck = PXPersistingCheck.Nothing)]
[PXFormula(typeof(
       Switch<Case<Where<isBillable, Equal<True>>, timeSpent,
              Case<Where<isBillable, Equal<False>>, int0>>,
              timeBillable>))]
[PXUIField(DisplayName = "Billable Time", FieldClass = "BILLABLE")]
[PXUIVerify(typeof(Where<timeSpent, IsNull,
       Or<timeBillable, IsNull,
              Or<timeSpent, GreaterEqual<timeBillable>>>>),
PXErrorLevel.Error, Messages.BillableTimeCannotBeGreaterThanTimeSpent)]
[PXUIVerify(typeof(Where<isBillable, NotEqual<True>,
       Or<timeBillable, NotEqual<int0>>>),
PXErrorLevel.Error, Messages.BillableTimeMustBeOtherThanZero,
       CheckOnInserted = false, CheckOnVerify = false)]
public virtual int? TimeBillable { get; set; }

#endregion

Have a nice development!

Wednesday, 23 November 2016

Getting started with Acumatica xRP Platform

Hi All,

Sometimes I get a questions like this:
  • How to start development with Acumatica xRP platform? 
  • How complex is it? 
  • Where we can get some guidance?
So here I want to summarize all thoughts that I have about it.
development with Acumatica xRP platform

I would select these steps that i would recommend you to do:
  1. Ensure Pre-Requisites
  2. Get Acumatica 
  3. Prepare Development Environment
  4. Learn Acumatica xRP Platform
  5. Do Development
  6. Communicate & Support
Lets go though each of these steps in details under the cut.

Monday, 21 November 2016

100 articles on the Blog!

Hi All!

Today we have a small anniversary - 100 articles:

acumatica blog

Thank you for constant support and attention! I really hope that this information useful for you and will do my best to provide you more interesting articles in the future.

Meanwhile, your opinion is very important for me, and I would be really happy to hear your feedback, requests and topic suggestions that may help you to know Acumatica better.

Have a nice day ahead! Thank you.

Site Configuration using Customization

Hi All,

Acumatica as most of web applications has some configurations that are stored on the file system. For example it can be a web.config or any other file that is stored in Site folder itself.
configurations acumatica
During upgrade procedure Acumatica overrides all standard files to ensure that system will work correctly with all latest platform changes correctly. This is correct, as any automatic merge of configurations can cause to compilation errors. This is especially harmful if you site is in public cloud and you have no access to the instance.
So that means if you do custom configuration (like redirection rules, filters or custom controls) your changes most probably will be lost right after update. There are several exceptions when configurations will not be overridden:
  • You keep configurations in separate (not standard) file. Acumatica will not touch any file that is included into standard Acumatica.
  • Some specific changes can be preserved by Acumatica Configuration wizard. Connection String, Active Directory, SSO, timeouts are the example of preserved configurations.
But what to do if you really want to reconfigure something?

Monday, 14 November 2016

Acumatica Test Companies

Hi All,

As you may know Acumatica does not limit the number of users that can connect to the system but it limits the number of cores that may be used by the system and number of tenants (companies) that can be created and used in the database.
However these roles applies only for properly licensed instance. If you are using Acumatica in the trial mode (read more there), you have a limitation on 2 concurrently working users and maximum 10 tenants.

Here I want to discuss with you some points number allowed tenants.
When you apply license to Acumatica instance, you limit number of production tenants to allowed by the license. Usually it can be something like 3, 10, 20, ..., 50, .....
If you add more companies than is allowed, Acumatica will automatically restrict list of visible companies to maximum allowed number.
acumatica limits
All other companies will be still safe in the database but you cannot access it.

But what to do if you want to have any additional tenant to test something or do an experiment, but install a demo data. Luckily this is possible with Test Companies feature.

The "Test company" is an additional tenant in the databases that is not included in the list of companies allowed by license. But in the same time Acumatica applies on the test company the same restrictions as on the trial mode:

  • can be used even if you have maximum number of production tenants
  • no limitations on number of test companies
  • for all test companies in the system you cannot have more than 2 concurrently working users.
  • any production company can be flagged as test at any time
  • if you make a company as test, it cannot be reverted.
  • all demo companies will be used as test.
If you want to make you company as test, it is very easy - just click appropriate button on manage companies screen.
acumatica test
As this operation is not revertible, you should confirm your operation:
Please confirm that you want to make 'Company8 (9)' a test company. Test companies are intended for training and demonstrating Acumatica, and are not for intended for production use. This operation cannot be reverted.

Now you can see that your company is marked as test:
test company acumatica


Have a nice testing!

Wednesday, 9 November 2016

Reuse Session during API Calls

Hi All,

If you using Acumatica Web Services you most probably saw the examples where you need to call Login and GetSchema methods before each valuable operation.

This is OK in general, but if you building some complex and high loaded integration as the result you may get something like this:
integration in acumatica

Not very nice as it creates additional traffic network traffic and unnecessary load to server.

Much better way is to cache Cookies and Schema on the client side and refresh it only if it was not in use for some period of time.

Here I want to share with you an example where I create a new class inherited from Screen and call Login operation automatically before each Submit operation if service was idle for more than 10 minutes.
This static class is more for your idea, i'm pretty sure you may have a better way to do it on the production environment.

Also note that you can encapsulate some additional logic in your class and make your integration code simpler.

Code Snippet:

Have a nice Integration!

Monday, 7 November 2016

Most Popular Acumatica DAC Attributes

Hi All,

Today I want to share with you some statistics on Acumatica xRP Attributes usage across Acumatica ERP Business modules. The goal of this article is to show you a full list of attributes that you may use for customization and also give you a chance to learn some new useful attributes, that you have not seen before.

This data was collected from PX.Objects.dll of Acumatica 6 and may be different from version to version.
All attributes are sorted by the usage frequency, highlighted by value and grouped by colours:
  • Fields attributes
  • Selectors and aggregate attributes
  • Business logic
  • Others
In the brackets you can find approximate value of how many time this attribute is used. Here you can find that was used more than 5 times on all DACs.
Also some attributes (like list attributes) were hidden from the list as they do not bring a value to the reader.

After the brackets you can find brief explanation of attribute meaning. Please note that most of the attributes have been described in the context help
attribute meaning acumatica

and Acumatica Framework reference guide as well.
Acumatica Framework reference guide

Welcome under the cut for more details: