initial data load extension module webinar february 4th, 2009
TRANSCRIPT
Initial Data Load
Extension Module Webinar
February 4th, 2009
Page 2Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
Agenda
Functionality and Demo 15 min.
Process and Tools 10 min.
Development Technique 5 min.
Q & A 30 min.
Page 3Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
Agenda
Functionality and Demo
Process and Tools
Development Technique
Q & A
Page 4Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
Goal:Provide a set of automated data import processes to quickly load core ERP
data into Openbravo.QuickStart customers: predefined templates (simplicity).Support full “new-install-to-production-ready” instance.
Functional HighlightsInitial Data Load
Solution Approach:Deliver as a extension module. Included in QuickStart.Spanish Translation.
Benefits: Enable end users to manage the process.Minimize considerably time of migration.Ensure fully-integrated set of validated ERP data.Complete and detailed documentation.
Page 5Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
Functional HighlightsInitial Data Load
Supported entities:– Products– Price Lists– Bank Accounts– Business Partners– Open Payables
Data validation prior to import. Concise, easy-to-understand error log. Default value definition. REST Web service interface.
Simple and effective process
Define CSV ValidateConfiguredefault values
Import
– Open Receivables– Assets– Journal Entries– Standard Cost– On hand quantity / Stock
Page 6Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
Functional Highlights
Fill several Openbravo entities from one CSV file
Business partners
Initial Data Load
Business partners
Addresses
Contacts
Templates: Simplicity.Intermediary stepFix structure.
Page 7Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
DEMO
Initial Data Load Demo
Functional HighlightsInitial Data Load
Page 8Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
Future plans.Initial Data Load
More entities to import:Balance sheetPayrolls.
More integration capabilitiesImport from other data formats. (XML, Excel, ...)Import from other third party applications.
Improvements for consultants: Flexibility: ability to customize templates adding new fields.
Page 9Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
Agenda
Functionality and Demo
Process and Tools
Development Technique
Q & A
Page 10Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
Process and tools. Extract, Transform and Load.Initial Data Load
Extract Transform and Load (ETL) takes part part in:* Synchronization or replication of databases* Right-time or batch exchanges of data* Data warehousing* Data migration* Data quality
Extracting data from outside sources
Transforming it to fitoperational needs(which can includequality levels)
Loading it intothe end target (database or data warehouse)
Extract Transform and Load (ETL) is a process in database usage and especially in data warehousing that involves:
Page 11Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
Process and tools. Load process structureInitial Data Load
Talend job* CSV file parsing* Data validation
Openbravo load process& REST web service* Data transformation* Data load using DAL
Extracting Transforming Loading
Validate button
Process button
Page 12Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
Process and tools: Talend Open Studio overviewInitial Data Load
Graphical designer
Open source
Metadata-driven solution
Talend Open Studio is a project for data integration based on Eclipse RCP
Operates as a code generator
Large list of integration components
Page 13Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
DEMO
Process and tools: Talend Open Studio demonstration
Quick Talend Open Studio review.
Initial Data Load
Page 14Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
Functionality and Demo
Process and Tools
Development Technique
Q & A
Agenda
Page 15Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
Development technique. REST web services for Openbravo ERP.Initial Data Load
REST stands for Representational State Transfer. It relies on a stateless, client-server, cacheable communications protocoland in virtually all cases, the HTTP protocol is used.
Definition of a REST web service:* The base URI: for example http://example.com/resources* The MIME type of the data supported by the web service, XML, JSON, ...* The set of operations supported using HTTP methods. POST, GET, PUT, DELETE
Page 16Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
Development technique. REST web services for Openbravo ERP.Initial Data Load
POST /openbravo/ws/org.openbravo.idl.process/Costing HTTP/1.1Host: localhost
<?xml version="1.0" encoding="UTF-8"?><ob:Openbravo xmlns:ob="http://www.openbravo.com"> <Costing> <Product>rma</Product> <Cost>5.5</Cost>(...)
response
request
<?xml version="1.0" encoding="UTF-8"?><ob:Openbravo xmlns:ob="http://www.openbravo.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <MaterialMgmtCosting id="FF808181266B867701266B8E6AE4008B" identifier="Raw material A Thu Jan 01 00:00:00 CET 2009"> <id>FF808181266B867701266B8E6AE4008B</id> <creationDate transient="true">2010-01-26T17:54:40.616Z</creationDate>(...)
Page 17Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
Development technique. Code snipets, defining a new web serviceInitial Data Load
<?xml version="1.0" encoding="UTF-8" ?><provider> <bean> <name>process</name> <class>org.openbravo.idl.service.IdlWebService</class> <singleton>true</singleton> </bean></provider>
package org.openbravo.idl.service;
public class IdlWebService implements WebService {
@Override public void doPost(String path, HttpServletRequest request, HttpServletResponse response) throws Exception {
final String firstsegment = WebServiceUtil.getInstance().getFirstSegment(path); final VariablesSecureApp vars = new VariablesSecureApp(request); final ConnectionProvider conn = new DalConnectionProvider();
Page 18Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
Development technique. Reading XML from request.Initial Data Load
final SAXReader reader = new SAXReader();final Document document = reader.read(request.getInputStream());
// check that the rootelement is the openbravo onefinal Element rootElement = document.getRootElement();if (!rootElement.getName().equals(XMLConstants.OB_ROOT_ELEMENT)) { throw new OBException("Root tag of the xml document should be: " + XMLConstants.OB_ROOT_ELEMENT + ", but it is " + rootElement.getName());}
// check that there exit one element to import.if (rootElement.elements() == null || rootElement.elements().size() != 1) { throw new OBException("Root tag of the xml document should have one child element.");}
Element entityelement = (Element) rootElement.elements().get(0);
Page 19Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
Development technique. Writing XML to response.Initial Data Load
BaseOBObject obj = service.doInternalProcess(impent.getValues());
try { final StringWriter sw = new StringWriter(); final EntityXMLConverter exc = EntityXMLConverter.newInstance(); exc.setOptionEmbedChildren(true); exc.setOptionIncludeChildren(true); exc.setOptionIncludeReferenced(false); exc.setOptionExportClientOrganizationReferences(true); exc.setOutput(sw); exc.process(obj); String xml = sw.toString();
response.setContentType("text/xml"); response.setCharacterEncoding("UTF-8"); response.setHeader("Content-Encoding", "UTF-8"); final Writer w = response.getWriter(); w.write(xml); w.close();} catch (final Exception e) { throw new OBException(e);}
Page 20Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
DEMO
Development technique. REST Web Service demonstration
REST Web Service execution
Initial Data Load
Page 21Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
Functionality and Demo
Wrap-Up
Process and Tools
Development Technique
Page 22Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita
Q & A
Interesting Links: http://forge.openbravo.com/projects/xidl
http://forge.openbravo.com/projects/idlspanish
Next Webinar:18th February Modularity Status Update
Achievements in modularity during 2009 and roadmap -in regards of modularity- for 2010
Initial Data Load
Page 23Initial Data Load Module Webinar-Openbravo, Adrian Romero & Mikel Irurita