B-Arts DocumentationIndice generale

BIFFile - Esempi e formato BIF

Scopo del formato

BIF è il formato ufficiale B-Arts generato da BStudio per distribuire dati insieme a un primo rilascio applicativo o a una patch dati corposa. È progettato per essere letto dai template applicativi B-Arts e importato rapidamente in SQL Server tramite SqlBulkCopy.

Struttura del file

  • Estensione: .bif.

  • Il nome del file senza estensione corrisponde al nome della tabella SQL Server destinazione.

  • Separatore dei campi: «|b|».

  • Terminatore dei record: «~b~».

  • La prima riga contiene nome e tipo di ogni colonna nella forma Nome~Tipo.

  • Sono supportati i tipi riconosciuti dal lettore B-Arts, inclusi String, Int32, Int64, Double, Boolean, DateTime e Byte[].

  • Per Byte[], ogni byte viene scritto come carattere equivalente e ricostruito in lettura; questo permette al formato di trasportare contenuto binario.

Esempio concettuale semplificato:

ID~Int32«|b|»Descrizione~String«|b|»Allegato~Byte[]«~b~»
1«|b|»Documento iniziale«|b|»<contenuto binario codificato BIF>«~b~»

Il formato effettivo deve essere generato da BStudio per garantire corrispondenza tra schema, tipi, separatori e contenuto binario.

Lettura controllata

using B.BIO;
using B.BLog;
using B.BInterfaces;

BLogText log = new BLogText();
BIFFile bif = new BIFFile(
  connection,
  @"C:\Release\BIF\sysConfigurazioni.bif",
  ref log);

if (bif.Stato == BIFFile.eStato.Errore)
{
  throw new InvalidOperationException(log.Text);
}

if (!bif.Read() || bif.DT == null)
{
  throw new InvalidOperationException(log.Text);
}

int rowsToImport = bif.DT.Rows.Count;

Il costruttore verifica l'esistenza del file e della tabella ricavata dal nome. Read() decodifica header tipizzato, record e valori binari in una DataTable, quindi imposta Stato a Letto.

Importazione durante rilascio o patch

// Eseguire solo dopo conferma esplicita dell'operatore e controlli applicativi.
if (!bif.Import())
{
  bif.Stato = BIFFile.eStato.Errore;
  throw new InvalidOperationException(bif.BLog.Text);
}

bif.Stato = BIFFile.eStato.Importato;

Import() esegue intenzionalmente questi passaggi:

  1. TRUNCATE TABLE sulla tabella che ha lo stesso nome del file;

  2. importazione massiva della DataTable tramite BConnection.InsertDT;

  3. conservazione dei valori identity presenti nel BIF (KeepIdentity).

È quindi una funzione amministrativa per inizializzazione e patch, non un normale import incrementale richiesto dagli utenti dell'applicazione.