We can import PX data to the Datamart using a PA Calculation Logic:
Create a PA Calculation Logic with a Groovy element (set the Calculation Context of this element to Init) similar to this "Competition" PX Category example:
def target = api.getDatamartRowSet("target") def result = api.stream("PX", null /* sort-by*/, ["sku","attribute1","attribute2","attribute5","attribute7","attribute9","attribute11"], Filter.equal("name", "Competition")) while (result.hasNext()) { def comp = result.next() // to be able to load rows in the DS we need at least the key fields if (comp.sku != null && comp.attribute1 != null) { def row = ["DateTime":now, "sku": comp.sku, "Competitor" : comp.attribute1, "Price" : comp.attribute2, "ShippingCost" : comp.attribute5, "DataProvider" : comp.attribute7, "Availability" : comp.attribute9, "Relevant" : comp.attribute11] target.addRow(row) } } result.close() |
This next example is not related to the one before, it only shows in principle how to cache data read from PX table to a global Map
def sku2Competitor = api.global.sku2Competitor if (sku2Competitor == null){ sku2Competitor = [:] api.global.sku2Competitor = sku2Competitor } def skn = api.getElement("SKN") if (sku2Competitor.containsKey(skn)){ return sku2Competitor.get(skn) } else{ // attribute4 = Competitor def pxNameFilter = api.filter("name", "NamedCompetition") def pxCompFilter = api.filter("attribute4", api.getElement("Competitor")) def pxSKNFilter = api.filter("sku", api.getElement("SKN")) def competitors = api.find("PX", 0,1, null /*sort*/, ["id"], pxNameFilter, pxCompFilter, pxSKNFilter) //api.trace("test", competitors?.size().toString(), pxCompFilter) def hasCompetitor = competitors?.size() > 0? 1:0 sku2Competitor.put(skn, hasCompetitor) return hasCompetitor } |
A global variable 'sku2Competitor' is created to ensure that the logic is not run multiple times for the same SKN. In the else statement, we set up filters using api.filter("fieldName", value)
. Then we create an array "competitors" using api.find(String typeCode, int startRow, int maxRows, String sortBy,List<String> fields, Filter
... filters)
with the filters that we created to find the row in the NamedCompetition PX that has the given Competitor and SKN. The SKN and Competitor are then stored in the global variable.