SlideShare una empresa de Scribd logo
1 de 57
Descargar para leer sin conexión
OpenERP            6.1
 Technical Changes at
 API/Framework level




                  @odony – 6.1 Framework Changes – 05.2012
OpenERP 6.1

  ●   Released February 2011
  ●   Normal release – non LTS = limited support
  ●   Release Notes
      ●   http://bit.ly/openerp61RN
  ●   Focus
      ●   Usability
      ●   Social features
      ●   New web client
      ●   Cleanup




                                      @odony – 6.1 Framework Changes – 05.2012
Agenda                                                                
  ●
      Framework & API
      ●
          Architecture changes
      ●
          API evolution
      ●
          New views and UI features
      ●
          Other important bits
      ●
          Exercises, Q&A




                                      @odony – 6.1 Framework Changes – 05.2012
Evolution: Architecture changes

  ●   Unified server-side deployment
  ●   Scalability through multi-processing
      ●   Use all those cores on modern hardware
      ●   Bypass Python GIL issues
      ●   Reliability (cpu/memory/crashes)
  ●   WSGI
      ●   Standard Python solution – OpenERP 6.1 is compliant
      ●   Gunicorn - a WSGI compliant HTTP server
  ●   Statelessness
  ●   Distributed scheduled tasks (cron)



                                                   @odony – 6.1 Framework Changes – 05.2012
Unified server-side deployment

   ●
       No more need to deploy web client
   ●
       Web client is now an OpenERP module
   ●
       Only one package to install
   ●
       Pre-loaded server-wide via –-load=web
   ●
       All modules in same place (addons_path)
   ●
       openerp-web still available stand-alone
       ●
           For testing/debugging purposes
       ●
           Needs to have copy of normal modules too!




                                            @odony – 6.1 Framework Changes – 05.2012
Scalability through multi-processing

   ●
       Use all those cores on modern hardware
   ●
       Bypass Python GIL limitations
   ●
       Improve reliability (cpu/memory/crashes)




       → What does this all mean??




                                 @odony – 6.1 Framework Changes – 05.2012
Multi-processing and GIL (1)

   ●
       CPython has a Global Interpreter Lock/GIL
   ●
       Simplifies low-level memory management,
       C calls, etc.
   ●
       1 Python thread = 1 OS thread
   ●
       Parallel execution of threads forbidden
   ●
       Cooperative multi-tasking on 1 CPU
   ●
       Worse performance on multi-CPU/core!
       ●
           Battle for GIL on the different virtual CPUs!




                                                @odony – 6.1 Framework Changes – 05.2012
Multi-processing and GIL (2)

   ●
       Cooperative multi-tasking
   ●
       Release on I/O or every 100 ticks
   ●
       1 tick ≈ 1 interpreter instruction




                                   @odony – 6.1 Framework Changes – 05.2012
Scalability through multi-processing

  ●
      multiprocessing module was an option
  ●
      Using Unix tools and real processes was
      more flexible and easier to scale up
  ●
      Managing the processes was not
      necessary, many tools exist to do that
      (e.g. Gunicorn)
  ●
      Just had to make OpenERP WSGI-compliant




                                @odony – 6.1 Framework Changes – 05.2012
WSGI (1)

   ●
       Web Server Gateway Interface for Python
   ●
       WSGI applications can be embedded in
       WSGI-compliant web servers
   ●
       Many web frameworks support WSGI
       ●
           Django, CherryPy, …
   ●
       Many HTTP servers support WSGI
       ●
           Apache(+mod), nginx(+mod), tornado, gunicorn, …




                                          @odony – 6.1 Framework Changes – 05.2012
WSGI (2)

  ●   Very simple API: one method




  ●   environ = HTTP environment map
      ●   HTTP_HOST, REQUEST_METHOD, etc.
  ●   start_response = callback(status,headers)
  ●   Returns response as unicode string
  ●   OpenERP's entry point: wsgi.core.application


                                            @odony – 6.1 Framework Changes – 05.2012
Gunicorn (1)

   ●
       WGSI compliant HTTP Server
   ●
       Python port of Ruby Unicorn
   ●
       Pre-fork multi-process model
   ●
       Flexible and easily configurable
   ●
       UNIX only (fork support needed)
   ●
       See also gunicorn.org




                                  @odony – 6.1 Framework Changes – 05.2012
Gunicorn (2)

   ●
       Master “Arbiter” process
       ●
           Starts and monitors workers (crash/timeout/...)
       ●
           Restarts killed workers → fork
       ●
           Increment/Decrement worker count (TTIN/TTOU signals)
       ●
           Doesn't speak HTTP → naive dispatch
   ●
       Forked worker processes
       ●
           Speak HTTP → Perform WSGI translation
       ●
           Dispatch to application entry point
       ●
           Can restart after given number of requests




                                                 @odony – 6.1 Framework Changes – 05.2012
Gunicorn (3)

   ●
       OpenERP can't use normal config file or
       command-line options
   ●
       Config has to be provided via Gunicorn
   ●
       gunicorn.conf, written in Python!
       ●
           Contains Gunicorn configuration (workers, limits, etc.)
       ●
           Contains OpenERP configuration
       ●
           Sets up requests/application hooks (pre/post request...)
   ●
       Arbiter controls max-requests limit
   ●
       Workers control memory/cpu limits


                                                @odony – 6.1 Framework Changes – 05.2012
Gunicorn (4)




CONF




RUN    $ gunicorn openerp:wsgi.core.application -c gunicorn.conf.py



                                                @odony – 6.1 Framework Changes – 05.2012
Good to know (1)

  ●   Gunicorn → must be used explicitly
      ●   Linear speed-up for CPU-bound tasks, less for I/O or DB

  ●   Werkzeug → built-in WSGI-compliant server
      ●   openerp-server script
      ●   multi-threaded mono-process

  ●   Proxy mode specific handling (X-Forwarded..)
      ●   When deploying behind reverse proxy (e.g. with ProxyPass)
      ●   Gunicorn: wsgi.proxied.application entry point instead
      ●   Werkzeug: --proxy_mode




                                                        @odony – 6.1 Framework Changes – 05.2012
Good to know (2)

  ●
      No cron job with Gunicorn
      ●
          Could be killed at any point!
  ●
      Start separate openerp-cron-worker job
      ●
          Anywhere!



      More about cron jobs in a minute...




                                          @odony – 6.1 Framework Changes – 05.2012
OpenERP 6.0 deployment model




 Requests    OpenERP      OpenERP
                                                 PostgreSQL
             Web Client    Server




                            @odony – 6.1 Framework Changes – 05.2012
OpenERP 6.1 deployment model (1)




                OpenERP Worker
   Requests     OpenERP Worker                 PostgreSQL
                OpenERP Worker
                OpenERP Worker




                                 @odony – 6.1 Framework Changes – 05.2012
OpenERP 6.1 deployment model (2)



                      OpenERP Worker
                      OpenERP Worker
                      OpenERP Worker
                      OpenERP Worker
Requests     Load
           Balancer
                                                     PostgreSQL


                      OpenERP Worker
                      OpenERP Worker
                      OpenERP Worker
                      OpenERP Worker



                               @odony – 6.1 Framework Changes – 05.2012
Statelessness (1)

   ●
       OpenERP 6.0 was still partially stateful:

       1) Model registry (pool)
       2) Wizards (osv_memory) kept in-memory
       3) Application caches – menus, perms, … !
       4) Background task processing: cron


   ●
       Not suitable for multi-processing


                                   @odony – 6.1 Framework Changes – 05.2012
