Интеграция OpenERP (Odoo) с внешними системами

Существует ли простой способ связать новое настраиваемое поле (в записи клиента или в элементах заказа) в OpenERP (oodo) с внешней ссылкой (т.е. описанием или iframe), чтобы оно могло быть связано с другой системой?

Есть ли простой способ инициализировать эту ссылку с помощью (нового) GUID при создании записи?

Есть ли простой способ внедрить JavaScript на стороне клиента в стандартные страницы OpenERP?

Нужно ли для этого создавать новый модуль?


person Ruediger Jungbeck    schedule 09.07.2014    source источник


Ответы (1)


Для OpenERP 7.0+

  1. Вы можете добавить дополнительное поле типа text/char для ссылка на любой объект, такой как sale.order/purchase.order/любой другой объект. Это возможно как для модуля, так и для веб-клиента (если у вас есть технические права).

  2. Самый простой способ создать GUID всякий раз, когда создается запись, — расширить эту запись и переопределить конструктор:

    class extended_sale_order(osv.osv):
      _name = 'sale.order'    # override current sale.order by replacing it (same name)
      _inherit = 'sale.order' # inherit from "original" sale.order
      _columns = {
                  'GUID': field.text('GUID') # add GUID textfield
      }
    
      def create(self, cr, uid, vals, context=None):
         '''
           On sale.order construction create a GUID and replace the GUID field in
           sale.order with the generated value.
         '''
         guid = generate_guid() # implement this or use oerp sequences
         vals['GUID'] = guid
         result = super(extended_sale_order,self).create(cr,uid,vals,context)
         return result
    
  3. Да, вы можете добавить script/html прямо в представления, как описано в блоге OpenERP Bay (я не могу добавить более 2 ссылок... возможно, защита от спама, вы можете легко найти блок с помощью большинства поисковых систем). Модификации можно выполнять либо с помощью веб-клиента и технических прав в разделе пользовательского интерфейса, либо с помощью модуля, который изменяет представление, либо с помощью виджета или другой точки расширения для модификаций, связанных с представлением, которые могут использовать JS.

  4. Важнейшая часть заключается в том, где поместить создание GUID в логику создания записи. Если вы можете сделать это в JS — например, создав новый GUID и поместив его в поле всякий раз, когда в форме создается новая запись — и вы знаете, что объекты всегда создаются для формы веб-клиента, все в порядке. Для взлома. Написание модуля и размещение логики в бизнес-объекте - чистое решение для этого. Для этого достаточно документации по разработке модулей OERP и в сети есть хорошие учебники для решения небольших задач, таких как добавление дополнительного поля. Программист модуля OpenERP, вероятно, просто

    • create a Module
    • наследовать модель/объект, который должен быть изменен
    • добавить поле, которое содержит guid/ссылку
    • при желании создайте вычисляемое поле, которое строит ссылку из поля guid, поэтому вам нужно только сохранить guid или создать произвольный html, который должен быть вставлен в представление
    • добавить некоторую логику в конструктор для создания и сохранения guid
    • наследовать представления, в которых должна быть размещена ссылка
    • добавьте поля/контент, которые должны отображаться, например. используя выражение xpath, чтобы поместить новую область просмотра/поле/контент за другим полем
    • install and test it
      • restart the server whenever python code is changed
      • обновлять модуль при каждом изменении xml

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

person makadev    schedule 11.07.2014