Server-tools: [RFC] Context_onchange: مفتاح السياق لإجراء التغييرات

تم إنشاؤها على ٢٠ نوفمبر ٢٠١٧  ·  8تعليقات  ·  مصدر: OCA/server-tools

ستوفر هذه الوحدة القدرة على تمرير مفتاح سياق إلى نموذج إنشاء أو كتابة ، مما يؤدي إلى تشغيل جميع التغييرات المرتبطة للحقول التي تم تمريرها في الوسيطة data .

سيبدو الاستخدام كالتالي:

record.with_context(do_onchange=True).write(data)
# OR
model.with_context(do_onchange=True).create(data)

سيكون هذا مفيدًا بشكل لا يصدق لإنشاء مجموعات سجلات معقدة من السهل جدًا إنشاؤها من خلال واجهة المستخدم نظرًا للتغييرات التي تحدث. وخير مثال على ذلك هو تكوين المبيعات ، أو sale.order نفسه.

في الوقت الحالي ، أشعر بالحيرة قليلاً بشأن كيفية القيام بذلك. أعتقد أن القطعة المفقودة هي نوع من الأسلوب المركزي لإحداث تغييرات في نموذج يعتمد على قائمة الحقول أو شيء من هذا القبيل. هل يعرف أي شخص أي شيء من هذا القبيل؟

يارب احفظها

question

التعليق الأكثر فائدة

lasley ، يمكنك تمديد الملحق 'onchange_helper' https://github.com/OCA/server-tools/tree/10.0/onchange_helper

ال 8 كومينتر

تحتاج إلى تحديد حقل (حقول) البداية التي ستؤدي إلى تشغيل بقية التغييرات.

مرحبًا @ Lasley ،

شكرا جزيلا على الفكرة وكتابتها!
هناك بعض المواقف التي يمكن أن يكون فيها هذا أمرًا ذا قيمة (مثل إعدادات المبيعات في Odoo V11 كما ناقشنا).
ترقب هذا واحد.

pedrobaeza - أنت تقول أن هذا يحدث بالفعل في الواجهة الخلفية طالما أن الحقول محددة؟ هل من المحتمل أن تكون جميع الحقول في التغيير بحاجة إلى تعريف؟

في الأساس إذا:

@api.onchange('a_field', 'b_field')

ثم

model.create({'a_field': 'a', 'b_field': 'b'})

ستنجح ، ولكن ليس:

model.create({'a_field': 'a'})
# OR
model.create({'b_field': 'b'})

السبب الذي أطلبه هو أنني أرى تطبيقًا غير متسق بشكل لا يصدق لهذا المنطق.

لا ، أنا لا أقول أن هذا يحدث بالفعل. ما أقوله أنك بحاجة إلى تحديد ما هي قيمة (قيم) الحقول التي تبدأ سلسلة التغييرات. شيء مثل:

record.with_context(do_onchange=['field_a', 'field_b']).write(data)

يا للاهتمام ، كنت أفكر في مجرد استخدام المفاتيح الموجودة في البيانات نفسها. قم ببساطة بتجاوز الطرق create و write ، ثم قم بإجراء عملية التغيير إذا كانت المفاتيح موجودة.

سيسمح تصميمك للمطور بتقييد التغييرات فعليًا ، أو تشغيلها يدويًا حتى إذا كانت البيانات لا تحتوي على المفتاح. هذا يبدو وكأنه موقف "لماذا لا"؟

هل لديك أي فكرة عما إذا كان هناك نوع من آلية تحديد الهوية المركزية يمكننا الارتباط بها لهذا الغرض؟ لقد بحثت في النموذج الأساسي ولم أتمكن من العثور على أي شيء مميز. @

تخيل أنك مررت القيم التالية في أمر بيع: partner_id و fiscal_position_id . أرى عدة مشاكل:

  1. بدون تحديد أن partner_id هو البادئ ، يمكنك استدعاء _onchange_fiscal_position_id ثم _onchange_partner_id ، وهو ليس الترتيب الصحيح.
  2. أعتقد أنك لا تفكر في حدوث تغييرات متتالية. _onchange_partner_id بتعديل fiscal_position_id ، لذا يجب عليك الاتصال بعد _onchange_fiscal_position_id .
  3. إذا كنت تقوم بتمرير fiscal_position_id ، فهل هذا لأنك تريد هذا المنصب المحدد؟ ثم يجب عليك تجاوز القيمة التي تحصل عليها عند التغيير الأول لتمريرها إلى التغييرات المتتالية. أم تريد تجاوزه؟

lasley ، يمكنك تمديد الملحق 'onchange_helper' https://github.com/OCA/server-tools/tree/10.0/onchange_helper

Welp هذا رائع ، شكرًا لك lmignon ، لست متأكدًا كيف فاتني ذلك!

أعتقد في الواقع أن هذا تطبيق أفضل الآن بعد أن نظرت إليه. من خلال فكرتي ، فإننا نضيف النفقات العامة لبيان if في كل إنشاء / كتابة ، ولكن مع هذه العبارة لا نفعل ذلك. كلاهما يتطلب نفس القدر من الشفرة للاستخدام أيضًا ، لذا فائز واضح تمامًا.

أعتقد أنه ربما سأقوم بلمس الجزء التمهيدي قليلاً على الآخر. أعتقد أن كلمة play هي التي دفعتني للخسارة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

lasley picture lasley  ·  22تعليقات

pedrobaeza picture pedrobaeza  ·  19تعليقات

lasley picture lasley  ·  7تعليقات

lasley picture lasley  ·  15تعليقات

LeartS picture LeartS  ·  3تعليقات