שימוש בשאילתה במחלקת חוזה נתונים של SysOperation ב- Dynamics AX 2012
פורסם: 16 בפברואר 2025 בשעה 1:24:38 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);
}
עליך להקפיד לקרוא לשיטה זו ממחלקת הבקר.