Основы разработки простого модуля в OpenERP

Привожу перевод статьи с кратким но достаточно полным описанием создания модуля в OpenERP. Так как не достаточно владею терминологией программирования — перевел как получилось. Если есть какие либо поправки к переводу, прошу писать — не стесняйтесь :)

Перевод оригинальной статьи

OpenObject использует модули в качестве контейнеров функций, для быстрого обслуживания и хорошему развитию. Модули обеспечивают функциональность в OpenERP.

Состав модуля

Модуль может содержать следующие элементы:

бизнес объекты: объявленные как классы Питона, с расширением osv.osv класс OpenObject

данные: виды, меню, технологические процессы, демонстрационные данные и т.д.

мастера: интерактивные формы

отчеты: RML (формат XML), шаблоны МАКО или OpenOffice отчеты, объедененные с любым видом коммерческой информации, с созданием HTML, ODT или PDF отчетами.

Структура модуля

Модуль создаются в пределах директории server\openerp\addons



Python модуль файл описания [ __init__.py ]

import module, wizard, report


OpenERP файл описания [ __openerp__.py ]



Объекты, Области и Методы
Данные в OpenERP представлены через 'Объекты'. Каждый тип ресурса в openERP содержит объект. Моделирование OpenERP основано на 'объектах', и данные хранятся в базе данных 'Postgresql'.



Аттрибуты объекта

_name: название объекта (требуется)
_columns: словарь полей объекта (требуется)
_defaults: словарь полей, определяющие значения по умолчанию
_inherit: название родительского объекта, которому наследует текущий объект
_constraints: список записей ограничений в объекте
_sql_constraints: список записей, определяющих ограничения SQL
_rec_name: Альтернативная область, которая используется в качестве имени
_auto: Определяет, должна ли соответствующая таблица PostgreSQL быть создана автоматически от объекта.


Типы полей

В основном, есть 3 типа областей — простые, отношения и функциональные

simple
boolean
'active' :fields.boolean('active')
integer
'roll_no': fields.integer('Roll No:)
float
'percentage':fields.float('Percentage')
char
'name': fields.char('Name', size=20, required=True),
text
'note': fields.text('Note')
date
'date': fields.date('Date')
datetime
'time': fields.date('Login Time')
selection
'gender': fields.selection((('M','Male'),('F','Female')),'Gender',required=True),
binary
'active': fields.binary('Active')

relational
many2one — Relationship towards a parent object
'class': fields.many2one('student.det','class')
one2many — Virtual relationship towards multiple objects
'stud_name':fields.many2one('stud.name','Student Name'),
many2many — Bidirectional multiple relationship between objects
'mark_list':fields.one2many('stud.mark','stud_rec_id','Mark List')


functional

Функциональные поля динамически вычисляют значения полей, которые выполнены в виде функций.

function(fnct, arg=None, fnct_inv=None, fnct_inv_arg=None, type='float', fnct_search=None, obj=None, method=False, store=False, multi=False,...)


Методы ORM
Использованные параметры:
cr: соединение с базой данных (курсор)
uid: id пользователя, выполняющего операцию

ids: список записей uid, или единственное число, когда только один id
context: дополнительный словарь контекстных параметров, таких как пользовательский язык

self.pool.get('object_name')
Используется, чтобы получить образцовый класс

create(cr, uid, values, context=None)
Создает новую запись с указанным значением, Возвращяет: id новой записи

search(cr, uid, args, offset=0, limit=None, order=None, context=None, count=False)
Возвращает: список id записей, соответствующих данным критериям

read(cr, user, ids, fields=None, context=None)
Возвращает: список словарей с требуемыми полевыми данными

write(cr, uid, ids, values, context=None)
Обновления делают запись с данными ids с данными значений. Возвращает: Правда

unlink(cr, uid, ids, context=None)
Удаляет записи с данными ids. Возвращает: Правда

browse(cr, uid, ids, context=None)
Приводит записи как объекты, позволяют использовать точечную запись, чтобы просмотреть отношения и поля. Возвращает: объект или список запрашиваемых объектов


Виды
Виды описывают, как объекты показываются пользователю. Виды написаны в XML. Есть два основных типа видов — вид формы и древовидный вид. Следующее — вид формы студенческого отчета:



Меню и Действия

Меню
menuitem – ярлык (пункт) меню, которое объявляется в записях ir.ui.menu и запускает определенные действия.



Действия
Действие определяют способ ответа системы пользователю, вызывающему действие как нажатие на кнопку, и т.д.

5 комментариев

avatar
топик явно требует редактирования программистом
avatar
Да пойдет, разве что
create(cr, uid, values, context=None)
Создает новый отчет с указанным значением, Возвращяет: id нового отчета
не отчёт всё же, а запись.
avatar
Поправил :)
avatar
Ну так помогите :) я вот хочу разобраться с одоо, но этой информации мне не достаточно — хочу понять оператор за оператором где объявляются методы где поля где объекты… С примерами… и как, например, наследовать и вообще для какой версии одоо это все актуально… автор молодец, жду продолжения:)
avatar
А можно вот это перевести www.odoo.com/documentation/8.0/howtos/backend.html
???
  • Djuz
  • 0

Оставить комментарий