Miklix

Dynamics AX 2012'de SysOperation Veri Sözleşmesi Sınıfında Sorgu Kullanma

Yayınlandı: 16 Şubat 2025 01:23:09 UTC
Son güncelleme: 12 Ocak 2026 08:47:21 UTC

Bu makale, Dynamics AX 2012'de (ve Dynamics 365 for Operations'da) 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.


Bu sayfa, mümkün olduğunca çok kişi tarafından erişilebilir olması amacıyla İngilizce'den makine çevirisiyle çevrilmiştir. Ne yazık ki, makine çevirisi henüz mükemmelleştirilmiş bir teknoloji değildir, bu nedenle hatalar meydana gelebilir. Tercih ederseniz, orijinal İngilizce versiyonu buradan görüntüleyebilirsiniz:

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 belirteceğimi ve başlatacağımı hep unutuyorum. Sanırım oluşturduğum toplu işlerin çoğu kullanıcı tarafından yapılandırılabilir sorgulara dayanmıyor, ancak arada sırada böyle bir toplu işe ihtiyacım oluyor, bu yüzden bu yazı kendi referansım için de.

Öncelikle, veri sözleşmesi sınıfında, sorgu bir dize içinde paketlenerek saklanacaktır. parm metodu, aşağıdaki gibi AifQueryTypeAttribute özniteliğiyle süslenmelidir (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 belirlenmesini istiyorsanız, boş bir dize de kullanabilirsiniz. Bu durumda, birkaç yardımcı yöntem de uygulamanız gerekecektir (ki bu yöntemleri, sorguya erişmeniz gerektiğinde kendi kolaylığınız için zaten uygulamanız muhtemelen daha doğru olacaktır):

public Query getQuery()
{
    ;

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

public void setQuery(Query _query)
{
    ;

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

Sorguyu başlatmanız gerekiyorsa (örneğin, aralık eklemek için), bir initQuery yöntemi uygulamanız gerekir:

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

    // add ranges, etc...

    this.setQuery(queryLocal);
}

Bu metodu mutlaka denetleyici sınıfından çağırmanız gerekiyor.

Daha Fazla Okuma

Bu yazıyı beğendiyseniz, şu öneriler de ilginizi çekebilir:


Bluesky'de paylaşFacebook'ta paylaşLinkedIn'de paylaşTumblr'da paylaşX'te paylaşLinkedIn'de paylaşPinterest'e Pinleyin

Mikkel Christensen

Yazar Hakkında

Mikkel Christensen
Mikkel miklix.com'un yaratıcısı ve sahibidir. Profesyonel bilgisayar programcısı/yazılım geliştiricisi olarak 20 yılı aşkın deneyime sahiptir ve şu anda büyük bir Avrupa BT şirketinde tam zamanlı olarak çalışmaktadır. Blog yazmadığı zamanlarda, boş zamanlarını çok çeşitli ilgi alanları, hobiler ve aktivitelerle geçirmektedir ve bu da bir dereceye kadar bu web sitesinde kapsanan konuların çeşitliliğine yansıyabilir.