Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

When you use a Price Company Parameter of the JSON type, each parameter value is stored in a single DB field which has a structure of a Javascript object (JSON). In Pricefx this field is called attributeExtension. It allows you to add an unlimited number (in theory) of columns of any type and this way scale the project size over the time.

(warning) Attribute Extensions are much slower and less efficient than native columns e.g. when filtering. Use them sparingly and cautiously!

  1. Go to Price Company Parameters and create a new one.
  2. Fill in the mandatory fields in the PP table.
    As 'Table Type' select JSON; as 'Value Type' select JSON or JSON2 depending on whether you want to have one or two key columns.
  3. Select the newly added PP and proceed to the right pane with Price Company Parameters Values.
  4. Click the table header and select 'Customize Attribute Extensions' from the context menu.
  5. In the popup dialog create new columns. 
  6. Close the dialog. (Your entries will be saved.)
  7. To see the new columns in the Price Parameters Company Parameter Values table, click elsewhere in the PP table (e.g. a different Price Company Parameter). 
  8. Go back to your Price Company Parameter and the table on the right will be updated. 
  9. Add the PP the Company Parameters values in the table. 

Examples

As mentioned above, all special columns are saved in one column called "attributeExtension".

  • For the JSON table, the key is the column "name". 
  • For JSON2, there are two keys "key1" and "key2".

Fetch

Querying data is similar to a Price a Company Parameter table. 

JSON:

Code Block
def filter = Filter.equal('name', key)
def data = api.findLookupTableValues(<table_name>, filter)
data.each {row ->
  row.attributeExtension___<name of special column1> //three underscores
  row.attributeExtension___<name of special column2>
…
}

...

Code Block
def filter = Filter.and(Filter.equal('key1', key1),Filter.equal('key2',key2)

Insert

Inserting values needs more steps. Since all special columns are saved into one, it is necessary to join them in a map first and save this map. 

...