X++ code to write SysOperation framework using AOT Queries
Data Contract Class :
[DataContractAttribute]
class ARF_DispatchTrackOrderDataContract extends ARF_DispatchTrackQueryDataContract
{
[DataMemberAttribute,
AifQueryTypeAttribute('_encodedQuery',
queryStr(ARF_SalesTableQuery)) // simple query name
]
public str parmEncodedQuery(str _encodedQuery = encodedQuery)
{
return super(_encodedQuery);
}
}
Base data contract
class ARF_DispatchTrackQueryDataContract
{
str encodedQuery;
QueryName queryName;
public Query createQuery()
{
Query query = new Query(this.queryName());
return Query;
}
public str parmEncodedQuery(str _encodedQuery = encodedQuery)
{
encodedQuery = _encodedQuery;
return encodedQuery;
}
public Query Query(Query _query = null)
{
if (prmisDefault(_query))
{
return
ARF_DispatchTrackQueryDataContract::DataContractQuery(this);
}
return ARF_DispatchTrackQueryDataContract::DataContractQuery(
this,
_query);
}
public final str queryName()
{
if (queryName == '')
{
queryName =
ARF_DispatchTrackQueryDataContract::DataContractQueryName(this);
}
return queryName;
}
public static Query DataContractQuery(
ARF_DispatchTrackQueryDataContract
_ARF_DispatchTrackQueryDataContract,
Query _query = null)
{
if (prmisDefault(_query) == false)
{
if (_query != null)
{
_ARF_DispatchTrackQueryDataContract.parmEncodedQuery(
SysOperationHelper::base64Encode(_query.pack()));
}
else
{
_ARF_DispatchTrackQueryDataContract.parmEncodedQuery('');
}
}
if (_ARF_DispatchTrackQueryDataContract.parmEncodedQuery()
== '')
{
_ARF_DispatchTrackQueryDataContract.parmEncodedQuery(
SysOperationHelper::base64Encode(
_ARF_DispatchTrackQueryDataContract.createQuery().pack()));
}
return new Query(SysOperationHelper::base64Decode(
_ARF_DispatchTrackQueryDataContract.parmEncodedQuery()));
}
public static queryName DataContractQueryName(
ARF_DispatchTrackQueryDataContract _dataContract)
{
DictMethod dictMethod = new DictMethod(
UtilElementType::ClassInstanceMethod,
classIdGet(_dataContract),
methodStr(ARF_DispatchTrackQueryDataContract,
parmEncodedQuery));
AifQueryTypeAttribute aifQueryTypeAttribute =
dictMethod.getAttribute(
classStr(AifQueryTypeAttribute));
queryName queryName = '';
if (aifQueryTypeAttribute != null)
{
queryName = aifQueryTypeAttribute.queryName();
}
return queryName;
}
}
Service Class :
class ARF_DispatchTrackOrderService
{
public void GetSalesDetails(
ARF_DispatchTrackOrderDataContract _dataContract)
{
QueryRun queryRun = new QueryRun(_dataContract.Query());
ARFDispatchTrackOrders dispatchTrackOrders;
while (queryRun.next())
{
SalesTable salesTable = queryRun.get(tableNum(SalesTable));
ttsbegin;
dispatchTrackOrders.ARFSalesId = salesTable.SalesId;
dispatchTrackOrders.isARFScheduled = salesTable.ARF_Scheduled;
dispatchTrackOrders.Processed = false;
dispatchTrackOrders.insert();
ttscommit;
}
}
}
Controller Class :
class ARF_DispatchTrackOrderController extends SysOperationServiceController
{
protected void new()
{
super(classStr(ARF_DispatchTrackOrderService), methodStr(ARF_DispatchTrackOrderService, GetSalesDetails), SysOperationExecutionMode::Synchronous);
}
/// <summary>
/// To construct LocationRecordsController class
/// </summary>
public static ARF_DispatchTrackOrderController construct(SysOperationExecutionMode _executionMode = SysOperationExecutionMode::Synchronous)
{
ARF_DispatchTrackOrderController controller;
controller = new ARF_DispatchTrackOrderController();
controller.parmExecutionMode(_executionMode);
return controller;
}
/// <summary>
/// Main method of LocationRecordsController class
/// </summary>
public static void main(Args _args)
{
ARF_DispatchTrackOrderController controller;
controller = ARF_DispatchTrackOrderController::construct();
controller.parmArgs(_args);
controller.startOperation();
}
/// <summary>
/// To set caption of a batch job
/// </summary>
public ClassDescription defaultCaption()
{
return "Location Records";
}
}
Comments
Post a Comment