Miklix

მოთხოვნის გამოყენება SysOperation მონაცემთა კონტრაქტის კლასში Dynamics AX 2012-ში

გამოქვეყნებულია: 16 თებერვალი, 2025, 01:26:07 UTC
ბოლო განახლება: 12 იანვარი, 2026, 08:47:39 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;
}

თუ გსურთ, რომ მოთხოვნა კონტროლერის კლასის მიერ გადაწყდეს, ასევე შეგიძლიათ გამოიყენოთ ცარიელი სტრიქონი. ამ შემთხვევაში, ასევე დაგჭირდებათ რამდენიმე დამხმარე მეთოდის იმპლემენტაცია (რომლებიც, სავარაუდოდ, თქვენივე მოხერხებულობისთვის უნდა იმპლემენტიროთ, როდესაც მოთხოვნაზე წვდომა დაგჭირდებათ):

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-ზეგააზიარეთ Facebook-ზეგააზიარეთ LinkedIn-ზეგააზიარეთ Tumblr-ზეგააზიარეთ X-ზეგააზიარეთ LinkedIn-ზეPinterest-ზე დამაგრება

მიკელ კრისტენსენი

ავტორის შესახებ

მიკელ კრისტენსენი
მაიკლ არის miklix.com-ის შემქმნელი და მფლობელი. მას აქვს 20 წელზე მეტი გამოცდილება, როგორც პროფესიონალი კომპიუტერული პროგრამისტი/პროგრამული უზრუნველყოფის შემქმნელი და ამჟამად მუშაობს სრულ განაკვეთზე დიდ ევროპულ IT კორპორაციაში. როდესაც ბლოგს არ წერს, თავისუფალ დროს ატარებს ინტერესების, ჰობიებისა და აქტივობების უზარმაზარ სპექტრზე, რაც შეიძლება გარკვეულწილად აისახოს ამ ვებსაიტზე გაშუქებულ თემებზე.