Versions Compared

Key

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

...

The valueFormatter can also be used outside the JSON-generation.

3.1 - Data model

3.1.1 -  JSON File model

The following tables are presented in the data model diagram below:

  1. CDR_FILE_DEF (class CdrFileDef)
  2. CDR_RECORD_DEF (class CdrRecordDef)
  3. DOCUMENT_DEF(class DocumentDef)
  4. JSON_TAG_DEF (class JSONTagDef)
  5. VALUE_FORMATTER (class ValueFormatter)

All the above mentioned classes are persistent.

 


3.1.2 - File Processor Model

Image Added

3.2 - JSONTagDef

A record in the JSON_TAG_DEF defines a single tag (key/value pair) of the resulting JSON file, and it has the following attributes:

...

TAG_NAMEName of the tag. For example currency, amount, Name, Voucher, Id, brand etc
MAP_KEY

Key to retrieve the correct component from the map. Example: HEADER or FILEDEF or RECORD_DEF or tag name of the parent record from which a child tag value can be obtained.

HEADER holds the file source record.

FILEDEF holds the current instance of JSONDocumenrFiller.

RECORD_DEF holds the CDR_RECORD_DEF (with CODE = DETAIL) instance set up for this JSON Document export

VALUE_TYPECan be FIELD (if the value to print is a field of the map object) or METHOD (if the content is retrieved calling a specific method in the map object obtained via the key set in MAP_KEY).
FIELD_NAMEIf the value type is FIELD then this specify the field to print in the JSON tag content.
METHOD_NAMEif the value type is METHOD, then this specify the method to invoke on the map object to retrieve the data to fill the content for the current tag.
JSON_DATA_TYPE

The data type with which the JSON field value should be represented while writing value to file. Possible value are OBJECT, ARRAY, STRING, NUMBER andBOOLEAN.

  • OBJECT, ARRAY types can be used only for the parent tag types (i.e JSON_TAG_DEF  entries that have children). 
  • STRING, NUMBER, BOOLEAN types can be used only for the JSON_TAG_DEF entries that do not have any children.

Please see: Value Formatter and How to use VALUE_FORMATTER and JSON_DATA_TYPE for more details

Note: JSON Key names will always be surrounded by double quotes. This JSON_DATA_TYPE configuration settings are applicable only for values, not the keys.

JSON_DATA_TYPE

value

Description of behaviorExample
OBJECT (Default setting for the JSON_TAG_DEF  entries that have children)

Can be used only for the parent tag types.

If this type is chosen, the children of this parent tag will be surrounded by curly braces { }

JSON Tag Voucher is set up as OBJECT type

  • JSON_TAG_DEF.TAG_NAME = voucher, JSON_DATA_TYPE = OBJECT / empty
  • Resulting line in JSON file: 
    "voucher" : { "id" : "12345","serial_number" : "12345","secret_code" : "12345" }
ARRAY

Can be used only for the parent tag types.

If this type is chosen, the children of this parent tag will be surrounded by square brackets [ ]

JSON Tag Voucher is set up as OBJECT type

  • JSON_TAG_DEF.TAG_NAME = voucher, JSON_DATA_TYPE = ARRAY
  • Resulting line in JSON file: 
    "voucher" : [ "id" : "12345","serial_number" : "12345","secret_code" : "12345" ]
STRING (Default setting for JSON_TAG_DEF  entries that do not have any children)

Can be used only for the JSON_TAG_DEF entries that do not have any children.

Resulting value will be surrounded by double quotes.

JSON_TAG_DEF.TAG_NAME = brand

Actual Field Value

Result After Choosing

JSON_DATA_TYPE = STRING

Resulting key value pair in JSON file

XYZ

"XYZ""brand" : "XYZ"
NUMBER

Can be used only for the JSON_TAG_DEF entries that do not have any children.

Resulting value will not have double quotes around. Should be used for presenting numeric type values in JSON file.

JSON_TAG_DEF.TAG_NAME = count

Actual Field Value

Result After Choosing

JSON_DATA_TYPE = NUMBER

Resulting key value pair in JSON file

43

43"count" : 43
BOOLEAN

Can be used only for the JSON_TAG_DEF entries that do not have any children.

Boolean equivalent of the actual field value gets written to the json file. Resulting value will not be surrounded by double quotes

