Persist (Store Data)

Persist allows to store data for use in other messages/transactions.

Use cases:

  • Store data from an incoming order, and use the data later for DESADV and/or INVOIC. Often the buyer want you to return data in the orders that are hard to store in your internal system.
  • Is used in plugin alto_seperate_headers_details: input: 2 csv files, one with headers, one with details lines. This is processed into one document (so the headers and details are merged) using persist.

Details:

  • Persist data is store in the bots database.
  • You can store and retrieve any python data (python pickle is used).
  • bots < 3.0: storage size (per item) is limited to 1024 positions; bots >= 3.0: unlimited.
  • Parameter maxdayspersist in bots.ini controls how long the values are kept in bots. This is done using a timestamp for the persisted data. However, the timestamp is not updated if you update the information in the persist database. This can be done via a database trigger. In bots 3.2.0 and later the SQLite database includes this trigger (might be somewhat SQLite specific):
CREATE TRIGGER persist_update AFTER UPDATE OF content ON persist
BEGIN
    UPDATE persist SET ts = datetime('now','localtime')
    WHERE domein = new.domein and botskey = new.botskey ;
END

Example

You receive orders from buyer XXX. In the order they have a reference number that has to be returned in ASN’s and invoices.

#in the order:
buyerID = inn.ta_info['frompartner']
po_number = inn.get({'BOTSID':'ST'},{'BOTSID':'BEG','BEG03':None})
ref_number = inn.get({'BOTSID':'ST'}{'BOTSID':'REF','REF01':'IP','REF02':None})
transform.persist_add(buyerID, po_number, ref_number)
#now this referenced number is in persist; domain is the buyerID, key is the po_number (that will be return eg in invoice)

#in the invoice find the domain and key:
buyerID = inn.ta_info['frompartner']     #via QUERIES in invoice in-house grammar
po_number = inn.get({'BOTSID':'HEADER','PO_NUMBER':None})
#fetch reference number from persist:
ref_number = transform.persist_lookup(buyerID, po_number)

Functions

transform.persist_add(domain, key, value)

Add value to persist. If not possible, eg. because domain-key exists already, botslib.PersistError is raised.

transform.persist_update(domain, key, value)

Update the value. If domain-key does not exist: does not add it, gives no error.

transform.persist_add_update(domain, key, value)

Add, but if domain-key already exist: update.

transform.persist_lookup(domain, key)

Returns value. If domain-key does not exist: returns None.

transform.persist_delete(domain, key)

Deletes value. If domain-key does not exits: gives no error.