Caches and Model Registries

   ●
       Caches and Registries have state
   ●
       Must be cleared on all workers when
       invalidated – across multiple machines!
   ●
       Signaling works with 2 DB sequences
       ●   base_registry_signaling
       ●   base_cache_signaling
   ●
       Before each request, both are checked
   ●
       After each request, increment if changed



                                     @odony – 6.1 Framework Changes – 05.2012
TransientModel

  ●
      osv_memory → TransientModel
      ●
          Real database-backed model
      ●
          Automatically vacuum-cleaned
      ●
          Based on size limit or time limit
      ●
          Default: 2 hours
  ●
      Has special and implicit access rights
      ●
          Everyone can perform CRUD
      ●
          But only access on your own records
  ●
      Can be used indifferently by multiple workers




                                                @odony – 6.1 Framework Changes – 05.2012
Background Tasks (cron) (1)

  ●   Problem:
      ●   Each worker possibly runs a cron processor
      ●   Must prevent duplicate run of same task
      ●   Must benefit from multi-processing when multiple cron processors
          are running (each runs different tasks)
  ●   Solution:
      ●   Database row-level mutex using LOCK
      ●   Cron processor can be run on any number of servers
      ●   Disabled on Gunicorn workers by default
      ●   Can be run separately with openerp-cron-worker script added in 6.1
      ●   Cron tasks can't be changed while running (locked)




                                                    @odony – 6.1 Framework Changes – 05.2012
Background Tasks (cron) (2)

   ●
       And by the way, cron tasks are executed
       in parallel in OpenERP 6.1
   ●
       Also if running mono-process, up to
       number or thread specified with
         –-max-cron-threads   (default: 4)
   ●
       Allows multiple tasks to be executed at
       the same time




                                       @odony – 6.1 Framework Changes – 05.2012
Agenda                                                                
  ●
      Framework & API
      ●
          Architecture changes
      ●
          API evolution
      ●
          New views and UI features
      ●
          Other important bits
      ●
          Exercises, Q&A




                                      @odony – 6.1 Framework Changes – 05.2012
Date Storage and Computation (1)

  ●   6.0 stored timestamps in “server timezone”
      ●   Worked well for small teams with only one TZ
      ●   Database not portable, Reports incorrect for cross-TZ teams, DST issues!

  ●   6.1 stores timestamps as UTC always!
  ●   Big change, but Right Thing to Do™
      ●   Database becomes portable
      ●   Dates monotonically incremented in DB
      ●   Simplifies conversion for display UTC ↔ Client TZ
      ●   Timestamps computation works as before on server-side

  ●   Watch out!
      ●   “Dates” have no TZ
      ●   Server-side dates must be initialized in client TZ




                                                               @odony – 6.1 Framework Changes – 05.2012
Date Storage and Computation (2)

   ●
       Server-side
       ●
           All computation in UTC
       ●
           PDF reports use client TZ from context/user
   ●
       Database
       ●
           All timestamps stored as TIMESTAMP WITHOUT TZ
       ●
           SELECT now() at time zone ‘UTC’ (should not need it)
   ●
       Client
       ●
           Converted back and forth between UTC and client TZ
       ●
           Web uses browser TZ for display (JS limitation)




                                              @odony – 6.1 Framework Changes – 05.2012
Date Storage and Computation (3)




                             @odony – 6.1 Framework Changes – 05.2012
Date Storage and Computation (4)

   ●
       Be very careful with date (that)!
   ●
       Pure dates should be taken in user TZ
   ●
       It's very tempting to use
       datetime.date.today()
   ●
       But may be wrong for half of the planet!
   ●
       Use fields.date.context_today() instead




                                   @odony – 6.1 Framework Changes – 05.2012
Unified Mail Subsystem

   ●
       6.0 had 3+ independent mail stacks
   ●
       6.1 has one unified mail stack (mail)
       ●
           Per-database SMTP settings (SSL, Priority, Debug)
       ●
           Single point of extension               ir.mail_server
       ●
           Single mail queue/archive
       ●
           Common features                  mail.thread         mail.message
            ●
                Scheduler
                                             scheduler           composition
            ●
                Template (email_template)
            ●
                Composition wizard
                                                   email_template




                                             @odony – 6.1 Framework Changes – 05.2012
Many2Many auto-naming and inheritance

  ●
      What happens when you _inherit a model
      containing m2m field, w/ different _name?
  ●
      Problem more apparent with abstract
      osv_memory models
  ●
      In 6.1 many2many have auto names
      ●
          rel_table, rel_from, rel_to are automatically computed
      ●
          Simpler/Partial declaration, clean inherit
      ●
          rel_table override needed for multiple relationships




                                              @odony – 6.1 Framework Changes – 05.2012
YAML improvements (1)

  ●   6.1 YAML tests:
      ●   65% coverage, 150 scenarios, 1800 test steps
  ●   Simulating workflows works well
  ●   But what about UI: views, on_change, … ?


  ●   Done! YAML will now automatically use form
      views and on_change methods
      ●   Better coverage
      ●   Less code: on_change can fill in implicit values
      ●   Can be overridden with view attribute




                                                      @odony – 6.1 Framework Changes – 05.2012
YAML improvements (2)




                        @odony – 6.1 Framework Changes – 05.2012
Simplified Configuration (1)

   ●
       Setup process streamlined – 1-click install
       ●
           Kanban module view – ordered by sequence
   ●
       Configuration Overview Dashboard
       ●
           Based on ir.action.todo and ir.actions.todo.category
   ●
       New ir.actions.todo
       ●
           Reminder: group_ids, action_id, and note
       ●
           States: Todo or Done
       ●
           Types: Manual, Manual Once, Automatic
       ●
           Most are Manual or Manual Once now
       ●
           New category_id for Configuration Overview




                                                @odony – 6.1 Framework Changes – 05.2012
Simplified Configuration (2)




                               @odony – 6.1 Framework Changes – 05.2012
Logging

  ●
      Python has a decent logging system
  ●
      netsvc.notifyChannel() deprecated in 6.0
  ●
      Convenience hierarchical loggers
  ●
      One _logger per file recommended
          _logger = logging.getLogger(__name__)
  ●
      New –-log-handler config parameter
      ●   --log-handler=PREFIX:LEVEL
      ●   --log-handler=openerp.netsvc.rpc.request:DEBUG
      ●   --log-handler=werkzeug:CRITICAL




                                           @odony – 6.1 Framework Changes – 05.2012
Agenda                                                                
  ●
      Framework & API
      ●
          Architecture changes
      ●
          API evolution
      ●
          New views and UI features
      ●
          Other important bits
      ●
          Exercises, Q&A




                                      @odony – 6.1 Framework Changes – 05.2012
Kanban (1)

  ●
      Kanban   ( カンバン ):   Japanese billboard
  ●
      Toyota's Lean/JIT production: “pull” or
      “demand-driven” SCM
  ●
      Kanban cards signal need to produce




                                   @odony – 6.1 Framework Changes – 05.2012
Kanban (2)

  ●
      Kanban method, applied to Management
      ●
          Signboard shows whole workflow at a glance
      ●
          Limit WIP (work-in-progress) for each state (Pull!)
      ●
          Monitor flow




                                              @odony – 6.1 Framework Changes – 05.2012
