D365F&O - X++ - Add query in batch job for filtering records.
Add the following code in Contract class.
/// <summary>
/// Contract class for <c>ItemExportBatch</c> class
/// </summary>
[DataContractAttribute]
class ItemExportContract
{
ConfigId ConfigId;
str packedQuery;
/// <summary>
/// Config Id parameter
/// </summary>
/// <param name = "_ConfigId">ConfigId</param>
/// <returns>Config Id</returns>
[DataMember,
SysOperationLabel(literalStr("@SYS2653"))]
public ConfigId parmConfigId(ConfigId _ConfigId = ConfigId)
{
ConfigId = _ConfigId;
return ConfigId;
}
/// <summary>
/// query parameter
/// </summary>
/// <param name = "_packedQuery">packedQuery</param>
/// <returns>str</returns>
[DataMember,AifQueryTypeAttribute('_packedQuery',queryStr(ItemExport))]
public str parmQuery(str _packedQuery = packedQuery)
{
packedQuery = _packedQuery;
return packedQuery;
}
/// <summary>
/// get query value
/// </summary>
/// <returns>Query</returns>
public Query getQuery()
{
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
/// <summary>
/// set query value
/// </summary>
/// <param name = "_query">query</param>
public void setQuery(Query _query)
{
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
}
2- Add the following code in your Controller class.
/// <summary>
/// Controller class for <c>ItemExportBatch</c> class
/// </summary>
class ItemExportController extends SysOperationServiceController
{
/// <summary>
/// Default class contsructor
/// </summary>
protected void new()
{
super(classStr(ItemExportBatch),
methodStr(ItemExportBatch, process),
SysOperationExecutionMode::Synchronous);
}
/// <summary>
/// Contruct method
/// </summary>
/// <param name = "_executionMode"> execution mode of batch job class</param>
/// <returns><c>ItemExportController</c> class instance</returns>
public static ItemExportController construct(SysOperationExecutionMode
_executionMode = SysOperationExecutionMode::Synchronous)
{
ItemExportController controller;
controller = new ItemExportController();
controller.parmExecutionMode(_executionMode);
return controller;
}
/// <summary>
/// A class entry point
/// </summary>
/// <param name = "_args">An instance of <c>Args</c> which
/// contains calling arguments</param>
public static void main(Args _args)
{
str caption;
ItemExportController controller;
controller = ItemExportController::construct();
ItemExportContract contract = controller.getDataContractObject();
contract.parmitemExportSystem(_args.parmEnum());
switch (_args.parmEnum())
{
case MJItemExportSystem::GSI :
caption = literalStr("@SYS3192");
break;
case MJItemExportSystem::Demandware :
default :
caption = literalStr("@SYS3193");
break;
}
controller.parmDialogCaption(caption);
controller.parmArgs(_args);
controller.startOperation();
}
}
3- Add the following code in your batch service class.
class ItemExportBatch extends SysOperationServiceBase
{
/// Entry point for <c>ItemExportBatch</c> class
/// </summary>
/// <param name = "_contract">contract class parameter</param>
public void process(ItemExportContract _contract)
{
queryRun = new queryRun(_contract.getQuery());
ConfigId = _contract.parmConfigId();
if (ConfigId)
{
// your logic here
}
}
}
Comments
Post a Comment