Основы разработки простого модуля в OpenERP
Привожу перевод статьи с кратким но достаточно полным описанием создания модуля в OpenERP. Так как не достаточно владею терминологией программирования — перевел как получилось. Если есть какие либо поправки к переводу, прошу писать — не стесняйтесь :)
Перевод оригинальной статьи
OpenObject использует модули в качестве контейнеров функций, для быстрого обслуживания и хорошему развитию. Модули обеспечивают функциональность в OpenERP.
Модуль может содержать следующие элементы:
бизнес объекты: объявленные как классы Питона, с расширением osv.osv класс OpenObject
данные: виды, меню, технологические процессы, демонстрационные данные и т.д.
мастера: интерактивные формы
отчеты: RML (формат XML), шаблоны МАКО или OpenOffice отчеты, объедененные с любым видом коммерческой информации, с созданием HTML, ODT или PDF отчетами.
Модуль создаются в пределах директории server\openerp\addons
Python модуль файл описания [ __init__.py ]
OpenERP файл описания [ __openerp__.py ]
Аттрибуты объекта
_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 и запускает определенные действия.
Действия
Действие определяют способ ответа системы пользователю, вызывающему действие как нажатие на кнопку, и т.д.
Перевод оригинальной статьи
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 комментариев
???