{
  "id": 11855643,
  "title": "A customer maintenance form in Uniface 10, part 10 - a CSV import with a dry run, and backing up a SQLite file Uniface keeps o",
  "url": "https://urgent.news/2026/10/04/a-customer-maintenance-form-in-uniface-10-part-10-a-csv-import-with-a",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-10-04T05:44:53.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/f345345dfg/a-customer-maintenance-form-in-uniface-10-part-10-a-csv-import-with-a-dry-run-and-backing-up-a-4716"
  },
  "original_language": "en",
  "account": "Uniface 10 includes a CSV import feature that reads data from a trade fair list and validates it against business rules. The IMPORT_CUSTOMERS service reads the export format, validates every line, and writes a log. A dry run runs this log without changing any data. The BACKUP service copies the database into a folder with a timestamp, keeping the newest n copies. The BACKUP_IF_DUE feature performs this task at most once per day. An interesting discovery was that the SQLite feature attempted to use did not work in Uniface, as a test log revealed. The CSV format is fixed: ten columns, separated by semicolons, with a header line. The ID column can be empty, and the active status can be Y, N, or empty. Address columns are optional, and optional address columns create a billing address. The import parses the file line by line, removing the Byte Order Mark (BOM) and converting line endings to Uniface's separator. It treats the text as a list, splitting it into fields using a state machine that handles quotes and semicolons. The SPLIT_CSV function appends fields to a list and counts the columns. The SPLIT_LINE function is a wrapper for the parser, which is not efficient for large files. Each line goes through the same rules as the IMPORT_LINE form validation, which uses the CUSTOMER_SVC service.",
  "summary": "Part 8 wrote customers to a CSV file. The obvious next request is the reverse: \"we have a list from the trade fair, can you load it?\". And once an import can write a hundred customers in one click, the next question follows immediately: \"and how do I get back to yesterday if it went wrong?\". So this part has two services: IMPORT_CUSTOMERS reads the export format back, validates every line with…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 2,
    "also_reported_by": [
      {
        "outlet": "Dev.to",
        "title": "A customer maintenance form in Uniface 10, part 1 - from an empty IDE to working CRUD on SQLite",
        "url": "https://urgent.news/2026/10/04/a-customer-maintenance-form-in-uniface-10-part-1-from-an-empty-ide-to",
        "published": "2026-10-04T05:07:43.000Z"
      }
    ]
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}