JSON_TAG_DEF.TAG_NAME = exported

Actual Field Value

Result After Choosing

JSON_DATA_TYPE = BOOLEAN

Resulting key value pair in JSON file
1true"exported" : true
0false"exported" : false
abcdefgfalse"exported" : false
Ytrue"exported" : true
Truetrue"exported" : true
PARENT_IDDefines the ID of the parent tag and therefore it is used to define the structure of the JSON-file. The parent ID for the root tag will be null.
FLUSH_CONTENTif ‘Y’ the content generated in the outputStream will be flushed in the JSON-file when the end tag of the current tag is printed.
FORMATTER_ID

ID of appropriate VALUE_FORMATTER table entry that is suitable to format this field value. The value formatter used to format the JSON field value, before applying the JSON_DATA_TYPE. So, first the Value formatter is applied to the field value, and then the JSON_DATA_TYPE setting is applied.

Please see: Value Formatter and  How to use VALUE_FORMATTER and JSON_DATA_TYPE for more details

METHOD_INPUTIn some cases when the METHOD_NAME is invoked we also need some extra information that must be passed in the method. For instance in the cdr generation if we have a list of invoice detail lines inside the record tag we need to retrieve only the invoice detail lines related to that billing record and this can be done by defining in this field the tag name related to the object to pass: in this case it will be “Record”.
METHOD_INPUT_CLASS_NAMEThis is the class name of the method_input field (“com.CDRator.billing.rating.BillingRecords” in this for example).
SEQ_ORDERIf a tag has more than one child, here we can specify the preferred order to print them.
RELOAD_METHODIf the tag to print is related to a list (i.e. a list of records) then it is possible to load them in multiple batches. In the JSON file generation when the content of the current batch has been printed then we try to retrieve further elements using the reload method if set.

...

Following Concrete sub-classes of DocumentFiller can be found in the FileProcessor Integration project. See JSONDocumentFiller for more details

3.4.1 - JSONDocumentFiller 

...

The value formatter is used in order to be able to configure the formatting of field values. Here a formatter class and a pattern can formatter_expression can be specified that will be used to generate a string.

...

Value Formatter

implementation

DescriptionExample
com.CDRator.billing.utils.formatter.DateFormatterUsed to format a Date object to a String according the pattern formatter_expression set on this Value_Formatter entry.

Input value Type: Date

Patternformatter_expression: dd.MM.yyyy

Input value: 26-11-2015 10:00:00

Result: 26.11.2015

com.CDRator.billing.utils.formatter.NumberFormatter

Used to format a Number to a String according the pattern formatter_expression set on this Value_Formatter entry.

Input value Type: any number type

Patternformatter_expression: #,##0.00

Input value: 200

Result: 200.00

com.CDRator.billing.utils.formatter.XmlStringFormatter

Used to escape a String to be compatible with XML format

Input value Type: String

Input value: x>y

Result: x>y

com.CDRator.billing.utils.formatter.JsonStringFormatter

Used to escape a String to be compatible with JSON format

Input value Type: String

Input value: 'test'

Result: \'test\'

...

ScenarioConfiguration

The actual field value is a Number type, but would like to write it as a String in the JSON file. 

For example : Actual field value = 100, but we want the value written to the JSON file to be : "100"

Value Formatter: No formatter (or) Number formatter with pattern formatter_expression containing no decimals

JSON_DATA_TYPE: STRING

The actual field value is a Number with no decimals, but would like to write it as a float value in the JSON file. 

For example : Actual field value = 100, but we want the value written to the JSON file to be : 100.00

Value Formatter: Number formatter with pattern formatter_expression to convert to decimal format

JSON_DATA_TYPE: NUMBER

The actual field value is a String, but would like to write it as a Boolean in the JSON file. 

For example : Actual field value = "1"/1, but we want the value written to the JSON file to be : true

Value Formatter: No formatter needed

JSON_DATA_TYPE: BOOLEAN

The actual field value is a String type and contains some characters that should be escaped to be JSON compatible.

For example: Actual field value = "Value with "quotes"", but we want the value to be escaped properly before writing it to the JSON file.

Value Formatter: JsonStringFormatter

JSON_DATA_TYPE: STRING

Actual field value = "Value with "quotes""

Result: "Value with \"quotes\""

...