2017-08-25 9 views
12

Moje zadanie: dynamiczny pasek postępu w odoo.Odoo10/Odoo11 dynamiczny pasek postępu - aktywacja funkcji javascript wewnątrz pytona

Używam widżetu Odoo: "progressbar". Chcę aktualizować widok za każdym razem, gdy wartość jest aktualizowana - dlatego chcę wywołać funkcję javascript on_change_input w metodzie Pythona, aby wyrenderować widok.

@api.one 
def updatevalue(self, val): 
     self.value = val 
     # TODO call javascript function on_change_input() 

Celem jest, że progressbar powinien być aktualizowany, gdy proces jest uruchomiony i użytkownik powinien zobaczyć postęp bez aktualizacji witryny.

Czy moje zadanie jest możliwe dzięki widgetowi postępu? Czy jest jeszcze inna możliwość pokazania zawartości dynamicznej w Odoo?

Jeśli używam mojej metody updatevalue jako przycisku, pasek postępu jest aktualizowany po kliknięciu przycisku bez wywoływania funkcji javascript & bez odświeżania strony ... ale chcę wywołać metodę w moim kodzie (i prawdopodobnie ponad RPC) w związku z tym to nie pomaga -.-

Dziękuję za poświęcony czas!


Oto workflow mam tak daleko:

użytkownik kliknie przycisk do_time_consuming_task i następująca funkcja nazywa się:

def do_timeconsuming_task(self): 
    ws = websocket.WebSocket() 
    ws.connect('ws:/129.0.0.1:1234/') 
    data = { 'topic' : 'server_command', 'id' : self.id, 'commandName' : 'do_sth',} 
    payload = ujson.dumps(data) 
    ws.send(payload) 
    ws.close() 

Na serwerze otrzymaniu polecenia i przetworzone. Jest otwarte połączenie RPC:

odoo = odoorpc.ODOO("129.0.0.1", port=8069) 
odoo.login("database", "user", "password") 
my_module = odoo.env['my_module.progress_widget_test'] 

progress_instance = my_module.browse(id) 

Za każdym razem, gdy zmienia się wartość postępu nazywam następujący sposób mojego modułu:

progress_instance.updatevalue(new_value) 

gdy wartość jest równa 100% zamknąć połączenie

odoo.logout() 
+0

Pasek postępu jest polem obliczanym, prawda? Dlaczego więc musimy aktualizować zawsze? –

+0

Zajrzyj tutaj [email protected]: CybroOdoo/CybroAddons.git # 10.0 –

+0

nie, pole paska postępu (wartość) nie jest polem obliczonym. Jest aktualizowany przez RPC, wywołując metodę "updatevalue". Do którego z Addonów CybroOdoo się odwołujesz? – IstaLibera

Odpowiedz

0

Ta funkcja już istnieje i można kopiować jej części z account/static/src/js/account_reconciliation_widgets.js z metody updateProgressBar i processReconciliations. Zobaczysz tutaj poprawny sposób aktualizacji paska postępu.

Celem jest, że progressbar powinny być aktualizowane podczas procesu jest uruchomiony i użytkownik powinien zobaczyć postęp bez aktualizacji witryny .

Patrz na processReconciliations jak to się robi, po prostu wywołać metodę process_reconciliations która istnieje na tylnym końcu i masz deferred obiekt powrotem. Od tego odroczony obiektu można korzystać progress()

Patrząc poprzez dokumentacji .progress() widać, że trzeba zgłosić swoje postępy używając .[notify][2]()

Jak można określić procentu ukończenia procesu?

+0

Dziękujemy za pomoc! Jednak nie wiem, jak włączyć funkcje, które wspominasz do mojego modelu. Czy możesz mi pomóc - zaktualizowałem moje pytanie dotyczące konkretnego przepływu pracy, jaki do tej pory miałem. Również nie jestem zaznajomiony z programowaniem w javascript, więc byłoby miło z twojej strony, gdybyś dodał kod dopasowujący do mojej samle. – IstaLibera

+0

Procent ukończenia mojego procesu jest zdefiniowany przez liczbę kroków, które są już wypełnione. Na przykład. zadanie musi wykonać 20 kroków - i 15 kroków jest zakończonych -> procent ukończenia wynosi 75%. Ale to coś, co po prostu wiem poza ODoo -> dlatego aktualizuję wartość przy pomocy wywołań RPC. – IstaLibera