Miklix

استفاده از یک کوئری در کلاس قرارداد داده SysOperation در Dynamics AX 2012

منتشر شده: ۱۶ فوریهٔ ۲۰۲۵ ساعت ۱:۲۴:۳۶ (UTC)
آخرین به روز رسانی: ۱۲ ژانویهٔ ۲۰۲۶ ساعت ۸:۴۷:۲۷ (UTC)

این مقاله به جزئیات نحوه اضافه کردن یک کوئری قابل تنظیم توسط کاربر و قابل فیلتر کردن به کلاس قرارداد داده SysOperation در Dynamics AX 2012 (و Dynamics 365 برای عملیات) می‌پردازد.


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

Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012

اطلاعات موجود در این پست بر اساس Dynamics AX 2012 R3 است. ممکن است برای نسخه‌های دیگر معتبر باشد یا نباشد. (به‌روزرسانی: می‌توانم تأیید کنم که این مورد در Dynamics 365 for Operations نیز کار می‌کند)

به نظر می‌رسد همیشه جزئیات مربوط به نحوه تعیین و مقداردهی اولیه یک پرس‌وجو در چارچوب SysOperation را فراموش می‌کنم. حدس می‌زنم بیشتر کارهای دسته‌ای که انجام داده‌ام مبتنی بر پرس‌وجوهای قابل تنظیم توسط کاربر نیستند، اما هر از گاهی نیاز به انجام چنین کار دسته‌ای دارم، بنابراین این پست برای مرجع خودم نیز هست.

ابتدا، در کلاس data contract، کوئری به صورت بسته‌بندی شده در یک رشته ذخیره می‌شود. متد 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 سال تجربه به عنوان یک برنامه نویس حرفه ای کامپیوتر / توسعه دهنده نرم افزار دارد و در حال حاضر به طور تمام وقت برای یک شرکت بزرگ فناوری اطلاعات اروپایی مشغول به کار است. هنگامی که وبلاگ نویسی نمی کند، اوقات فراغت خود را صرف مجموعه وسیعی از علایق، سرگرمی ها و فعالیت ها می کند، که ممکن است تا حدی در موضوعات مختلف پوشش داده شده در این وب سایت منعکس شود.