OpenERP and Perl
-
Upload
opusvl -
Category
Technology
-
view
1.113 -
download
2
description
Transcript of OpenERP and Perl
OpenERP and Perl Jon Allen (JJ) – [email protected]
www.opusvl.com!
OpenERP
www.opusvl.com!
enterprise"resource"planning
www.opusvl.com!
?
www.opusvl.com!
core business"applications
www.opusvl.com!
sales crm"manufacturing"
purchasing
www.opusvl.com!
accounting
www.opusvl.com!
integrated accounting
www.opusvl.com!
www.opusvl.com!
Perl?
www.opusvl.com!
OpenERP
website
intranet
www.opusvl.com!
api
www.opusvl.com!
XML-RPC
www.opusvl.com!
single"requests
www.opusvl.com!
stateless
www.opusvl.com!
object"model
www.opusvl.com!
relationships
www.opusvl.com!
one2manyres.partner
res.partner.address
res.companymany2one
www.opusvl.com!
database
www.opusvl.com!
ORM
www.opusvl.com!
object"relational"mapper
www.opusvl.com!
OOM
www.opusvl.com!
object to"object"
mapper
www.opusvl.com!
OpenERP::OOM
www.opusvl.com!
Moose
www.opusvl.com!
object model
www.opusvl.com!
OpenERP
Schema
Class Class Class
Object Object
www.opusvl.com!
# Code layout for module using OpenERP::OOM
lib/ MyApp.pm # Schema definition MyApp/ Class/ # Class definitions Company.pm Partner.pm Object/ # Object definitions Company.pm Partner.pm
www.opusvl.com!
schema
www.opusvl.com!
# MyApp.pm
package MyApp;
use Moose;extends 'OpenERP::OOM::Schema';
1;
www.opusvl.com!
connection
www.opusvl.com!
use MyApp;
my $schema = MyApp->new( openerp_connect => { host => 'localhost', dbname => 'jj_test_1', username => 'admin', password => 'admin', },);
www.opusvl.com!
classes
www.opusvl.com!
# MyApp/Class/Company.pm
package MyApp::Class::Company;use OpenERP::OOM::Class;
object_type 'MyApp::Object::Company';
# Class methods go here
1;
www.opusvl.com!
objects
www.opusvl.com!
fields
www.opusvl.com!
relationships
www.opusvl.com!
partner"has many"addresses
www.opusvl.com!
package MyApp::Object::Partner;use OpenERP::OOM::Object;
openerp_model 'res.partner';has 'name' => (isa=>'Str', is=>'rw');
relationship 'addresses' => ( key => 'address', # OpenERP field type => 'one2many', # OpenERP type class => 'PartnerAddress',);
www.opusvl.com!
object "creation
www.opusvl.com!
# Schema -> Class -> Class Method
my $partner = $schema->class('Partner')-> create({ name => 'JJ' });
# Updates
$partner->update({name => 'Jon Allen'});say $partner->name;
www.opusvl.com!
search
www.opusvl.com!
# Single result
my $jj = $schema->class('Partner')-> find(['name' => '=' => 'JJ']);
# Multiple results
my @partners = $schema->class('Partner')-> search(['name' => 'like' => 'J']);
www.opusvl.com!
related"objects
www.opusvl.com!
$partner->create_related( 'addresses', { name => '...', street => '...', city => '...', });
www.opusvl.com!
add"methods
www.opusvl.com!
extend OpenERP
objects
www.opusvl.com!
external"data sources
www.opusvl.com!
DBIx::Class
www.opusvl.com!
not just"data
www.opusvl.com!
OpenERP"methods
www.opusvl.com!
workflows
www.opusvl.com!
integrated"accounting
www.opusvl.com!
my $po = $schema->class('PurchaseOrder')-> search([ ... ]);
$po->update({ ... });
# Approve purchase order$po->execute_workflow('purchase_confirm');
# Print (returns PDF)$po->get_report('purchase.order');
www.opusvl.com!
application logic = Perl
www.opusvl.com!
application"data = DBIC
www.opusvl.com!
generic logic "= OpenERP
www.opusvl.com!
generic data "= OpenERP
www.opusvl.com!
many uses
www.opusvl.com!
Catalyst model
www.opusvl.com!
18 months"development
www.opusvl.com!
3 commercial"deployments
www.opusvl.com!
open sourced"today
www.opusvl.com!
http://search.cpan.org/dist/OpenERP-OOM
www.opusvl.com!
questions?
www.opusvl.com!