ડાયનેમિક્સ એએક્સ 2012 માં SysOperation Data કોન્ટ્રાક્ટ ક્લાસમાં ક્વેરીનો ઉપયોગ કરીને
પ્રકાશિત: 16 ફેબ્રુઆરી, 2025 એ 01:25:40 AM UTC વાગ્યે
આ લેખ ડાયનેમિક્સ AX 2012 (અને ડાયનેમિક્સ 365 ફોર ઓપરેશન્સ) માં SysOperation ડેટા કોન્ટ્રાક્ટ ક્લાસમાં વપરાશકર્તા-રૂપરેખાંકન અને ફિલ્ટર કરી શકાય તેવા પ્રશ્નને કેવી રીતે ઉમેરવો તેની વિગતો પર આધારિત છે.
Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012
આ પોસ્ટમાંની માહિતી ડાયનેમિક્સ એએક્સ ૨૦૧૨ આર ૩ પર આધારિત છે. તે અન્ય સંસ્કરણો માટે માન્ય હોઈ શકે છે અથવા ન પણ હોઈ શકે. (અપડેટ: હું પુષ્ટિ કરી શકું છું કે આ કામગીરી માટે ડાયનેમિક્સ 365 પર પણ કામ કરે છે)
હું હંમેશાં સિસ ઓપરેશન ફ્રેમવર્કમાં ક્વેરીને કેવી રીતે સ્પષ્ટ અને પ્રારંભ કરવો તે અંગેની વિગતો ભૂલી ગયો હોય તેવું લાગે છે. હું માનું છું કે હું જે બેચ જોબ કરું છું તેમાંની મોટાભાગની યુઝર-કોન્ફિગરેબલ ક્વેરીઝ પર આધારિત નથી, પરંતુ અવારનવાર મારે આવી બેચ જોબ કરવાની જરૂર પડે છે, તેથી આ પોસ્ટ પણ મારા પોતાના સંદર્ભ માટે છે.
પ્રથમ, ડેટા કોન્ટ્રાક્ટ ક્લાસમાં, ક્વેરીને શબ્દમાળામાં પેક કરવામાં આવશે. તેની 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);
}
તમારે નિયંત્રક વર્ગમાંથી આ પદ્ધતિને કોલ કરવાની ખાતરી કરવાની જરૂર છે.