Next Message BlockΒΆ

  • The nextmessageblock section in a grammar is mostly used for csv-files consisting of one record-type.
  • Think of excel, where every row has the same layout.
  • Via nextmessageblock all subsequent records with eg the same ordernumber are passed as one message to the mapping script.
  • This is best understood by an example, consider the below CSV file:
ordernumber1,buyer1,20120524,1,article1,24
ordernumber1,buyer1,20120524,2,article2,288
ordernumber1,buyer1,20120524,3.article3,6
ordernumber2,buyer2,20120524,1,article5,124
ordernumber3,buyer1,20120524,1,article1,24
ordernumber3,buyer1,20120524,2,article4,48

which will have the grammer:

from bots.botsconfig import *

syntax = {
    'field_sep' : ',',               #specify field separator
    'noBOTSID'   : True,             #does not have record-ID's
    }

nextmessageblock = ({'BOTSID':'HEADER','order number':None})   #feed mapping script with separate orders (where ordernumber is different)

structure = [
{ID:'HEADER',MIN:1,MAX:9999}         #only 1 record-type
]

recorddefs = {
'HEADER':[
    ['BOTSID','M',6,'A'],            #Note: BOTSID is ALWAYS needed
    ['order number', 'M', 17, 'AN'],
    ['buyer ID', 'M', 13, 'AN'],
    ['delivery date', 'C', 8, 'AN'],
    ['line number', 'C', 6, 'N'],
    ['article number', 'M', 13, 'AN'],
    ['quantity', 'M', 20, 'R'],
    ],
}

The mapping script in the translation receives 3 separate orders (so mapping script will run 3 times):

order with number 1:
ordernumber1,buyer1,20120524,1,article1,24
ordernumber1,buyer1,20120524,2,article2,288
ordernumber1,buyer1,20120524,3.article3,6

order with number 2:
ordernumber2,buyer2,20120524,1,article5,124

order with number 3:
ordernumber3,buyer1,20120524,1,article1,24
ordernumber3,buyer1,20120524,2,article4,48

Note

Use multiple fields for splitting up (bots > 3.1); Example: nextmessageblock = ([{'BOTSID':'HEADER','order number':None},{'BOTSID':'HEADER','buyer ID':None}])

Note

nextmessageblock works for fixed files with one type of records (bots > 3.1)