Now about to hear some black-belt developer techniques from @gabrielmichaud #AcumaticaDevSummit pic.twitter.com/H3xxOz6NFB
— Tim Rodman (@TimRodman) June 20, 2018
We're going to break some rules and push the limits in this session #AcumaticaDevSummit pic.twitter.com/XQdGUYyHlv
— Tim Rodman (@TimRodman) June 20, 2018
On to part 1 #AcumaticaDevSummit pic.twitter.com/HF5P4rIod4
— Tim Rodman (@TimRodman) June 20, 2018
The power of Acumatica is being able to do things declaratively using attributes which saves you from writing a lot of code #AcumaticaDevSummit pic.twitter.com/hTPuWQyx4h
— Tim Rodman (@TimRodman) June 20, 2018
The traditional way of making a field required dynamically with code #AcumaticaDevSummit pic.twitter.com/WRoX5Jnyuf
— Tim Rodman (@TimRodman) June 20, 2018
But this code can get messy #AcumaticaDevSummit pic.twitter.com/OwxyQjLmBG
— Tim Rodman (@TimRodman) June 20, 2018
You can use these "magic" attributes instead #AcumaticaDevSummit pic.twitter.com/3iz4lADWRm
— Tim Rodman (@TimRodman) June 20, 2018
Using the PXUIRequired attribute #AcumaticaDevSummit pic.twitter.com/cpsF22i8ie
— Tim Rodman (@TimRodman) June 20, 2018
That makes the Customer Order field required for an Order Type of SO, but only SO #AcumaticaDevSummit pic.twitter.com/LFoK75p265
— Tim Rodman (@TimRodman) June 20, 2018
PXUIVisible is new and available in 2018 R1 Update 4 #AcumaticaDevSummit pic.twitter.com/ybg1asNTE7
— Tim Rodman (@TimRodman) June 20, 2018
In this PXUIVisible example, "Selector" allows you to retrieve fields from a linked table. It's very fast because it retrieves data from memory and not from a database call #AcumaticaDevSummit pic.twitter.com/hjlqFM3lij
— Tim Rodman (@TimRodman) June 20, 2018
PXUIVerify allows you to apply validation to any field. You could also use PXErrorLevel.Error instead of PXErrorLevel.Warning if you wanted to #AcumaticaDevSummit pic.twitter.com/PvwGUYMvo9
— Tim Rodman (@TimRodman) June 20, 2018
More complicated example of PXUIEnabled, PXDefault, and PXFormula. PXDefault will default the order description from the project task #AcumaticaDevSummit pic.twitter.com/qqjOQaJOR9
— Tim Rodman (@TimRodman) June 20, 2018
Example 5: Use Selector to populate a field with something from a related record (recommended MSRP price) #AcumaticaDevSummit pic.twitter.com/D46rLsa6eA
— Tim Rodman (@TimRodman) June 20, 2018
Data caching with IPrefetchable for stuff that is expensive to load, reasonable in size, and not updated frequently. This is currently used by existing examples in Acumatica today. #AcumaticaDevSummit pic.twitter.com/wwASgF6A7U
— Tim Rodman (@TimRodman) June 20, 2018
This example is checking all sales categories linked to an inventory item #AcumaticaDevSummit pic.twitter.com/Io2c7EyObI
— Tim Rodman (@TimRodman) June 20, 2018
This is the wrong way to do it #AcumaticaDevSummit pic.twitter.com/l9BPvPPhgN
— Tim Rodman (@TimRodman) June 20, 2018
This is the right way to do it #AcumaticaDevSummit pic.twitter.com/Xonpnp8maX
— Tim Rodman (@TimRodman) June 20, 2018
GetSlot is what tells Acumatica how to invalidate the cache #AcumaticaDevSummit pic.twitter.com/IoCieqj1o6
— Tim Rodman (@TimRodman) June 20, 2018
Here is an example of a bunch of database calls without caching that happen when you page through items in a lookup window #AcumaticaDevSummit pic.twitter.com/weM2VHi85Q
— Tim Rodman (@TimRodman) June 20, 2018
Something you should do right now on your development machine (only on the dev machine) in the web.config file to enjoy improved performance #AcumaticaDevSummit pic.twitter.com/xRg7mXqTue
— Tim Rodman (@TimRodman) June 20, 2018
Now for the fun, unsupported, borderline crazy stuff that might stop working at any point in time #AcumaticaDevSummit pic.twitter.com/MfCfa3516h
— Tim Rodman (@TimRodman) June 20, 2018
First crazy thing. Add a global button to every single graph in Acumatica #AcumaticaDevSummit pic.twitter.com/dl6nrdlz6X
— Tim Rodman (@TimRodman) June 20, 2018
Add a timestamp and who updated to a note every time a note is updated #AcumaticaDevSummit pic.twitter.com/oj42sxrhWN
— Tim Rodman (@TimRodman) June 20, 2018
Using a dependency injection with Acumatica, something that is being used in newer Acumatica code. The goal is to reduce code coupling and make easier to test. #AcumaticaDevSummit pic.twitter.com/nx0Go7lPSm
— Tim Rodman (@TimRodman) June 20, 2018
Multiple things using the IEngine interface. Not inheritance but polymorphism. #AcumaticaDevSummit pic.twitter.com/H8q3ITU6I2
— Tim Rodman (@TimRodman) June 20, 2018
Dependency injection gets a new car with the system resolving all of the dependencies magically #AcumaticaDevSummit pic.twitter.com/YlYQ819SiL
— Tim Rodman (@TimRodman) June 20, 2018
Recap of dependency injection with Acumatica, already being used by generic graph extensions in 2018 R1 #AcumaticaDevSummit pic.twitter.com/B9PrcE5g1N
— Tim Rodman (@TimRodman) June 20, 2018
Use this InjectDependency attribute #AcumaticaDevSummit pic.twitter.com/UoD17Uv4hT
— Tim Rodman (@TimRodman) June 20, 2018
This method would allow you to easily change the currency conversion service that is being used (from "dummy" to "yahoo") #AcumaticaDevSummit pic.twitter.com/BicChkNUcB
— Tim Rodman (@TimRodman) June 20, 2018
Custom HTTP Handlers are the reason why @gabrielmichaud got into dependency injection in the first place #AcumaticaDevSummit pic.twitter.com/NTSkChkOFt
— Tim Rodman (@TimRodman) June 20, 2018
Regular window was already logged in, but Incognito window prompted for the Acumatica username and password #AcumaticaDevSummit pic.twitter.com/t0EkelVgTy
— Tim Rodman (@TimRodman) June 20, 2018
Another warning that part 2 stuff might break at any time #AcumaticaDevSummit pic.twitter.com/hGVZCVoDjH
— Tim Rodman (@TimRodman) June 20, 2018
Part 3: Motivated by Gabriel's personality to always push things to the limit #AcumaticaDevSummit pic.twitter.com/jjg7SsqdnS
— Tim Rodman (@TimRodman) June 20, 2018
Now @gabrielmichaud showing how he added three actual real-world projects that he did for customers to github. Why do that? Because he is an "ERP Hippie" (my term, not his) who loves to share and inspire the community #AcumaticaDevSummit pic.twitter.com/toayuvNO0a
— Tim Rodman (@TimRodman) June 20, 2018
That Velixo Code Editor has intellisense that works even if the object has not yet been published. Still needs a good amount of work though to be production ready. #AcumaticaDevSummit pic.twitter.com/U70LMHqbL4
— Tim Rodman (@TimRodman) June 20, 2018
Here's drill-down, part of Velixo Reports Pro: https://t.co/sr3UWPLWBH – even works on formula cells (ex: =A1+C3) !
— Gabriel Michaud (@gabrielmichaud) June 20, 2018
Great session @gabrielmichaud #AcumaticaDevSummit pic.twitter.com/vlL9S0xz8Y
— Tim Rodman (@TimRodman) June 20, 2018