Import/export in Magento: i profili avanzati

Nelle ultime puntate abbiamo visto come esportare ed importare dati (nello specifico clienti e prodotti) da e verso Magento, utilizzando le funzionalità che ci vengono fornite dal backend. Tramite queste semplici funzionalità siamo in grado efficacemente di creare un file contenente tutto il nostro catalogo, aperto a vari utilizzi, come per esempio il passaggio di dati ad un sistema offline che tiene traccia dei prodotti in vendita, ecc.

Ma se io avessi bisogno di andare un po’ oltre quello che mi viene permesso da queste funzionalità? Se io avessi bisogno per esempio di esportare un’entità che non sia un elenco di prodotti o clienti? Per poter gestire una tale situazione Magento ci offre la possibilità di creare dei profili avanzati.

Che cos’è un profilo avanzato? Un profilo avanzato non è altro che uno dei profili di import/export che abbiamo visto nell’articolo precedente, non realizzato tramite la creazione guidata, ma creato direttamente da noi impostando le azioni del profilo tramite una struttura XML.

Per capire cosa s’intende in questo caso per struttura XML, andiamo in Sistema > Importa/Esporta > Dataflow – Profili e apriamo il profilo “Export All Products”. Nel menu a sinistra clicchiamo su “Azioni profilo XML”, si aprirà una pagina con all’interno un’area di testo chiamata Azioni XML.

azioni xml profilo avanzato

All’interno di tale area vedremo scritti vari blocchi XML. Tali blocchi definiscono le azioni che deve compiere il profilo quando viene eseguito. In sostanza seguendo la procedura della creazione guidata del profilo non abbiamo fatto altro che realizzare questa struttura XML.

In questo articolo vedremo la teoria sulla creazione di un profilo avanzato tramite la definizione delle azioni XML, come introduzione al prossimo articolo dove vedremo un’applicazione pratica personalizzata: l’esportazione dell’albero delle categorie in un file CSV.

Struttura di un profilo avanzato

Vediamo com’è un strutturato un profilo avanzato. Un profilo esegue una serie di azioni. Un azione è definita da:

  • Tipo: il tipo di un’azione indica quale ruolo avrà nel processo d’esecuzione, nel nostro caso d’esportazione. In termini di programmazione indica la classe che contiene il metodo che quest’azione utilizzerà per svolgere il suo compito.
  • Metodo: il metodo indica quale funzione appartenente al tipo dell’azione che verrà utilizzata per la sua esecuzione.
  • Variabili: per ogni azione è possibile definire delle variabili in base al tipo e al metodo dell’azione, per esempio nel nostro caso possiamo definire dove salvare il file d’esportazione, se in locale o in una cartella remota.

I tipi che possiamo impostare alle azioni sono divisi in tre gruppi:

  • Adapter: definisce le azioni che si occupano di ottenere o inviare i dati, per esempio estrarre i dati dal database.
  • Parser: definisce le azioni che si occupano di elaborare i dati, per esempio convertire i dati ottenuti dal database per poterli salvare su un file CSV.
  • Mapper definisce le azioni che si occupano d’impostare e di associare un’etichetta ai valori del file d’esportazione o importazione.

Ecco un esempio di come è strutturato l’XML di un’azione

[code type=”markup”]

file
var/import



[/code]

Per creare un profilo avanzato andiamo in Sistema > Importa/Esporta > Dataflow – Profili avanzati. Clicchiamo su “Aggiungi Nuovo Profilo”. Si aprirà una pagina con due campi:

azioni xml nuove

  • Nome profilo: il nome del profilo, deve essere univoco.
  • Azioni XML: in quest’area scriveremo le strutture XML che rappresentano le azioni.

Vediamo ora le azioni che imposteremo per il nostro profilo, analizzando i tre componenti che le gestiscono.

Adapter

Un “Adapter” gestisce il caricamento o il salvataggio di dati da o verso una determinata risorsa, che può essere un file locale o remoto, un database, un webservice ecc…
Esistono tre possibili azioni che può eseguire un “Adapter”:

  • Caricare i dati da una risorsa, utilizzando il metodo predefinito “load”.
  • Salvare i dati in una risorsa, utilizzando il metodo predefinito “save”.
  • Elaborare un record convertito tramite un azione di tipo “Parser”, definendo una coppia di variabili “adapter – method” all’interno di un’azione di tipo “Parser”.

In Magento sono già presenti alcune classi “Adapter” che possono essere utilizzate, le potete trovare nella cartella “app/code/core/Dataflow/Model/Convert/Adapter”, però non in tutti casi i due metodi “load” e “save” sono implementati.

