Dynamics AX 2012 дээрх SysOperation өгөгдлийн гэрээний ангид асуулга ашиглах
Нийтэлсэн: 2025 оны гуравдугаар сарын 19 21:33:32 (UTC)
Энэ нийтлэл нь Dynamics AX 2012 (болон Dynamics 365 for Operations) дээрх SysOperation өгөгдлийн гэрээний ангид хэрэглэгчийн тохируулж, шүүж болох асуулгыг хэрхэн нэмэх талаар дэлгэрэнгүй авч үзэх болно.
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);
}
Та энэ аргыг контроллер ангиас дуудсан гэдгээ шалгах хэрэгтэй.