استخدام استعلام في فئة عقد بيانات SysOperation في Dynamics AX 2012
نُشرت: ١٦ فبراير ٢٠٢٥ م في ١:٢١:٣٦ ص UTC
تتناول هذه المقالة تفاصيل كيفية إضافة استعلام قابل للتكوين والتصفية من قبل المستخدم إلى فئة عقد بيانات SysOperation في Dynamics AX 2012 (وDynamics 365 for Operations)
Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012
تستند المعلومات الواردة في هذا المنشور إلى Dynamics AX 2012 R3. وقد تكون صالحة أو غير صالحة للإصدارات الأخرى. (تحديث: يمكنني تأكيد أن هذا يعمل أيضًا على Dynamics 365 for Operations)
يبدو أنني أنسى دائمًا التفاصيل المتعلقة بكيفية تحديد وتفعيل استعلام في إطار عمل SysOperation. أعتقد أن معظم المهام المجمعة التي أقوم بإنشائها لا تعتمد على استعلامات قابلة للتكوين من قبل المستخدم، ولكن من حين لآخر أحتاج إلى إنشاء مثل هذه المهمة المجمعة، لذا فإن هذه المشاركة هي أيضًا للرجوع إليها شخصيًا.
أولاً، في فئة عقد البيانات، سيتم تخزين الاستعلام مغلفًا في سلسلة. يجب تزيين طريقة parm الخاصة به بسمة AifQueryTypeAttribute، على النحو التالي (في هذا المثال، استخدمت استعلام SalesUpdate، ولكن يمكنك استبداله بأي استعلام AOT):
DataMemberAttribute,
AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
;
packedQuery = _packedQuery;
return packedQuery;
}
إذا كنت تريد أن يتم تحديد الاستعلام بواسطة فئة وحدة التحكم بدلاً من ذلك، فيمكنك أيضًا استخدام سلسلة فارغة. في هذه الحالة، تحتاج أيضًا إلى تنفيذ طريقتين مساعدتين (ربما يجب عليك تنفيذهما على أي حال لراحتك عندما تحتاج إلى الوصول إلى الاستعلام):
{
;
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
;
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
إذا كنت بحاجة إلى تهيئة الاستعلام (على سبيل المثال، إضافة نطاقات)، فيجب عليك تنفيذ طريقة initQuery:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
يجب عليك التأكد من استدعاء هذه الطريقة من فئة وحدة التحكم.