Nei casi più comuni, quando dovrete salvare o leggere dati da un file locale o remoto potete utilizzare:

dataflow/convert_adapter_io

Un’azione di questo tipo esegue la lettura e il salvataggio dalla risorsa che indicheremo tramite le variabili della classe.

[code type=”markup”]

file
var/import



[/code]

Vediamo la lista delle possibili impostazioni:

  • type: definisce il tipo di connessione alla risorsa che vogliamo elaborare. Valori validi: file, ftp.
  • path: definisce il percorso relativo del file.
  • filename: nome del file

I prossimi campi andranno utilizzati nel caso che abbiamo definito “type” con “ftp”

  • host: definisce l’host remoto a cui connettersi.
  • port: definisce la porta ftp; se non viene specificata viene automaticamente utilizzata la porta 21
  • user: definisce lo username dell’account ftp.
  • password: definisce la password dell’account ftp.
  • timeout: definisce dopo quanto tempo di inattività si deve chiudere la connessione; valore predefinito: 90.
  • file_mode: definisce la modalità di lettura del file; valore predefinito “FPT_BINARY”.
  • ssl: se il campo non è vuoto allora viene utilizzata una connessione ssl.
  • passive: definisce la modalità di connessione; valore predefinito “false”.

customer/convert_adapter_customer – catalog/convert_adapter_product

Tramite queste due classi Magento offre due “Adapter” predefiniti per l’estrazione o salvataggio dei dati di clienti o prodotti.
Se per esempio vogliamo estrarre tutti i dati di tutti i clienti di uno specifico store scriveremo un’azione di questo tipo:

[code type=”markup”]



[/code]

In questo caso vediamo che nella variabile “store” definiamo l’id numerico dello store che abbiamo selezionato per l’estrazione dei dati.

Inoltre queste due classi ci permettono di filtrare i dati da estrarre, utilizzando delle variabili, definite con questa sintassi:
[code type=”markup”]

[/code]
la lista degli attributi su cui è possibile filtrare i clienti è:

  • firstname
  • lastname
  • email
  • group
  • addressType (valori validi: both, default_billing, default_shipping)
  • telephone
  • postcode
  • country
  • region
  • created_at/from
  • created_at/to

[code type=”markup”]














[/code]

la lista degli attributi su cui è possibili filtrare i prodotti è:

  • name
  • sku
  • type (valori validi: simple, configurable, grouped, bundle, virtual, downloadable)
  • attribute_set
  • price/from
  • price/to
  • qty/from
  • qty/to
  • visibility
  • status

[code type=”markup”]













[/code]

Parser

I parser sono i responsabili per la conversione dei dati tra vari formati, per esempio convertire i dati estratti dal database per poterli salvare su un file CSV.

I metodi che vengono forniti dalle classi di tipo “Parser” sono “parse” e “unparse”. Entrambi i metodi, se appartengono ad una stessa classe, effettuano la medesima conversione, ma nelle due direzioni opposte, quindi se “parse” converte in dati da database a file, “unparse” li dovrà convertire da file a database.

Vediamo ora i “Parser” che Magento offre già pronti per l’utilizzo.

dataflow/convert_parser_csv

Forse uno dei “Parser” più utilizzati che permette di convertire i dati da un file CSV, con il metodo “parse”, o convertirli per un file CSV, con il metodo “unparse”. Questa azione definisce come sono rappresentati i dati nel file CSV e nel caso d’importazione con quale “Adapter” verranno salvati nel database.

Ecco un esempio di un’azione definita con questo tipo

[code type=”markup”]



true


catalog/convert_adapter_product
parse

[/code]

Vediamo le variabili che questa classe ci fornisce per personalizzare l’azione

  • delimiter: definisce il divisore tra i valori utilizzati nel file CSV; il valore predefinito è la virgola (,).
  • enclose: definisce quale carattere racchiude ogni valore del file CSV; il valore predefinito sono le virgolette (“).
  • escape: definisce il carattere che identifica la fine di un record; il valor predefinito è il doppio backslash (\\).
  • decimal_separator: definisce il carattere che identifica il segno che separa i valori numerici interi dai decimali.
  • fieldnames: se questo campo è settato a “true”, il “Parser” considererà che la prima riga del file CSV conterrà i nomi dei campi, se settato a “false” verrà utilizzata la variabile “map”
  • map: definisce il nome dei campi presenti nella prima riga del file CSV. Per la spiegazione di questa variabile rimando alla sezione “Mapper”.
  • adapter: in caso di profilo d’importazione, definisce quale “Adapter” utilizzerà per ogni riga del file.
  • method: in caso sia definita la variabile “adapter”, definisce quale metodo dell’“Adapter” utilizzare per salvare nel database ogni riga; il metodo predefinito è “saveRow”.