Kanban (3)

  ●
      kanban views are written in Qweb
  ●
      Automatic column layout with Group By
  ●
      Drag & Drop reassigns grouped column
  ●
      One mandatory template “kanban-box”
  ●
      Can use normal OpenERP fields
  ●
      Any CSS/HTML you like




                                @odony – 6.1 Framework Changes – 05.2012
Kanban (4)

  ●
      Typical structure




                          @odony – 6.1 Framework Changes – 05.2012
Kanban (5)

  ●
      Drag&Drop is nice, but group_by only
      shows existing data
  ●
      How about missing columns?
  ●
      Solution: add a _group_by_full map
  ●
      Return type must be like read(),
      depending on the column type




                                @odony – 6.1 Framework Changes – 05.2012
Kanban (6)

  ●
      group_by_full, complex example




                              @odony – 6.1 Framework Changes – 05.2012
Kanban (7)

    Exercise: add test kanban view for res.partner




                                   @odony – 6.1 Framework Changes – 05.2012
Kanban (8)

  ●
      More details about Kanban API:
      http://pad.openerp.com/kanban-api
      (temporary location)




                               @odony – 6.1 Framework Changes – 05.2012
Customizable dashboards

  ●
      Dashboards now feature multiple layouts
  ●
      Saved in ir.ui.view_custom, per user
  ●
      Filters menu now has “Add to dashboard”
  ●
      Works with kanban views too




                                @odony – 6.1 Framework Changes – 05.2012
New many2one widget

  ●
      Many2One fields = eternal UI problem
  ●
      6.1 widget:
      ●
          Auto-complete selection as you type
      ●
          Intuitive quick creation
      ●
          New ORM method: name_create(cr, uid, name, context)
      ●
          If fails, default to normal form creation
      ●
          Disabled with options='{"quick_create": false}'




                                              @odony – 6.1 Framework Changes – 05.2012
New statusbar widget

  ●
      Old state selection was not user-friendly
  ●
      statusbar widget shows workflow steps



  ●
      Only for selection fields
  ●
      Options: list of visible values, colors




                                  @odony – 6.1 Framework Changes – 05.2012
Agenda                                                                
  ●
      Framework & API
      ●
          Architecture changes
      ●
          API evolution
      ●
          New views and UI features
      ●
          Other important bits
      ●
          Exercises, Q&A




                                      @odony – 6.1 Framework Changes – 05.2012
Module Manifest changes

  ●   Web-related keys: js, css, qweb
  ●   active → auto_install (backwards-compat): 'depends' triggers!
  ●   complexity (easy|normal|expert)
  ●   application (bool): Application or Extra
  ●   sequence (integer): Application install screen order
  ●   New category: 'Hidden' – Technical, hidden by default
  ●   Module icon for install screen
          /static/src/img/icon.png

  ●   OpenERP Apps
      ●   Description in RST, one main section
      ●   'images': ['/path/to/screenshot.png', '/path/to/screenshot2.png']




                                                             @odony – 6.1 Framework Changes – 05.2012
EDI Subsystem (1)

   ●
       Goal: bring companies up to par with
       people and social network tools
   ●
       EDI module installed with Sales, Account
   ●
       EDI Setup
       ●
           Company Addres & Logo
       ●
           Outgoing Email Server (SMTP)
       ●
           User emails
       ●
           Customers/Contacts emails




                                          @odony – 6.1 Framework Changes – 05.2012
EDI Subsystem (2)




                    @odony – 6.1 Framework Changes – 05.2012
EDI Subsystem (3)

   ●
       Fine-tuning
       ●
           Payment options
            ●
                Paypal account on company
            ●
                Bank accounts on company
       ●
           Email templates
       ●
           EDI Preview templates: Qweb
       ●
           Opt-out
            ●
                Per-customer
            ●
                Global – workflow level
            ●
                Global – template




                                            @odony – 6.1 Framework Changes – 05.2012
EDI Subsystem (4)

  ●   EDI Document is simple JSON




  ●   EDI engine is generic



                                    @odony – 6.1 Framework Changes – 05.2012
Agenda                                                                
  ●
      Framework & API
      ●
          Architecture changes
      ●
          API evolution
      ●
          New views and UI features
      ●
          Other important bits
      ●
          Exercises, Q&A




                                      @odony – 6.1 Framework Changes – 05.2012
Exercises

   ●
       Gunicorn:
       ●
           Install Gunicorn and start OpenERP w/ it
   ●
       Kanban
       ●
           Add a kanban view to the model of your choice
       ●
           Set a default group_by on the menu action
       ●
           Implement a working _group_by_full
       ●
           Add the Kanban view to a dashboard
   ●
       EDI
       ●
           Modify an EDI Preview template to show Quotations




                                             @odony – 6.1 Framework Changes – 05.2012

Más contenido relacionado

Destacado

Improving the performance of Odoo deployments
Improving the performance of Odoo deploymentsImproving the performance of Odoo deployments
Improving the performance of Odoo deploymentsOdoo
 
SeaJUG May 2012 mybatis
SeaJUG May 2012 mybatisSeaJUG May 2012 mybatis
SeaJUG May 2012 mybatisWill Iverson
 
How to Choose an API Automation Tool for a Distributed Cloud-based App: To...
How to Choose an API Automation Tool for a Distributed Cloud-based App: To...How to Choose an API Automation Tool for a Distributed Cloud-based App: To...
How to Choose an API Automation Tool for a Distributed Cloud-based App: To...Altoros
 
Secure RESTful API Automation With JavaScript
Secure RESTful API Automation With JavaScriptSecure RESTful API Automation With JavaScript
Secure RESTful API Automation With JavaScriptJonathan LeBlanc
 
Design Summit - RESTful API Overview - John Hardy
Design Summit - RESTful API Overview - John HardyDesign Summit - RESTful API Overview - John Hardy
Design Summit - RESTful API Overview - John HardyManageIQ
 
Làm quen lập trình OpenERP qua module sale
Làm quen lập trình OpenERP qua module saleLàm quen lập trình OpenERP qua module sale
Làm quen lập trình OpenERP qua module saleOpenerp VN
 
Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, ...
Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, ...Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, ...
Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, ...Vladimir Bacvanski, PhD
 
Светлана Исакова «Язык Kotlin»
Светлана Исакова «Язык Kotlin»Светлана Исакова «Язык Kotlin»
Светлана Исакова «Язык Kotlin»e-Legion
 
MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제정완 전
 
RESTful API Automation with JavaScript
RESTful API Automation with JavaScriptRESTful API Automation with JavaScript
RESTful API Automation with JavaScriptJonathan LeBlanc
 
SpringBoot with MyBatis, Flyway, QueryDSL
SpringBoot with MyBatis, Flyway, QueryDSLSpringBoot with MyBatis, Flyway, QueryDSL
SpringBoot with MyBatis, Flyway, QueryDSLSunghyouk Bae
 
Kotlin in action
Kotlin in actionKotlin in action
Kotlin in actionCiro Rizzo
 
A brief introduction to Realm with Kotlin
A brief introduction to Realm with KotlinA brief introduction to Realm with Kotlin
A brief introduction to Realm with KotlinLeonardo YongUk Kim
 
Frisby: Rest API Automation Framework
Frisby: Rest API Automation FrameworkFrisby: Rest API Automation Framework
Frisby: Rest API Automation FrameworkQuovantis
 
