Hỏi Đáp

Welcome!

This community is for professionals and enthusiasts of our products and services.
Share and discuss the best content and new marketing ideas, build your professional profile and become a better marketer together.

1

Gửi mail template từ một server action trong OpenERP7

Ảnh đại diện
Vũ Trọng Đạt

Chào cả nhà, mình là thành viên mới, có gì mong mọi người chỉ giúp. Công ty mình đang dùng OpenERP 7.0. Mình đang gặp một vấn đề như sau: Khi hệ thống thực hiện workflow, mình muốn tại một node nào đó, nó sẽ gửi email theo template mà mình đã thiết kế.
Theo mình biết thì tại một node của workflow nó có cho phép mình thực hiện một server action. Trong server action có type là email, nếu theo hướng này thì mình đã làm được rồi. Nhưng mình muốn nó gửi email theo template của mình. Mình làm mãi mà không được? Có đại ca nào chỉ mình với. Thanks!

Ảnh đại diện
Huỷ bỏ
6 Trả lời
1
Ảnh đại diện
Leo Tran
Best Answer

Chào Vũ Trọng Đạt,

Bạn tuy là mem mới nhưng có câu hỏi rất thú vị. Mình xin trả lời câu hỏi của bạn như sau:

1. Bạn chọn server action type là Python Code
2. Thực hiện đoạn code sau (đã test):

if not object.partner_id.opt_out:
      template_obj = self.pool.get('email.template')
      template_id = template_obj.search(cr,uid,[('name','=','My Email Template Name')])[0]
      action = template_obj.send_mail(cr, uid, template_id, context['active_id'], True)
Ảnh đại diện
Huỷ bỏ
1
Ảnh đại diện
Vũ Trọng Đạt
Best Answer

OK, thank Leo Tran

Ảnh đại diện
Huỷ bỏ
1
Ảnh đại diện
Vũ Trọng Đạt
Best Answer

Cảm ơn Leo Tran, nó đã hoạt động. Tuy nhiên mình có một thắc mắc đó là template_id bạn tìm theo name. Vậy sau này mình đổi tên thì làm thế nào?

Ảnh đại diện
Huỷ bỏ
1
Ảnh đại diện
Leo Tran
Best Answer

@Đạt,

Cái này là do bộ code của bạn bị lỗi, nếu bạn dùng bản OpenERP nightly build mới nhất thì lỗi này đã được fix. Để fix lỗi này, bạn vào file /opt/openerp/standard/addons/email_template/email_template.py, thay thế đoạn code dòng 376 thành đoạn code sau

attachments = dict(values.pop('attachments')) or {}
Ảnh đại diện
Huỷ bỏ
1
Ảnh đại diện
Vũ Trọng Đạt
Best Answer

Gửi Leo Tran,

Mình dùng đoạn code của bạn và nó báo lỗi sau

File "/opt/openerp/standard/addons/email_template/email_template.py", line 381, in send_mail
    for fname, fcontent in attachments.iteritems():
AttributeError: 'list' object has no attribute 'iteritems'
Ảnh đại diện
Huỷ bỏ
0
Ảnh đại diện
Leo Tran
Best Answer

@Đạt,

Thắc mắc của bạn rất hợp lý, trong trường hợp này, theo mình không còn cách nào khác. Lý do: ở đây chúng ta viết code trực tiếp trên webclient và lưu code vào database tương ứng và code trong server action đc chạy ngầm, không thông qua giao diện. Do đó việc hack code là điều không thể tranh khỏi, bạn không hack name thì cũng phải hack id. Tùy bạn chọn

Ảnh đại diện
Huỷ bỏ

Trả lời của Bạn

Vui lòng đảm bảo câu trả lời của bạn có liên quan và giải đáp đúng nội dung câu hỏi. Nếu muốn bình luận về câu hỏi hoặc câu trả lời, hãy sử dụng công cụ Bình luận. Lưu ý, bạn có thể thay đổi nội dung trả lời thay vì trả lời lại 02 lần cho cùng một câu hỏi. Đồng thời bạn có thể nhấn nút để bầu chọn câu hỏi / câu trả lời tốt nhất.