Dall’esempio potete vedere che è presente la variabile “store”. Nel caso che l’“Adapter” che definiamo all’interno dell’azione abbia bisogno di alcune variabili, definendole come variabile all’interno dell’azione esse saranno passate automaticamente dal “Parser” all’“Adapter”.

dataflow/convert_parser_xml_excel

Un altro “Parser” che offre Magento è quello che permette la traduzione dei dati da database ad un file EXCEL XML e viceversa.
Ecco un esempio di un’azione

[code type=”markup”]


true

[/code]

Questa classe possiede le stesse variabili di “dataflow/convert_parser_csv”, tranne che naturalmente quelle che definiscono la formattazione dei dati di un file CSV.
La variabile particolare per questa classe è:

  • single_sheet: definisce quale foglio di calcolo utilizzare per l’esportazione o l’importazione, se il campo è vuoto verranno presi tutti i fogli di calcolo presenti nel file.

customer/convert_parser_customer – catalog/convert_parser_product

Nel caso vogliamo lavorare con clienti o prodotti, Magento ci fornisce queste due classi per effettuare la conversione di dati da database a file (CSV, EXCEL XML o altro). La strada contraria viene principalmente gestita dai “Parser” come “dataflow/convert_parser_csv”, quindi il metodo “parse” è deprecato. Per esempio se volessimo convertire tutti i dati che abbiamo in precedenza caricato dei prodotti per il salvataggio in un file dovremmo settare questa azione:

[code type=”markup”]



[/code]

Mapper

Le classi “Mapper” permettono di assegnare un’etichetta particolare ad ogni campo che abbiamo elaborato, per esempio nel nostro caso avremo il campo “name”, possiamo tramite queste classi assegnare a questo campo l’etichetta “nome_categoria”. Ogni “Mapper” possiede la funzione “map”, metodo che si occupa dell’assegnazione dell’etichetta.
Inoltre, caratteristica molto importante, tramite la funzione “map” potremo specificare se verranno esportati o importati solo i campi che verranno mappati.

dataflow/convert_mapper_column

Questo è il “Mapper” più utilizzato e che utilizzeremo anche noi per il nostro profilo avanzato. Vediamo come definire l’azione per il nostro modulo

[code type=”markup”]


true

[/code]

L’azione possiede due variabili

  • map: variabile che elenca i vari campi che dovranno essere considerati dal “Mapper, all’interno di esso scriveremo un elenco di tag “map” per ogni campo, con questa struttura
    <map name=”nome campo in Magento“><![CDATA[nome campo nel file]]>in caso di esportazione, i due nomi saranno invertiti in caso di importazione.
  • _only_specified: se settato a “true” verranno esportati o importati solo i campi definiti nella variabile “map”

In precedenza abbiamo visto che nel “Parser”, in caso d’importazione, può comparire la variabile “map”. Tale variabile si comporta esattamente come quella appena descritta, definendo quindi per l’importazione l’assegnamento delle etichette dei campi. In questo caso la variabile “_only_specified” viene automaticamente settata a “true”.

Posizionamento Azioni XML

La posizione nell’area di testo dove abbiamo scritto le azioni del nostro profilo è molto importante in quanto indica l’ordine in cui verranno eseguite in fase di elaborazione del profilo. Prendiamo il caso del profilo già presente in Magento, riguardante l’esportazione delle quantità presenti in magazzino dei prodotti.

Estraiamo dal database i dati dei prodotti

[code type=”markup”]



[/code]

Convertiamo i dati in un formato per il salvataggio su file

[code type=”markup”]




[/code]

Conserviamo i campi definiti e assegniamo le etichette

[code type=”markup”]


true

[/code]

Convertiamo i dati per poterli salvare su un CSV

[code type=”markup”]



true

[/code]

Salviamo i dati sul file “var/export/export_product_stocks.csv”

[code type=”markup”]

file
var/export


[/code]

Scriviamo in quest’ordine le azioni nell’area di testo e clicchiamo su “Salva e continua la modifica”. Nel menu a sinistra appariranno le voci “Esegui profilo”, da cui potremo eseguire il nostro profilo e “Cronologia profilo” dove potremo visualizzare quando è stato attivato.

Abbiamo concluso questa guida sulle azioni XML relative alla creazione di un profilo avanzato di import/export in Magento. Nel prossimo articolo vedremo un’applicazione pratica di come utilizzare un profilo avanzato per un’esportazione personalizzata, nel nostro caso vedremo l’esportazione dell’albero delle categorie.

Condividi