استفاده از یک کوئری در کلاس قرارداد داده 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);
}
باید مطمئن شوید که این متد را از کلاس کنترلر فراخوانی کرده اید.