Title: Client name (Arial 26, bold) Main title page (Arial 24, bold) Subtitle (Arial 24, plain) Date (Arial 16, plain)
1Mass Invoicing ModuleExtension Module Webinar
15th of October 2009
2Agenda
Functionality and Demo 10 min. Process and
Tools 10 min. Development Technique 10
min. Q A 30 min.
3Agenda
Functionality and Demo Process and
Tools Development Technique Q A
4Massinvoicing Functional Highlights
Goal improve efficiency when creating sales
invoices for multiple business partners
Functional Concepts Invoice Template Mass
Invoicing Wizard
Solution Approach Deliver as a Module Use
Forge capabilities Use current OB technology
stack
5Massinvoicing Functional Highlights
DEMO
6Agenda
Functionality and Demo Process and
Tools Development Technique Q A
7Deliver as a Module benefits of Modularity
Configure a focused/lean system
Independent and shorter release cycles
Fine-grained dependency management
Improve functionality/code re-use
Facilitates contributions
Publish and promote new functionality
8Process and Tools Openbravo Forge
Start
Requirements Gathering/Wire Frame Forge Project
Creation
Functional Design
Functional Design Document Review Forge
Project Wiki
Development Delivery
Coding Delivery Forge Code Module Mercurial
Testing
Test Plan Forge Wiki Module
Maintenance
Coding Re-deliver Forge Forum Module
9Process and Tools Openbravo Forge
DEMO
10Agenda
Functionality and Demo Process and
Tools Development Technique Q A
11Development Approach
Application Dictionary
Mass Invoicing
XML Engine
DAL
Business Object Setter
12Development Approach
Application Dictionary
- Model Definition - Form Object Mapping
Mass Invoicing
XML Engine
DAL
Business Object Setter
13Development Approach
Application Dictionary
- Model Definition - Form Object Mapping
Mass Invoicing
XML Engine
DAL
- Entity Generation - Transaction Handling -
Ease-of-coding - Stored Proc. Calling
Business Object Setter
14Development Approach
Application Dictionary
- Model Definition - Form Object Mapping
- HTML-Logic Separation - Automatic
Translation/labels - Handle both single as
structures
Mass Invoicing
XML Engine
DAL
- Entity Generation - Transaction Handling -
Ease-of-coding - Stored Proc. Calling
Business Object Setter
15Development Approach
Application Dictionary
- Model Definition - Form Object Mapping
- HTML-Logic Separation - Automatic
Translation/labels - Handle both single as
structures
Mass Invoicing
XML Engine
DAL
- Entity Generation - Transaction Handling -
Ease-of-coding - Stored Proc. Calling
Business Object Setter
- One central setter per Entity - Sets all
default values of a BO - Handles already set
values
16Development Approach Runtime Class/Objects
Entities BusinessPartner Invoice
InvoiceLine InvoiceTemplate InvoiceTemplateLine Or
ganization PriceList
MassInvoicing
Invoice Property Setter
XML Engine
Post Invoices SP
17Development Approach code snippets, creating
Invoices
for (String bpId bpIds) // query for the
business partner final BusinessPartner bp
OBDal.getInstance().get(BusinessPartner.class,
bpId) // create a new Invoice Object final
Invoice invoice OBProvider.getInstance().get(Inv
oice.class) invoice.setOrganization(org) invo
ice.setBusinessPartner(bp) ........... invoice
.setFormOfPayment(invoiceTemplate.getFormOfPayment
()) invoice.setDocumentType(invoiceTemplate.getD
ocumentType()) // create the invoice lines
for (InvoiceTemplateLine invoiceTemplateLine
invoiceTemplate.getMINVInvoiceTemplateLineList())
// set invoice line properties
final String qtyStr vars.getNumericParameter("i
npQuantity_" postfix) final
BigDecimal qty new BigDecimal(qtyStr) final
InvoiceLine invoiceLine OBProvider.getInstance()
.get(InvoiceLine.class)
invoiceLine.setProduct(invoiceTemplateLine.getProd
uct()) invoiceLine.setInvoicedQuant
ity(qty) ............ // set remaining
invoice properties invoicePropertySetter.setInvoi
ceProperties(invoice, vars) // then save the
invoice OBDal.getInstance().save(invoice)
18Development Approach code snippets, creating
Invoices
for (String bpId bpIds) // query for the
business partner final BusinessPartner bp
OBDal.getInstance().get(BusinessPartner.class,
bpId) // create a new Invoice Object final
Invoice invoice OBProvider.getInstance().get(Inv
oice.class) invoice.setOrganization(org) invo
ice.setBusinessPartner(bp) ........... invoice
.setFormOfPayment(invoiceTemplate.getFormOfPayment
()) invoice.setDocumentType(invoiceTemplate.getD
ocumentType()) // create the invoice lines
for (InvoiceTemplateLine invoiceTemplateLine
invoiceTemplate.getMINVInvoiceTemplateLineList())
// set invoice line properties
final String qtyStr vars.getNumericParameter("i
npQuantity_" postfix) final
BigDecimal qty new BigDecimal(qtyStr) final
InvoiceLine invoiceLine OBProvider.getInstance()
.get(InvoiceLine.class)
invoiceLine.setProduct(invoiceTemplateLine.getProd
uct()) invoiceLine.setInvoicedQuant
ity(qty) ............ // set remaining
invoice properties invoicePropertySetter.setInvoi
ceProperties(invoice, vars) // then save the
invoice OBDal.getInstance().save(invoice)
19Development Approach code snippets, creating
Invoices
for (String bpId bpIds) // query for the
business partner final BusinessPartner bp
OBDal.getInstance().get(BusinessPartner.class,
bpId) // create a new Invoice Object final
Invoice invoice OBProvider.getInstance().get(Inv
oice.class) invoice.setOrganization(org) invo
ice.setBusinessPartner(bp) ........... invoice
.setFormOfPayment(invoiceTemplate.getFormOfPayment
()) invoice.setDocumentType(invoiceTemplate.getD
ocumentType()) // create the invoice lines
for (InvoiceTemplateLine invoiceTemplateLine
invoiceTemplate.getMINVInvoiceTemplateLineList())
// set invoice line properties
final String qtyStr vars.getNumericParameter("i
npQuantity_" postfix) final
BigDecimal qty new BigDecimal(qtyStr) final
InvoiceLine invoiceLine OBProvider.getInstance()
.get(InvoiceLine.class)
invoiceLine.setProduct(invoiceTemplateLine.getProd
uct()) invoiceLine.setInvoicedQuant
ity(qty) ............ // set remaining
invoice properties invoicePropertySetter.setInvoi
ceProperties(invoice, vars) // then save the
invoice OBDal.getInstance().save(invoice)
20Development Approach code snippets, creating
Invoices
for (String bpId bpIds) // query for the
business partner final BusinessPartner bp
OBDal.getInstance().get(BusinessPartner.class,
bpId) // create a new Invoice Object final
Invoice invoice OBProvider.getInstance().get(Inv
oice.class) invoice.setOrganization(org) invo
ice.setBusinessPartner(bp) ........... invoice
.setFormOfPayment(invoiceTemplate.getFormOfPayment
()) invoice.setDocumentType(invoiceTemplate.getD
ocumentType()) // create the invoice lines
for (InvoiceTemplateLine invoiceTemplateLine
invoiceTemplate.getMINVInvoiceTemplateLineList())
// set invoice line properties
final String qtyStr vars.getNumericParameter("i
npQuantity_" postfix) final
BigDecimal qty new BigDecimal(qtyStr) final
InvoiceLine invoiceLine OBProvider.getInstance()
.get(InvoiceLine.class)
invoiceLine.setProduct(invoiceTemplateLine.getProd
uct()) invoiceLine.setInvoicedQuant
ity(qty) ............ // set remaining
invoice properties invoicePropertySetter.setInvoi
ceProperties(invoice, vars) // then save the
invoice OBDal.getInstance().save(invoice)
21Development Approach code snippets, creating
Invoices
for (String bpId bpIds) // query for the
business partner final BusinessPartner bp
OBDal.getInstance().get(BusinessPartner.class,
bpId) // create a new Invoice Object final
Invoice invoice OBProvider.getInstance().get(Inv
oice.class) invoice.setOrganization(org) invo
ice.setBusinessPartner(bp) ........... invoice
.setFormOfPayment(invoiceTemplate.getFormOfPayment
()) invoice.setDocumentType(invoiceTemplate.getD
ocumentType()) // create the invoice lines
for (InvoiceTemplateLine invoiceTemplateLine
invoiceTemplate.getMINVInvoiceTemplateLineList())
// set invoice line properties
final String qtyStr vars.getNumericParameter("i
npQuantity_" postfix) final
BigDecimal qty new BigDecimal(qtyStr) final
InvoiceLine invoiceLine OBProvider.getInstance()
.get(InvoiceLine.class)
invoiceLine.setProduct(invoiceTemplateLine.getProd
uct()) invoiceLine.setInvoicedQuant
ity(qty) ............ // set remaining
invoice properties invoicePropertySetter.setInvoi
ceProperties(invoice, vars) // then save the
invoice OBDal.getInstance().save(invoice)
22Development Approach code snippets, creating
Invoices
for (String bpId bpIds) // query for the
business partner final BusinessPartner bp
OBDal.getInstance().get(BusinessPartner.class,
bpId) // create a new Invoice Object final
Invoice invoice OBProvider.getInstance().get(Inv
oice.class) invoice.setOrganization(org) invo
ice.setBusinessPartner(bp) ........... invoice
.setFormOfPayment(invoiceTemplate.getFormOfPayment
()) invoice.setDocumentType(invoiceTemplate.getD
ocumentType()) // create the invoice lines
for (InvoiceTemplateLine invoiceTemplateLine
invoiceTemplate.getMINVInvoiceTemplateLineList())
// set invoice line properties
final String qtyStr vars.getNumericParameter("i
npQuantity_" postfix) final
BigDecimal qty new BigDecimal(qtyStr) final
InvoiceLine invoiceLine OBProvider.getInstance()
.get(InvoiceLine.class)
invoiceLine.setProduct(invoiceTemplateLine.getProd
uct()) invoiceLine.setInvoicedQuant
ity(qty) ............ // set remaining
invoice properties invoicePropertySetter.setInvoi
ceProperties(invoice, vars) // then save the
invoice OBDal.getInstance().save(invoice)
23Development Approach code snippets, creating
Invoices
for (String bpId bpIds) // query for the
business partner final BusinessPartner bp
OBDal.getInstance().get(BusinessPartner.class,
bpId) // create a new Invoice Object final
Invoice invoice OBProvider.getInstance().get(Inv
oice.class) invoice.setOrganization(org) invo
ice.setBusinessPartner(bp) ........... invoice
.setFormOfPayment(invoiceTemplate.getFormOfPayment
()) invoice.setDocumentType(invoiceTemplate.getD
ocumentType()) // create the invoice lines
for (InvoiceTemplateLine invoiceTemplateLine
invoiceTemplate.getMINVInvoiceTemplateLineList())
// set invoice line properties
final String qtyStr vars.getNumericParameter("i
npQuantity_" postfix) final
BigDecimal qty new BigDecimal(qtyStr) final
InvoiceLine invoiceLine OBProvider.getInstance()
.get(InvoiceLine.class)
invoiceLine.setProduct(invoiceTemplateLine.getProd
uct()) invoiceLine.setInvoicedQuant
ity(qty) ............ // set remaining
invoice properties invoicePropertySetter.setInvoi
ceProperties(invoice, vars) // then save the
invoice OBDal.getInstance().save(invoice)
24Development Approach code snippets, posting
invoices
final CallProcess caller OBProvider.getInstance
().get(CallProcess.class) final
org.openbravo.model.ad.ui.Process process
OBDal.getInstance().get(org.openbravo.model.ad
.ui.Process.class, "111") for (Invoice invoice
invoices) final ProcessInstance
processInstance caller.call(process,
invoice.getId(), null) if
(processInstance.getErrorMsg() ! null
processInstance.getErrorMsg().trim().length
() gt 0) // handle process instance....
25Development Approach code snippets, posting
invoices
final CallProcess caller OBProvider.getInstance
().get(CallProcess.class) final
org.openbravo.model.ad.ui.Process process
OBDal.getInstance().get(org.openbravo.model.ad
.ui.Process.class, "111") for (Invoice invoice
invoices) final ProcessInstance
processInstance caller.call(process,
invoice.getId(), null) if
(processInstance.getErrorMsg() ! null
processInstance.getErrorMsg().trim().length
() gt 0) // handle process instance....
26Development Approach code snippets, posting
invoices
final CallProcess caller OBProvider.getInstance
().get(CallProcess.class) final
org.openbravo.model.ad.ui.Process process
OBDal.getInstance().get(org.openbravo.model.ad
.ui.Process.class, "111") for (Invoice invoice
invoices) final ProcessInstance
processInstance caller.call(process,
invoice.getId(), null) if
(processInstance.getErrorMsg() ! null
processInstance.getErrorMsg().trim().length
() gt 0) // handle process instance....
27Wrap-Up
Functionality and Demo
Process and Tools
Development Technique
28Q A http//forge.openbravo.com http//wiki.op
enbravo.com/wiki/ERP/2.50/Developers_Guide martin
.taal_at_openbravo.com Next webinar Intercompany
Documents October 29th 4-5 PM (CET)
29(No Transcript)