Сообщение #1
06 мая 2017, 12:37
|
Загрузка и удаление данных через интерфейс пользователя
Необходимо вручную загружать данные проекта из data.xml и иметь возможность очищать их
Решение через Widget и модель
Создаем пункт меню
Создаем меню события test_export
Создаем в проекте в папке static/src/js файл test.js
В данном файле создаем виджет обработчика события
Подключаем java скрипт в файл форм проекта
В модели test.test описываем функции получения и удаления данных
Не забываем перед api ставить@
Спасибо за внимание
Решение через Widget и модель
Создаем пункт меню
<menuitem id="test_import" name="Загрузка/Удаление" parent="test_menu" action="test_export"/>
Создаем меню события test_export
<record id="test_export" model="ir.actions.client">
<field name="name">Import test</field>
<field name="tag">test.import</field>
</record>
Создаем в проекте в папке static/src/js файл test.js
В данном файле создаем виджет обработчика события
openerp.test = function(instance, local) { // test - имя файла проекта
var _t = instance.web._t,
_lt = instance.web._lt;
var testTest= new instance.web.Model("test.test"); // привязываем модель test.test к переменной testTest
local.ButWidget = instance.Widget.extend({ /// создаем виджет кнопок
className: 'oe_tickets_button',
events: { /// подключаем обработчик событий
'click button.ok_button': function () { /// нажата кнопка импорт
res=testTest.call('GetData',{context:new instance.web.CompoundContext()}); /// вызов метода импорта 'GetData' модели test.test
},
'click button.delete_button': function () { /// нажата кнопка удалить
testTest.call('DelData',{context:new instance.web.CompoundContext()}); /// вызов метода удаления 'DelData' модели test.test
}
},
start: function() { /// помещаем кнопки на форму
this.$el.append(" <header><button class='ok_button btn_default btn-sm'>Загрузить</button>" +
"<button class='delete_button btn_default btn-sm'>Удалить</button> <header>");
},
});
local.Import = instance.Widget.extend({ // подключаем виджет кнопок ButWidget к нашей форме
className: 'oe_test_import',
start: function () {
var widget = new local.ButWidget(this);
widget.appendTo(this.$el);
}
});
instance.web.client_actions.add('test.import', 'instance.test.Import'); // подключаем событие
/// test.import - наименование берется из меню события <field name="tag">test.import</field>
// наименование Import > local.Import
}
Подключаем java скрипт в файл форм проекта
<template id="assets_backend" name="petstore_assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/test/static/src/js/test.js"/>
</xpath>
</template>
В модели test.test описываем функции получения и удаления данных
class test(models.Model):
_name = 'test.test'
api.model
def GetData(self): # импорт данных
try:
tools.convert_file(self._cr,'test','data.xml',{},'update',False, None, None)
self._cr.commit()
except Exception:
self._cr.rollback() # error, rollback everything atomically
raise
finally:
api.model
def DelData(self):
try:
res=self.env['ir.model'].search_read([('model','like','test.')],['model']) # получение списка моделей проекта test
if res:
for model in res:
m=model.get('model')
self.env[m].search([]).unlink() # удаление данных модели
except Exception:
raise
finally:
Не забываем перед api ставить@
Спасибо за внимание
Последний раз редактировал пользователь
aladkoi
-
06 мая 2017, 12:39