...
1.Mapping configuration is read from QuotesDataExtractorMappingConfiguration, saved in a format of map with 3 keys: columnsMapping,idCol,searchLevelOrder and assigned to api.global.ExtractorConfig – which is a result of element „MappingConfiguration”
Dictionary:
mappingLine: row of QuotesDataExtractorMappingConfiguration table
searchLevelOrder: a list of search levels (Q,QLI,QLI_INPUT,QLI_OUTPUT,W)
columnsMapping: map of configurations per quote types, each quote type as key and as value - map of configs with: quoteAndWorkflowLevelConfig, otherLevelConfig, calculationAtQConfig, calculationAtQLIConfig
quoteAndWorkflowLevelConfig: map with config rows „Extract Level” column values : Quote or Workflow
otherLevelConfig: map with config rows „Extract Level” column values other than Quote or Workflow
idCol: value of columnsMapping.idColumn, if it’s null the default is always „UniqueId”
...
7.For the config type „calculation” – if any values are present in calculationAtQConfig, extraction on these values is additionally performed and added to quoteLineItemRow
List of exisitng quote line items for given quote is fetched by quote type id, using api.getCalculableLineItemCollection
Iteration over this list of quote line items begin
10. In each iteration for each line item – the same steps as in point 5,6 and 7 are performed but the only levels that are being processed are QLI,QLI_INPUT and QLI_OUTPUT:
...
· Brackets expression – Specifies a search formula (evaluated using the FormularEvaluator library) or an index to get data in a list structure or using the last/first keyword (to get teh last item / first item in a list).
...
· Calculation type – Returns the calculated value from an expression using the FormularEvaluator library. The calculation type is calculated after all data are extracted from the quotes.
...
Behavior of GenerateQueryConfig:
Reads the inputs
Generates map of queryConfigs
Sorts aliases in the order in which tables will be then joined in Data_Query
Sorts queryConfigs according to sorted aliases
Adds date filters and partition filters to queryConfig for primary source
Returns map of queryConfigs
queryConfig structure:
filterMap: source column as key, primary source column as value
filter: list of all filters : date filters + optimization filters + partition filters + feeder filters
query: query object to fetch data for temporary table, query if filled with projections which are the names of columns and then that query is executed to have a lookuped data before loading it into table context
other keys: dataMap, fields, groupBy, groupFieldMap, columns, sourceType, sourceName
...
Inputs: GenerateQueryConfig
Dictionary: joiningRelations – map in which as keys there are aliases on tables which are to be joined – separated by a dot, in form of String, and as values – there are relations in which temporary tables will be mapped – mappings from 1 column to another. Joining of 2 tables can have more than 1 relation.
Optimization filter: filters which purpose is to avoid fetching redundant rows, optimize lookup data process. Optimization filters are created based on joining relations. After fetching the data for source – it’s checked whether source has any relations with other sources. If yes – queryConfig for given source is modified – the values for column shown in relation. It’s a list added as queryConfig.filter
Behavior: (1-3 are in loop iterating over queryConfigs):
Lookups data based on queryConfigs
Sets optimization filters for each table
Performs data masking
Returns map with masked data
Data masking process:
For masking, a seed is being used (which is a value in the column „Seed for masking” inn PP table) and after each process of masking, seed iis added to api.local.seedMap – to make sure we avoid duplication of the process (it checks before masking if given seed already exists in api.local.seedMap). Then maskedValueKey is created based on 3 inputs: source alias, value of given column and seed for fiven column. With this key, we take masked value from api.global.maskMap, and if such didn’t exist in maskMap – then PlasmaLib is called where we pass a seed and value for given column. Masking process happens in PlasmaLib through getMaskedString method.
...