ERP di ultima generazione e massima flessibilità

In questo articolo ci piacerebbe segnalare un altro importante gestionale OpenSource che sta riscuotendo molte attenzioni dal mondo enterprise.

ODOO (che deriva da OpenERP) è un gestionale ERP OpenSource che fa della sua struttura modulare una delle caratteristiche principali che permette al sistema di adattarsi facilmente alle mutazioni di mercato.

Come accennato parecchie volte su questo blog, sopratutto per ciò che riguarda gli ERP aziendali: la flessibilità e l’adattabilità del software risultano essere, attualmente, un’ottima determinante per la buona riuscita di un progetto informatico.

Con Odoo è possibile installare facilmente app di diversa natura direttamente sul proprio ambiente. E’ possibile avere anche una versione in cloud e, grazie alla sua natura opensource, si ha la possibilità di trovare facilmente diversi partner “concorrenti” sul mercato.

La gestione di un sistema informatico attraverso app permette gli utilizzatori di poter scegliere il modulo che meglio si addice al proprio mercato di riferimento. Questo fa risparmiare costi e tempi di sviluppo. Le aziende utilizzatrici possono inoltre decidere di sviluppare un proprio modulo per avere una maggiore customizzazione sui propri processi aziendali.

Sviluppare attraverso moduli permette di concentrarsi soltanto sull’unità logica di business che si vuole implementare tralasciando al framework tutti gli aspetti indiretti relativi al sistema gestionale (autorizzazione degli accessi, ruoli, utenti, sicurezza del dato…).

Sviluppo nuove customizzazioni su Adempiere, massima flessibilità e semplicità

Adempiere mette a disposizione degli sviluppatori alcuni tool che semplificano il processo di implementazione.

Se si vuole sviluppare una nuova feature la prima cosa da fare è modellizzare il database e creare lo strato di persistenza model all’interno del codice sorgente.

Come possiamo vedere dall’implementazione del configuratore di processo sono state create le classi model con i metodi modifiers getter e setter per la gestione dei dati. Queste classi rispecchiano il modello dati esistente sul database.

Ad esempio CP_ConfProc.java corrisponde alla tabella cp_confproc sul database, CP_ProcessFlow.java corrisponde alla tabella CP_ProcessFlow e così via.

Adempiere mette a disposizione degli sviluppatori alcuni strumenti che rendono più semplice e controllato lo sviluppo della parte model dell’applicazione. Basta quindi “costruire” il database della customizzazione (ricordarsi lo standard di implementazione delle tabelle: inserire il prefisso che ricoda il tipo di customizzazione e le colonne che devono essere obbligatoriamente presenti in ogni tabella).

Dal database è possibile “costruire” il “modello” dell’applicazione grazie ad una classe utility: /src/org/adempoiere/util/GenerateModel.java

Questa funzione permette la costruzione di tutte le classi che hanno come prefisso X_ e le interfaccie con prefisso I_ con i relativi getter e setter associati rispettivamente alla tabella ed alle colonne della customizzazione.

Le classi X_CP_ConfProc.java e I_CP_ConfProc.java sono autogenerate dal GenerateModel.

sezione del GenerateModel.java

    String tableLike = null;
    tableLike = "'%'";  //  All tables
    // tableLike = "'AD_OrgInfo', 'AD_Role', 'C_CashLine', 'C_Currency', 'C_Invoice', 'C_Order', 'C_Payment', 'M_InventoryLine', 'M_PriceList', 'M_Product', 'U_POSTerminal'";  //  Only specific tables
    if (args.length > 3)
      tableLike = args[3];
    log.info("Table Like: " + tableLike);

    //  complete sql
    sql.insert(0, "SELECT AD_Table_ID "
      + "FROM AD_Table "
      + "WHERE (TableName IN ('RV_WarehousePrice','RV_BPartner')"  //  special views
      + " OR IsView='N')"
      + " AND IsActive = 'Y' AND TableName NOT LIKE '%_Trl' AND ");
    // Autodetect if we need to use IN or LIKE clause - teo_sarca [ 3020640 ]
    if (tableLike.indexOf(",") == -1)
      sql.append(" AND TableName LIKE ").append(tableLike);
    else
      sql.append(" AND TableName IN (").append(tableLike).append(")"); // only specific tables

    sql.append(" ORDER BY TableName");
    
    //
    int count = 0;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try
    {
      pstmt = DB.prepareStatement(sql.toString(), null);
      rs = pstmt.executeQuery();
      while (rs.next())
      {
        new ModelInterfaceGenerator(rs.getInt(1), directory, packageName);
        new ModelClassGenerator(rs.getInt(1), directory, packageName);
        count++;
      }
     }
    catch (Exception e)
    {
      log.log(Level.SEVERE, sql.toString(), e);
    }
    finally
    {
      DB.close(rs, pstmt);
      rs = null; pstmt = null;
    }
    log.info("Generated = " + count);
  }

									

 

Utilizzo customizzazione e gestione finestre

Una volta terminate le operazioni di configurazione possiamo iniziare con l’utilizzo delle customizzazioni per la nostra necessità. Accediamo nel sistema come amministratori aziendali (noi utilizzeremo un’utenza precedentemente creata su questo portale per altri tutorial “AziendaAdmin”). Notare nella figura successiva la nuova cartella del menù “Informazione Software” con la relativa finestra creata precedentemente: “Software“.
Cliccando sulla finestra “Software” è possibile accedere a tutte le informazioni delle tabelle “CUS_Software” e “CUS_SoftwareLine” attraverso i TAB precedentemente creati.

Leggi tutto “Utilizzo customizzazione e gestione finestre”

Customizzazione Adempiere per una software house

Un’azienda di software vuole creare sul proprio sistema informatico Adempiere una propria customizzazione aziendale.

L’azienda vuol fare in modo di registrare, con una propria logica, tutte le informazioni del software venduto sfruttando tutte le potenzialità di un sistema gestionale integrato.

In particolare si vogliono registrare informazioni relative alle caratteristiche tecniche del software venduto, al cliente, alle risorse impiegate…

Leggi tutto “Customizzazione Adempiere per una software house”