Web API Test Automation using Frisby & Node.js
Web API Test Automation using Frisby  & Node.jsWeb API Test Automation using Frisby  & Node.js
Web API Test Automation using Frisby & Node.jsChi Lang Le Vu Tran
 
API Management Platform Technical Evaluation Framework
API Management Platform Technical Evaluation FrameworkAPI Management Platform Technical Evaluation Framework
API Management Platform Technical Evaluation FrameworkWSO2
 
Best practices on how to import data into OpenERP. Cyril Morisse, Audaxis
Best practices on how to import data into OpenERP. Cyril Morisse, AudaxisBest practices on how to import data into OpenERP. Cyril Morisse, Audaxis
Best practices on how to import data into OpenERP. Cyril Morisse, AudaxisOdoo
 
How to Design a Successful Test Automation Strategy
How to Design a Successful Test Automation Strategy How to Design a Successful Test Automation Strategy
How to Design a Successful Test Automation Strategy Impetus Technologies
 

Destacado (20)

Improving the performance of Odoo deployments
Improving the performance of Odoo deploymentsImproving the performance of Odoo deployments
Improving the performance of Odoo deployments
 
SeaJUG May 2012 mybatis
SeaJUG May 2012 mybatisSeaJUG May 2012 mybatis
SeaJUG May 2012 mybatis
 
How to Choose an API Automation Tool for a Distributed Cloud-based App: To...
How to Choose an API Automation Tool for a Distributed Cloud-based App: To...How to Choose an API Automation Tool for a Distributed Cloud-based App: To...
How to Choose an API Automation Tool for a Distributed Cloud-based App: To...
 
Secure RESTful API Automation With JavaScript
Secure RESTful API Automation With JavaScriptSecure RESTful API Automation With JavaScript
Secure RESTful API Automation With JavaScript
 
Design Summit - RESTful API Overview - John Hardy
Design Summit - RESTful API Overview - John HardyDesign Summit - RESTful API Overview - John Hardy
Design Summit - RESTful API Overview - John Hardy
 
Làm quen lập trình OpenERP qua module sale
Làm quen lập trình OpenERP qua module saleLàm quen lập trình OpenERP qua module sale
Làm quen lập trình OpenERP qua module sale
 
Odoo
OdooOdoo
Odoo
 
Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, ...
Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, ...Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, ...
Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, ...
 
Светлана Исакова «Язык Kotlin»
Светлана Исакова «Язык Kotlin»Светлана Исакова «Язык Kotlin»
Светлана Исакова «Язык Kotlin»
 
MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제
 
RESTful API Automation with JavaScript
RESTful API Automation with JavaScriptRESTful API Automation with JavaScript
RESTful API Automation with JavaScript
 
SpringBoot with MyBatis, Flyway, QueryDSL
SpringBoot with MyBatis, Flyway, QueryDSLSpringBoot with MyBatis, Flyway, QueryDSL
SpringBoot with MyBatis, Flyway, QueryDSL
 
MyBatis
MyBatisMyBatis
MyBatis
 
Kotlin in action
Kotlin in actionKotlin in action
Kotlin in action
 
A brief introduction to Realm with Kotlin
A brief introduction to Realm with KotlinA brief introduction to Realm with Kotlin
A brief introduction to Realm with Kotlin
 
Frisby: Rest API Automation Framework
Frisby: Rest API Automation FrameworkFrisby: Rest API Automation Framework
Frisby: Rest API Automation Framework
 
Web API Test Automation using Frisby & Node.js
Web API Test Automation using Frisby  & Node.jsWeb API Test Automation using Frisby  & Node.js
Web API Test Automation using Frisby & Node.js
 
API Management Platform Technical Evaluation Framework
API Management Platform Technical Evaluation FrameworkAPI Management Platform Technical Evaluation Framework
API Management Platform Technical Evaluation Framework
 
Best practices on how to import data into OpenERP. Cyril Morisse, Audaxis
Best practices on how to import data into OpenERP. Cyril Morisse, AudaxisBest practices on how to import data into OpenERP. Cyril Morisse, Audaxis
Best practices on how to import data into OpenERP. Cyril Morisse, Audaxis
 
How to Design a Successful Test Automation Strategy
How to Design a Successful Test Automation Strategy How to Design a Successful Test Automation Strategy
How to Design a Successful Test Automation Strategy
 

Similar a OpenERP 6.1 Framework Changes

OpenDaylight Integration with OpenStack Neutron: A Tutorial
OpenDaylight Integration with OpenStack Neutron: A TutorialOpenDaylight Integration with OpenStack Neutron: A Tutorial
OpenDaylight Integration with OpenStack Neutron: A Tutorialmestery
 
LCU14 310- Cisco ODP v2
LCU14 310- Cisco ODP v2LCU14 310- Cisco ODP v2
LCU14 310- Cisco ODP v2Linaro
 
LCA14: LCA14-209: ODP Project Update
LCA14: LCA14-209: ODP Project UpdateLCA14: LCA14-209: ODP Project Update
LCA14: LCA14-209: ODP Project UpdateLinaro
 
node.js 실무 - node js in practice by Jesang Yoon
node.js 실무 - node js in practice by Jesang Yoonnode.js 실무 - node js in practice by Jesang Yoon
node.js 실무 - node js in practice by Jesang YoonJesang Yoon
 
BKK16-106 ODP Project Update
BKK16-106 ODP Project UpdateBKK16-106 ODP Project Update
BKK16-106 ODP Project UpdateLinaro
 
Glassfish An Introduction
Glassfish An IntroductionGlassfish An Introduction
Glassfish An IntroductionJumping Bean
 
What's new in MySQL 5.6
What's new in MySQL 5.6What's new in MySQL 5.6
What's new in MySQL 5.6Shlomi Noach
 
Kernel Recipes 2018 - Live (Kernel) Patching: status quo and status futurus -...
Kernel Recipes 2018 - Live (Kernel) Patching: status quo and status futurus -...Kernel Recipes 2018 - Live (Kernel) Patching: status quo and status futurus -...
Kernel Recipes 2018 - Live (Kernel) Patching: status quo and status futurus -...Anne Nicolas
 
Introduction to Core 4
Introduction to Core 4Introduction to Core 4
Introduction to Core 4simonjj
 
LAS16-209: Finished and Upcoming Projects in LMG
LAS16-209: Finished and Upcoming Projects in LMGLAS16-209: Finished and Upcoming Projects in LMG
LAS16-209: Finished and Upcoming Projects in LMGLinaro
 
Puppet managed loadays
Puppet managed loadaysPuppet managed loadays
Puppet managed loadaysYankee Nemoy
 
Hong Kong Drupal User Group - 2014 March 8th
Hong Kong Drupal User Group - 2014 March 8thHong Kong Drupal User Group - 2014 March 8th
Hong Kong Drupal User Group - 2014 March 8thWong Hoi Sing Edison
 
