Dynamics AX 2012'de SysOperation Veri Sözleşmesi Sınıfında Sorgu Kullanma
Yayınlandı: 16 Şubat 2025 01:23:09 UTC
Bu makale, Dynamics AX 2012'de (ve Dynamics 365 for Operations'ta) bir SysOperation veri sözleşmesi sınıfına kullanıcı tarafından yapılandırılabilir ve filtrelenebilir bir sorgu eklemenin ayrıntılarını ele almaktadır
Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012
Bu gönderideki bilgiler Dynamics AX 2012 R3'e dayanmaktadır. Diğer sürümler için geçerli olabilir veya olmayabilir. (Güncelleme: Bunun Dynamics 365 for Operations'ta da çalıştığını doğrulayabilirim)
SysOperation çerçevesinde bir sorguyu nasıl belirleyeceğim ve başlatacağımla ilgili ayrıntıları her zaman unutuyorum. Sanırım yaptığım toplu işlerin çoğu kullanıcı tarafından yapılandırılabilir sorgulara dayanmıyor, ancak ara sıra böyle bir toplu iş yapmam gerekiyor, bu yüzden bu gönderi aynı zamanda kendi referansım için.
İlk olarak, veri sözleşmesi sınıfında, sorgu bir dizgede paketlenmiş olarak saklanacaktır. Parm yöntemi, aşağıdaki gibi AifQueryTypeAttribute niteliğiyle dekore edilmelidir (bu örnekte SalesUpdate sorgusunu kullandım, ancak bunu herhangi bir AOT sorgusuyla değiştirebilirsiniz):
DataMemberAttribute,
AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
;
packedQuery = _packedQuery;
return packedQuery;
}
Sorgunun denetleyici sınıfı tarafından kararlaştırılmasını istiyorsanız, boş bir dize de kullanabilirsiniz. Bu durumda, birkaç yardımcı yöntemi de uygulamanız gerekir (sorguya erişmeniz gerektiğinde kendi rahatlığınız için muhtemelen zaten uygulamanız gerekir):
{
;
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
;
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
Sorguyu başlatmanız gerekiyorsa (örneğin, aralıklar eklemek istiyorsanız), bir initQuery yöntemi uygulamalısınız:
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
Bu metodu controller sınıfından çağırdığınızdan emin olmanız gerekiyor.