Miklix

استفاده از یک کوئری در کلاس قرارداد داده 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;
}

اگر می خواهید به جای آن پرس و جو توسط کلاس کنترلر تصمیم گیری شود، می توانید از یک رشته خالی نیز استفاده کنید. در این صورت، شما همچنین باید چند روش کمکی را پیاده سازی کنید (که احتمالاً باید به هر حال برای راحتی خود در زمانی که نیاز به دسترسی به پرس و جو دارید، آنها را پیاده سازی کنید):

public Query getQuery()
{
    ;

    return new Query(SysOperationHelper::base64Decode(packedQuery));
}

public void setQuery(Query _query)
{
    ;

    packedQuery = SysOperationHelper::base64Encode(_query.pack());
}

اگر نیاز به مقداردهی اولیه پرس و جو دارید (مثلاً محدوده ها را اضافه کنید)، باید یک متد initQuery را پیاده سازی کنید:

public void initQuery()
{
    Query queryLocal = this.getQuery();
    ;

    // add ranges, etc...

    this.setQuery(queryLocal);
}

باید مطمئن شوید که این متد را از کلاس کنترلر فراخوانی کرده اید.

در Bluesky به اشتراک بگذاریددر فیسبوک به اشتراک بگذاریددر لینکدین به اشتراک بگذاریددر Tumblr به اشتراک بگذاریددر X به اشتراک بگذاریددر لینکدین به اشتراک بگذاریدپین در پینترست

میکل بنگ کریستنسن

درباره نویسنده

میکل بنگ کریستنسن
مایکل خالق و صاحب miklix.com است. او بیش از 20 سال تجربه به عنوان یک برنامه نویس حرفه ای کامپیوتر / توسعه دهنده نرم افزار دارد و در حال حاضر به طور تمام وقت برای یک شرکت بزرگ فناوری اطلاعات اروپایی مشغول به کار است. هنگامی که وبلاگ نویسی نمی کند، اوقات فراغت خود را صرف مجموعه وسیعی از علایق، سرگرمی ها و فعالیت ها می کند، که ممکن است تا حدی در موضوعات مختلف پوشش داده شده در این وب سایت منعکس شود.