سؤال

ومرة أخرى ، استجواب Axapta (يعمل على AX 2009 و SQL-Server 2008 R2): وهي بالضبط نقطة الوقت ، عند إدراج مجموعات البيانات التي يتم تحديثها في قاعدة البيانات المتعلقة؟

الهدف من ذلك هو استدعاء إجراء مخزن على خادم SQL الذي ينقل البيانات من Tables Ax (مثل inventtable) إلى جدول آخر (لم يتم إنشاؤه مع Axapta). إن تنفيذ الإجراء المخزن عبر ODBC من AXAPTA على أحد أطواق الجدول (حتى بعد استدعاء Super ()) يؤدي إلى تشغيل الإجراء المخزن ، لكن البيانات التي تمت إضافتها أو تعديلها في AX لم يتم العثور عليها أثناء الاختيار عبر SMSS (SELECT * من dbo.inventtable).

المكان الوحيد الذي أعرفه حتى الآن حيث يتم تخزين البيانات بالفعل في DB على الطرق الموجودة على بيانات البيانات في النموذج المتعلق ، ولكن هذا سيكون هادئًا قبيحًا ، حيث يمكن تحرير البيانات عبر نماذج N من AX.

فهل هناك طريقة لوضع المكالمة على الجدول بدلاً من ذلك على بيانات بيانات النماذج؟

شكرا للتلميحات مقدما!

هل كانت مفيدة؟

المحلول

يتم "تخزين" بيانات AX في قاعدة البيانات عند نقطة doInsert()/doUpdate() أو super() مكالمات في insert()/update() أساليب.

ومع ذلك ، كما ذكر جاي ، لن تكون السجلات مرئية للمعاملات الأخرى (إلا إذا سمحت بشكل صريح باختيار القذرة/غير الملتزم). لذلك قد لا يكون مرئيًا لإجراءاتك المخزنة.

لا أوصي باستدعاء الإجراءات المخزنة في insert()/update() على أي حال ، لأن هذا له آثار أداء ، وأنت الآن يعتمد على قاعدة بيانات أخرى على قيد الحياة!

وسيلة للذهاب:

  1. سجل إدراج/تحديث في جدول منفصل لهذا الغرض (فكر في استخدام تسجيل قاعدة البيانات القياسية).
  2. من قاعدة البيانات الأخرى ، راقب السجل للحصول على سجلات جديدة (قل كل 15 ثانية).
  3. قم بإدراج/تحديث في قاعدة البيانات الأخرى بناءً على انضمام إلى السجل وجدول AX.

تصميم جدول السجل (واحد من الملايين):

  • logType - 1 = إدراج ، 2 = تحديث ، 3 = حذف
  • logstatus - 0 = لم يتم نقله ، 1 = تحت النقل ، 2 = نقل ، 3 = خطأ ؟؟؟
  • Sercid - استرداد سجل الفأس
  • reftableid - tableid من جدول الفأس (إذا كنت بحاجة إلى تسجيل أكثر من جدول واحد)
  • refcompanyid - شركة سجل AX (ربما يتم مشاركة الجدول فعليًا)

التوصيات:

  1. استخدم RETID كمفتاح Join وتذكر لتمكين فهرس إعادة الإعادة على جدول AX.
  2. تذكر أن تختار على DATAAREAID (يجب تهجئة بهذه الطريقة) كذلك.
  3. تحديث LogStatus إلى 1 قبل الانضمام وإلى 2 بعد الانضمام والتحديث.

نصائح أخرى

إن وضع المكالمة بعد مكالمة Super () في طريقة الجدول insert () أو update () هي المكان الصحيح للقيام بذلك ، ولكن ما لم تقم بإجراء قراءة غير ملتزم ببيان تحديد في الإجراء المخزن ، فلن يرى البيانات حتى بعد ذلك ترتكب المعاملة في الفأس.

هل يمكنك استخدام اتصال ODBC من X ++ للكتابة إلى الجدول الخارجي مباشرةً بدلاً من غير مباشر عبر إجراء مخزن؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top