Подталкиваем PHP к пределу возможностей, Michael Armstrong (lite speed techno...
Подталкиваем PHP к пределу возможностей, Michael Armstrong (lite speed techno...Подталкиваем PHP к пределу возможностей, Michael Armstrong (lite speed techno...
Подталкиваем PHP к пределу возможностей, Michael Armstrong (lite speed techno...Ontico
 
What's New in OpenLDAP
What's New in OpenLDAPWhat's New in OpenLDAP
What's New in OpenLDAPLDAPCon
 
Architecture for building scalable and highly available Postgres Cluster
Architecture for building scalable and highly available Postgres ClusterArchitecture for building scalable and highly available Postgres Cluster
Architecture for building scalable and highly available Postgres ClusterAshnikbiz
 
MongoDB : The Definitive Guide
MongoDB : The Definitive GuideMongoDB : The Definitive Guide
MongoDB : The Definitive GuideWildan Maulana
 
An OpenShift Migration: From 3.9 to 4.5
An OpenShift Migration: From 3.9 to 4.5An OpenShift Migration: From 3.9 to 4.5
An OpenShift Migration: From 3.9 to 4.5Everett Toews
 

Similar a OpenERP 6.1 Framework Changes (20)

OpenDaylight Integration with OpenStack Neutron: A Tutorial
OpenDaylight Integration with OpenStack Neutron: A TutorialOpenDaylight Integration with OpenStack Neutron: A Tutorial
OpenDaylight Integration with OpenStack Neutron: A Tutorial
 
LCU14 310- Cisco ODP v2
LCU14 310- Cisco ODP v2LCU14 310- Cisco ODP v2
LCU14 310- Cisco ODP v2
 
LCA14: LCA14-209: ODP Project Update
LCA14: LCA14-209: ODP Project UpdateLCA14: LCA14-209: ODP Project Update
LCA14: LCA14-209: ODP Project Update
 
node.js 실무 - node js in practice by Jesang Yoon
node.js 실무 - node js in practice by Jesang Yoonnode.js 실무 - node js in practice by Jesang Yoon
node.js 실무 - node js in practice by Jesang Yoon
 
GlassFish OSGi - Java2days 2010
GlassFish OSGi - Java2days 2010GlassFish OSGi - Java2days 2010
GlassFish OSGi - Java2days 2010
 
Frameworks choice
Frameworks choiceFrameworks choice
Frameworks choice
 
BKK16-106 ODP Project Update
BKK16-106 ODP Project UpdateBKK16-106 ODP Project Update
BKK16-106 ODP Project Update
 
Glassfish An Introduction
Glassfish An IntroductionGlassfish An Introduction
Glassfish An Introduction
 
What's new in MySQL 5.6
What's new in MySQL 5.6What's new in MySQL 5.6
What's new in MySQL 5.6
 
Kernel Recipes 2018 - Live (Kernel) Patching: status quo and status futurus -...
Kernel Recipes 2018 - Live (Kernel) Patching: status quo and status futurus -...Kernel Recipes 2018 - Live (Kernel) Patching: status quo and status futurus -...
Kernel Recipes 2018 - Live (Kernel) Patching: status quo and status futurus -...
 
Introduction to Core 4
Introduction to Core 4Introduction to Core 4
Introduction to Core 4
 
LAS16-209: Finished and Upcoming Projects in LMG
LAS16-209: Finished and Upcoming Projects in LMGLAS16-209: Finished and Upcoming Projects in LMG
LAS16-209: Finished and Upcoming Projects in LMG
 
Http/2
Http/2Http/2
Http/2
 
Puppet managed loadays
Puppet managed loadaysPuppet managed loadays
Puppet managed loadays
 
Hong Kong Drupal User Group - 2014 March 8th
Hong Kong Drupal User Group - 2014 March 8thHong Kong Drupal User Group - 2014 March 8th
Hong Kong Drupal User Group - 2014 March 8th
 
Подталкиваем PHP к пределу возможностей, Michael Armstrong (lite speed techno...
Подталкиваем PHP к пределу возможностей, Michael Armstrong (lite speed techno...Подталкиваем PHP к пределу возможностей, Michael Armstrong (lite speed techno...
Подталкиваем PHP к пределу возможностей, Michael Armstrong (lite speed techno...
 
What's New in OpenLDAP
What's New in OpenLDAPWhat's New in OpenLDAP
What's New in OpenLDAP
 
Architecture for building scalable and highly available Postgres Cluster
Architecture for building scalable and highly available Postgres ClusterArchitecture for building scalable and highly available Postgres Cluster
Architecture for building scalable and highly available Postgres Cluster
 
MongoDB : The Definitive Guide
MongoDB : The Definitive GuideMongoDB : The Definitive Guide
MongoDB : The Definitive Guide
 
An OpenShift Migration: From 3.9 to 4.5
An OpenShift Migration: From 3.9 to 4.5An OpenShift Migration: From 3.9 to 4.5
An OpenShift Migration: From 3.9 to 4.5
 

Más de Odoo

Timesheet Workshop: The Timesheet App People Love!
Timesheet Workshop: The Timesheet App People Love!Timesheet Workshop: The Timesheet App People Love!
Timesheet Workshop: The Timesheet App People Love!Odoo
 
Keynote - Vision & Strategy
Keynote - Vision & StrategyKeynote - Vision & Strategy
Keynote - Vision & StrategyOdoo
 
Opening Keynote - Unveilling Odoo 14
Opening Keynote - Unveilling Odoo 14Opening Keynote - Unveilling Odoo 14
Opening Keynote - Unveilling Odoo 14Odoo
 
Extending Odoo with a Comprehensive Budgeting and Forecasting Capability
Extending Odoo with a Comprehensive Budgeting and Forecasting CapabilityExtending Odoo with a Comprehensive Budgeting and Forecasting Capability
Extending Odoo with a Comprehensive Budgeting and Forecasting CapabilityOdoo
 
Managing Multi-channel Selling with Odoo
Managing Multi-channel Selling with OdooManaging Multi-channel Selling with Odoo
Managing Multi-channel Selling with OdooOdoo
 
Product Configurator: Advanced Use Case
Product Configurator: Advanced Use CaseProduct Configurator: Advanced Use Case
Product Configurator: Advanced Use CaseOdoo
 
Accounting Automation: How Much Money We Saved and How?
Accounting Automation: How Much Money We Saved and How?Accounting Automation: How Much Money We Saved and How?
Accounting Automation: How Much Money We Saved and How?Odoo
 
Rock Your Logistics with Advanced Operations
Rock Your Logistics with Advanced OperationsRock Your Logistics with Advanced Operations
Rock Your Logistics with Advanced OperationsOdoo
 
Transition from a cost to a flow-centric organization
Transition from a cost to a flow-centric organizationTransition from a cost to a flow-centric organization
Transition from a cost to a flow-centric organizationOdoo
 
Synchronization: The Supply Chain Response to Overcome the Crisis
Synchronization: The Supply Chain Response to Overcome the CrisisSynchronization: The Supply Chain Response to Overcome the Crisis
Synchronization: The Supply Chain Response to Overcome the CrisisOdoo
 
Running a University with Odoo
Running a University with OdooRunning a University with Odoo
Running a University with OdooOdoo
 
Down Payments on Purchase Orders in Odoo
Down Payments on Purchase Orders in OdooDown Payments on Purchase Orders in Odoo
Down Payments on Purchase Orders in OdooOdoo
 
Odoo Implementation in Phases - Success Story of a Retail Chain 3Sach food
Odoo Implementation in Phases - Success Story of a Retail Chain 3Sach foodOdoo Implementation in Phases - Success Story of a Retail Chain 3Sach food
Odoo Implementation in Phases - Success Story of a Retail Chain 3Sach foodOdoo
 
Migration from Salesforce to Odoo
Migration from Salesforce to OdooMigration from Salesforce to Odoo
Migration from Salesforce to OdooOdoo
 
Preventing User Mistakes by Using Machine Learning
Preventing User Mistakes by Using Machine LearningPreventing User Mistakes by Using Machine Learning
Preventing User Mistakes by Using Machine LearningOdoo
 
Becoming an Odoo Expert: How to Prepare for the Certification
Becoming an Odoo Expert: How to Prepare for the Certification Becoming an Odoo Expert: How to Prepare for the Certification
Becoming an Odoo Expert: How to Prepare for the Certification Odoo
 
Instant Printing of any Odoo Report or Shipping Label
Instant Printing of any Odoo Report or Shipping LabelInstant Printing of any Odoo Report or Shipping Label
Instant Printing of any Odoo Report or Shipping LabelOdoo
 
How Odoo helped an Organization Grow 3 Fold
How Odoo helped an Organization Grow 3 FoldHow Odoo helped an Organization Grow 3 Fold
How Odoo helped an Organization Grow 3 FoldOdoo
 
From Shopify to Odoo
From Shopify to OdooFrom Shopify to Odoo
From Shopify to OdooOdoo
 
Digital Transformation at Old MacDonald Farms: A Personal Story
Digital Transformation at Old MacDonald Farms: A Personal StoryDigital Transformation at Old MacDonald Farms: A Personal Story
Digital Transformation at Old MacDonald Farms: A Personal StoryOdoo
 

Más de Odoo (20)

Timesheet Workshop: The Timesheet App People Love!
Timesheet Workshop: The Timesheet App People Love!Timesheet Workshop: The Timesheet App People Love!
Timesheet Workshop: The Timesheet App People Love!
 
Keynote - Vision & Strategy
Keynote - Vision & StrategyKeynote - Vision & Strategy
Keynote - Vision & Strategy
 
Opening Keynote - Unveilling Odoo 14
Opening Keynote - Unveilling Odoo 14Opening Keynote - Unveilling Odoo 14
Opening Keynote - Unveilling Odoo 14
 
Extending Odoo with a Comprehensive Budgeting and Forecasting Capability
Extending Odoo with a Comprehensive Budgeting and Forecasting CapabilityExtending Odoo with a Comprehensive Budgeting and Forecasting Capability
Extending Odoo with a Comprehensive Budgeting and Forecasting Capability
 
Managing Multi-channel Selling with Odoo
Managing Multi-channel Selling with OdooManaging Multi-channel Selling with Odoo
Managing Multi-channel Selling with Odoo
 
Product Configurator: Advanced Use Case
Product Configurator: Advanced Use CaseProduct Configurator: Advanced Use Case
Product Configurator: Advanced Use Case
 
Accounting Automation: How Much Money We Saved and How?
Accounting Automation: How Much Money We Saved and How?Accounting Automation: How Much Money We Saved and How?
Accounting Automation: How Much Money We Saved and How?
 
Rock Your Logistics with Advanced Operations
Rock Your Logistics with Advanced OperationsRock Your Logistics with Advanced Operations
Rock Your Logistics with Advanced Operations
 
Transition from a cost to a flow-centric organization
Transition from a cost to a flow-centric organizationTransition from a cost to a flow-centric organization
Transition from a cost to a flow-centric organization
 
Synchronization: The Supply Chain Response to Overcome the Crisis
Synchronization: The Supply Chain Response to Overcome the CrisisSynchronization: The Supply Chain Response to Overcome the Crisis
Synchronization: The Supply Chain Response to Overcome the Crisis
 
Running a University with Odoo
Running a University with OdooRunning a University with Odoo
Running a University with Odoo
 
Down Payments on Purchase Orders in Odoo
Down Payments on Purchase Orders in OdooDown Payments on Purchase Orders in Odoo
Down Payments on Purchase Orders in Odoo
 
Odoo Implementation in Phases - Success Story of a Retail Chain 3Sach food
Odoo Implementation in Phases - Success Story of a Retail Chain 3Sach foodOdoo Implementation in Phases - Success Story of a Retail Chain 3Sach food
Odoo Implementation in Phases - Success Story of a Retail Chain 3Sach food
 
Migration from Salesforce to Odoo
Migration from Salesforce to OdooMigration from Salesforce to Odoo
Migration from Salesforce to Odoo
 
Preventing User Mistakes by Using Machine Learning
Preventing User Mistakes by Using Machine LearningPreventing User Mistakes by Using Machine Learning
Preventing User Mistakes by Using Machine Learning
 
Becoming an Odoo Expert: How to Prepare for the Certification
Becoming an Odoo Expert: How to Prepare for the Certification Becoming an Odoo Expert: How to Prepare for the Certification
Becoming an Odoo Expert: How to Prepare for the Certification
 
Instant Printing of any Odoo Report or Shipping Label
Instant Printing of any Odoo Report or Shipping LabelInstant Printing of any Odoo Report or Shipping Label
Instant Printing of any Odoo Report or Shipping Label
 
How Odoo helped an Organization Grow 3 Fold
How Odoo helped an Organization Grow 3 FoldHow Odoo helped an Organization Grow 3 Fold
How Odoo helped an Organization Grow 3 Fold
 
From Shopify to Odoo
From Shopify to OdooFrom Shopify to Odoo
From Shopify to Odoo
 
Digital Transformation at Old MacDonald Farms: A Personal Story
Digital Transformation at Old MacDonald Farms: A Personal StoryDigital Transformation at Old MacDonald Farms: A Personal Story
Digital Transformation at Old MacDonald Farms: A Personal Story
 

Último

Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 

Último (20)

Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 

OpenERP 6.1 Framework Changes

  • 1. OpenERP 6.1 Technical Changes at API/Framework level @odony – 6.1 Framework Changes – 05.2012
  • 2. OpenERP 6.1 ● Released February 2011 ● Normal release – non LTS = limited support ● Release Notes ● http://bit.ly/openerp61RN ● Focus ● Usability ● Social features ● New web client ● Cleanup @odony – 6.1 Framework Changes – 05.2012
  • 3. Agenda  ● Framework & API ● Architecture changes ● API evolution ● New views and UI features ● Other important bits ● Exercises, Q&A @odony – 6.1 Framework Changes – 05.2012
  • 4. Evolution: Architecture changes ● Unified server-side deployment ● Scalability through multi-processing ● Use all those cores on modern hardware ● Bypass Python GIL issues ● Reliability (cpu/memory/crashes) ● WSGI ● Standard Python solution – OpenERP 6.1 is compliant ● Gunicorn - a WSGI compliant HTTP server ● Statelessness ● Distributed scheduled tasks (cron) @odony – 6.1 Framework Changes – 05.2012
  • 5. Unified server-side deployment ● No more need to deploy web client ● Web client is now an OpenERP module ● Only one package to install ● Pre-loaded server-wide via –-load=web ● All modules in same place (addons_path) ● openerp-web still available stand-alone ● For testing/debugging purposes ● Needs to have copy of normal modules too! @odony – 6.1 Framework Changes – 05.2012
  • 6. Scalability through multi-processing ● Use all those cores on modern hardware ● Bypass Python GIL limitations ● Improve reliability (cpu/memory/crashes) → What does this all mean?? @odony – 6.1 Framework Changes – 05.2012
  • 7. Multi-processing and GIL (1) ● CPython has a Global Interpreter Lock/GIL ● Simplifies low-level memory management, C calls, etc. ● 1 Python thread = 1 OS thread ● Parallel execution of threads forbidden ● Cooperative multi-tasking on 1 CPU ● Worse performance on multi-CPU/core! ● Battle for GIL on the different virtual CPUs! @odony – 6.1 Framework Changes – 05.2012
  • 8. Multi-processing and GIL (2) ● Cooperative multi-tasking ● Release on I/O or every 100 ticks ● 1 tick ≈ 1 interpreter instruction @odony – 6.1 Framework Changes – 05.2012
  • 9. Scalability through multi-processing ● multiprocessing module was an option ● Using Unix tools and real processes was more flexible and easier to scale up ● Managing the processes was not necessary, many tools exist to do that (e.g. Gunicorn) ● Just had to make OpenERP WSGI-compliant @odony – 6.1 Framework Changes – 05.2012
  • 10. WSGI (1) ● Web Server Gateway Interface for Python ● WSGI applications can be embedded in WSGI-compliant web servers ● Many web frameworks support WSGI ● Django, CherryPy, … ● Many HTTP servers support WSGI ● Apache(+mod), nginx(+mod), tornado, gunicorn, … @odony – 6.1 Framework Changes – 05.2012
  • 11. WSGI (2) ● Very simple API: one method ● environ = HTTP environment map ● HTTP_HOST, REQUEST_METHOD, etc. ● start_response = callback(status,headers) ● Returns response as unicode string ● OpenERP's entry point: wsgi.core.application @odony – 6.1 Framework Changes – 05.2012
  • 12. Gunicorn (1) ● WGSI compliant HTTP Server ● Python port of Ruby Unicorn ● Pre-fork multi-process model ● Flexible and easily configurable ● UNIX only (fork support needed) ● See also gunicorn.org @odony – 6.1 Framework Changes – 05.2012
  • 13. Gunicorn (2) ● Master “Arbiter” process ● Starts and monitors workers (crash/timeout/...) ● Restarts killed workers → fork ● Increment/Decrement worker count (TTIN/TTOU signals) ● Doesn't speak HTTP → naive dispatch ● Forked worker processes ● Speak HTTP → Perform WSGI translation ● Dispatch to application entry point ● Can restart after given number of requests @odony – 6.1 Framework Changes – 05.2012
  • 14. Gunicorn (3) ● OpenERP can't use normal config file or command-line options ● Config has to be provided via Gunicorn ● gunicorn.conf, written in Python! ● Contains Gunicorn configuration (workers, limits, etc.) ● Contains OpenERP configuration ● Sets up requests/application hooks (pre/post request...) ● Arbiter controls max-requests limit ● Workers control memory/cpu limits @odony – 6.1 Framework Changes – 05.2012
  • 15. Gunicorn (4) CONF RUN $ gunicorn openerp:wsgi.core.application -c gunicorn.conf.py @odony – 6.1 Framework Changes – 05.2012
  • 16. Good to know (1) ● Gunicorn → must be used explicitly ● Linear speed-up for CPU-bound tasks, less for I/O or DB ● Werkzeug → built-in WSGI-compliant server ● openerp-server script ● multi-threaded mono-process ● Proxy mode specific handling (X-Forwarded..) ● When deploying behind reverse proxy (e.g. with ProxyPass) ● Gunicorn: wsgi.proxied.application entry point instead ● Werkzeug: --proxy_mode @odony – 6.1 Framework Changes – 05.2012
  • 17. Good to know (2) ● No cron job with Gunicorn ● Could be killed at any point! ● Start separate openerp-cron-worker job ● Anywhere! More about cron jobs in a minute... @odony – 6.1 Framework Changes – 05.2012
  • 18. OpenERP 6.0 deployment model Requests OpenERP OpenERP PostgreSQL Web Client Server @odony – 6.1 Framework Changes – 05.2012
  • 19. OpenERP 6.1 deployment model (1) OpenERP Worker Requests OpenERP Worker PostgreSQL OpenERP Worker OpenERP Worker @odony – 6.1 Framework Changes – 05.2012
  • 20. OpenERP 6.1 deployment model (2) OpenERP Worker OpenERP Worker OpenERP Worker OpenERP Worker Requests Load Balancer PostgreSQL OpenERP Worker OpenERP Worker OpenERP Worker OpenERP Worker @odony – 6.1 Framework Changes – 05.2012
  • 21. Statelessness (1) ● OpenERP 6.0 was still partially stateful: 1) Model registry (pool) 2) Wizards (osv_memory) kept in-memory 3) Application caches – menus, perms, … ! 4) Background task processing: cron ● Not suitable for multi-processing @odony – 6.1 Framework Changes – 05.2012
  • 22. Caches and Model Registries ● Caches and Registries have state ● Must be cleared on all workers when invalidated – across multiple machines! ● Signaling works with 2 DB sequences ● base_registry_signaling ● base_cache_signaling ● Before each request, both are checked ● After each request, increment if changed @odony – 6.1 Framework Changes – 05.2012
  • 23. TransientModel ● osv_memory → TransientModel ● Real database-backed model ● Automatically vacuum-cleaned ● Based on size limit or time limit ● Default: 2 hours ● Has special and implicit access rights ● Everyone can perform CRUD ● But only access on your own records ● Can be used indifferently by multiple workers @odony – 6.1 Framework Changes – 05.2012
  • 24. Background Tasks (cron) (1) ● Problem: ● Each worker possibly runs a cron processor ● Must prevent duplicate run of same task ● Must benefit from multi-processing when multiple cron processors are running (each runs different tasks) ● Solution: ● Database row-level mutex using LOCK ● Cron processor can be run on any number of servers ● Disabled on Gunicorn workers by default ● Can be run separately with openerp-cron-worker script added in 6.1 ● Cron tasks can't be changed while running (locked) @odony – 6.1 Framework Changes – 05.2012
  • 25. Background Tasks (cron) (2) ● And by the way, cron tasks are executed in parallel in OpenERP 6.1 ● Also if running mono-process, up to number or thread specified with –-max-cron-threads (default: 4) ● Allows multiple tasks to be executed at the same time @odony – 6.1 Framework Changes – 05.2012
  • 26. Agenda  ● Framework & API ● Architecture changes ● API evolution ● New views and UI features ● Other important bits ● Exercises, Q&A @odony – 6.1 Framework Changes – 05.2012
  • 27. Date Storage and Computation (1) ● 6.0 stored timestamps in “server timezone” ● Worked well for small teams with only one TZ ● Database not portable, Reports incorrect for cross-TZ teams, DST issues! ● 6.1 stores timestamps as UTC always! ● Big change, but Right Thing to Do™ ● Database becomes portable ● Dates monotonically incremented in DB ● Simplifies conversion for display UTC ↔ Client TZ ● Timestamps computation works as before on server-side ● Watch out! ● “Dates” have no TZ ● Server-side dates must be initialized in client TZ @odony – 6.1 Framework Changes – 05.2012
  • 28. Date Storage and Computation (2) ● Server-side ● All computation in UTC ● PDF reports use client TZ from context/user ● Database ● All timestamps stored as TIMESTAMP WITHOUT TZ ● SELECT now() at time zone ‘UTC’ (should not need it) ● Client ● Converted back and forth between UTC and client TZ ● Web uses browser TZ for display (JS limitation) @odony – 6.1 Framework Changes – 05.2012
  • 29. Date Storage and Computation (3) @odony – 6.1 Framework Changes – 05.2012
  • 30. Date Storage and Computation (4) ● Be very careful with date (that)! ● Pure dates should be taken in user TZ ● It's very tempting to use datetime.date.today() ● But may be wrong for half of the planet! ● Use fields.date.context_today() instead @odony – 6.1 Framework Changes – 05.2012
  • 31. Unified Mail Subsystem ● 6.0 had 3+ independent mail stacks ● 6.1 has one unified mail stack (mail) ● Per-database SMTP settings (SSL, Priority, Debug) ● Single point of extension ir.mail_server ● Single mail queue/archive ● Common features mail.thread mail.message ● Scheduler scheduler composition ● Template (email_template) ● Composition wizard email_template @odony – 6.1 Framework Changes – 05.2012
  • 32. Many2Many auto-naming and inheritance ● What happens when you _inherit a model containing m2m field, w/ different _name? ● Problem more apparent with abstract osv_memory models ● In 6.1 many2many have auto names ● rel_table, rel_from, rel_to are automatically computed ● Simpler/Partial declaration, clean inherit ● rel_table override needed for multiple relationships @odony – 6.1 Framework Changes – 05.2012
  • 33. YAML improvements (1) ● 6.1 YAML tests: ● 65% coverage, 150 scenarios, 1800 test steps ● Simulating workflows works well ● But what about UI: views, on_change, … ? ● Done! YAML will now automatically use form views and on_change methods ● Better coverage ● Less code: on_change can fill in implicit values ● Can be overridden with view attribute @odony – 6.1 Framework Changes – 05.2012
  • 34. YAML improvements (2) @odony – 6.1 Framework Changes – 05.2012
  • 35. Simplified Configuration (1) ● Setup process streamlined – 1-click install ● Kanban module view – ordered by sequence ● Configuration Overview Dashboard ● Based on ir.action.todo and ir.actions.todo.category ● New ir.actions.todo ● Reminder: group_ids, action_id, and note ● States: Todo or Done ● Types: Manual, Manual Once, Automatic ● Most are Manual or Manual Once now ● New category_id for Configuration Overview @odony – 6.1 Framework Changes – 05.2012
  • 36. Simplified Configuration (2) @odony – 6.1 Framework Changes – 05.2012
  • 37. Logging ● Python has a decent logging system ● netsvc.notifyChannel() deprecated in 6.0 ● Convenience hierarchical loggers ● One _logger per file recommended _logger = logging.getLogger(__name__) ● New –-log-handler config parameter ● --log-handler=PREFIX:LEVEL ● --log-handler=openerp.netsvc.rpc.request:DEBUG ● --log-handler=werkzeug:CRITICAL @odony – 6.1 Framework Changes – 05.2012
  • 38. Agenda  ● Framework & API ● Architecture changes ● API evolution ● New views and UI features ● Other important bits ● Exercises, Q&A @odony – 6.1 Framework Changes – 05.2012
  • 39. Kanban (1) ● Kanban ( カンバン ): Japanese billboard ● Toyota's Lean/JIT production: “pull” or “demand-driven” SCM ● Kanban cards signal need to produce @odony – 6.1 Framework Changes – 05.2012
  • 40. Kanban (2) ● Kanban method, applied to Management ● Signboard shows whole workflow at a glance ● Limit WIP (work-in-progress) for each state (Pull!) ● Monitor flow @odony – 6.1 Framework Changes – 05.2012
  • 41. Kanban (3) ● kanban views are written in Qweb ● Automatic column layout with Group By ● Drag & Drop reassigns grouped column ● One mandatory template “kanban-box” ● Can use normal OpenERP fields ● Any CSS/HTML you like @odony – 6.1 Framework Changes – 05.2012
  • 42. Kanban (4) ● Typical structure @odony – 6.1 Framework Changes – 05.2012
  • 43. Kanban (5) ● Drag&Drop is nice, but group_by only shows existing data ● How about missing columns? ● Solution: add a _group_by_full map ● Return type must be like read(), depending on the column type @odony – 6.1 Framework Changes – 05.2012
  • 44. Kanban (6) ● group_by_full, complex example @odony – 6.1 Framework Changes – 05.2012
  • 45. Kanban (7) Exercise: add test kanban view for res.partner @odony – 6.1 Framework Changes – 05.2012
  • 46. Kanban (8) ● More details about Kanban API: http://pad.openerp.com/kanban-api (temporary location) @odony – 6.1 Framework Changes – 05.2012
  • 47. Customizable dashboards ● Dashboards now feature multiple layouts ● Saved in ir.ui.view_custom, per user ● Filters menu now has “Add to dashboard” ● Works with kanban views too @odony – 6.1 Framework Changes – 05.2012
  • 48. New many2one widget ● Many2One fields = eternal UI problem ● 6.1 widget: ● Auto-complete selection as you type ● Intuitive quick creation ● New ORM method: name_create(cr, uid, name, context) ● If fails, default to normal form creation ● Disabled with options='{"quick_create": false}' @odony – 6.1 Framework Changes – 05.2012
  • 49. New statusbar widget ● Old state selection was not user-friendly ● statusbar widget shows workflow steps ● Only for selection fields ● Options: list of visible values, colors @odony – 6.1 Framework Changes – 05.2012
  • 50. Agenda  ● Framework & API ● Architecture changes ● API evolution ● New views and UI features ● Other important bits ● Exercises, Q&A @odony – 6.1 Framework Changes – 05.2012
  • 51. Module Manifest changes ● Web-related keys: js, css, qweb ● active → auto_install (backwards-compat): 'depends' triggers! ● complexity (easy|normal|expert) ● application (bool): Application or Extra ● sequence (integer): Application install screen order ● New category: 'Hidden' – Technical, hidden by default ● Module icon for install screen /static/src/img/icon.png ● OpenERP Apps ● Description in RST, one main section ● 'images': ['/path/to/screenshot.png', '/path/to/screenshot2.png'] @odony – 6.1 Framework Changes – 05.2012
  • 52. EDI Subsystem (1) ● Goal: bring companies up to par with people and social network tools ● EDI module installed with Sales, Account ● EDI Setup ● Company Addres & Logo ● Outgoing Email Server (SMTP) ● User emails ● Customers/Contacts emails @odony – 6.1 Framework Changes – 05.2012
  • 53. EDI Subsystem (2) @odony – 6.1 Framework Changes – 05.2012
  • 54. EDI Subsystem (3) ● Fine-tuning ● Payment options ● Paypal account on company ● Bank accounts on company ● Email templates ● EDI Preview templates: Qweb ● Opt-out ● Per-customer ● Global – workflow level ● Global – template @odony – 6.1 Framework Changes – 05.2012
  • 55. EDI Subsystem (4) ● EDI Document is simple JSON ● EDI engine is generic @odony – 6.1 Framework Changes – 05.2012
  • 56. Agenda  ● Framework & API ● Architecture changes ● API evolution ● New views and UI features ● Other important bits ● Exercises, Q&A @odony – 6.1 Framework Changes – 05.2012
  • 57. Exercises ● Gunicorn: ● Install Gunicorn and start OpenERP w/ it ● Kanban ● Add a kanban view to the model of your choice ● Set a default group_by on the menu action ● Implement a working _group_by_full ● Add the Kanban view to a dashboard ● EDI ● Modify an EDI Preview template to show Quotations @odony – 6.1 Framework Changes – 05.2012