Contract class:
[
DataContractAttribute,
SysOperationContractProcessingAttribute(classstr(mfiInventWHSSyncUiBuilder))
]
class mfiInventWHSSyncContract implements SysOperationValidatable
{
str packedQuery;
NoYesId
syncWarehouse;
List
wareHouse;
}
public Query getQuery()
{
return
new
Query(SysOperationHelper::base64Decode(packedQuery));
}
[
DataMemberAttribute,
AifQueryTypeAttribute('_packedQuery', queryStr(mfiInventOnHand))
]
Public str
parmQuery(str _packedQuery = packedQuery )
{
packedQuery = _packedQuery;
return
packedQuery;
}
[
DataMemberAttribute,
SysOperationLabelAttribute("@MFI6182")
]
public NoYesId parmSyncWarehouse(NoYesid _syncWarehouse = syncWarehouse)
{
syncWarehouse = _syncWarehouse;
return
syncWarehouse;
}
[
DataMemberAttribute,
SysOperationLabelAttribute("@SYS6437"),
AifCollectionTypeAttribute("@MFI6178", Types::String)
]
public List parmWareHouse(List _wareHouse = wareHouse)
{
wareHouse = _wareHouse;
return
wareHouse;
}
public void
setQuery(Query _query)
{
packedQuery =
SysOperationHelper::base64Encode(_query.pack());
}
/// <summary>
/// Validates the SSRS
report parameters.
/// </summary>
/// <returns>
/// true if successful;
otherwise, false.
/// </returns>
public boolean
validate()
{
boolean
ret = true;
List wareHouseList;
ListIterator wareHouseListIterator;
InventLocation inventLocation;
if
(syncWarehouse == NoYes::No && wareHouse !=null)
{
ret = checkFailed("@MFI6179");
}
wareHouseListIterator = new
ListIterator(this.parmWareHouse());
wareHouseList = this.parmWareHouse();
while(wareHouseListIterator.more())
{
select
InventLocationId,mfiSyncToD365 from
inventLocation
where
inventLocation.InventLocationId == wareHouseListIterator.value();
if
(inventLocation.mfiSyncToD365 == NoYes::No)
{
ret = checkFailed(strFmt("@MFI6181",inventLocation.InventLocationId));
}
wareHouseListIterator.next();
}
return
ret;
}
Service class:
class mfiInventWHSSyncService extends SysOperationServiceBase
{
}
[SysEntryPointAttribute]
Public void
processOperation(mfiInventWHSSyncContract
_contract)
{
MFIInventCountProcessData inventCount;
InventLocation inventLocation;
NoYesId synWareHouse;
List wareHouseList;
ListIterator wareHouseListIterator;
AxdSendContext axdSendContext = AxdSendContext::construct();
AifEntityKey aifEntityKey = AifEntityKey::construct();
AifConstraintList aifConstraintList = new
AifConstraintList();
AifConstraint aifConstraint = new
AifConstraint();
AifEndpointList endpointList;
AifActionId actionId;
Query query,aifQuery;
QueryBuildDataSource qbdsInventWHS,qbdsInventCount;
QueryRun queryRun;
wareHouseListIterator = new
ListIterator(_contract.parmWareHouse());
synWareHouse = _contract.parmSyncWarehouse();
wareHouseList = _contract.parmWareHouse();
query
= new
Query(_contract.getQuery());
qbdsInventWHS = query.dataSourceTable(tableNum(MFIInventCountProcessData));
if
(wareHouseList != null &&
synWareHouse ==NoYes::No)
{
while(wareHouseListIterator.more())
{
qbdsInventWHS.addRange(fieldNum(MFIInventCountProcessData,InventLocationId)).value(wareHouseListIterator.value());
wareHouseListIterator.next();
}
}
if
(synWareHouse == NoYes::Yes)
{
while
select RecId,InventLocationId from inventLocation
where
inventLocation.mfiSyncToD365 == NoYes::Yes
{
qbdsInventWHS.addRange(fieldNum(MFIInventCountProcessData,InventLocationId)).value(queryValue(inventLocation.InventLocationId));
}
}
queryRun = new
QueryRun(query);
while(queryRun.next())
{
inventCount = queryRun.get(tableNum(MFIInventCountProcessData));
inventLocation =
InventLocation::find(inventCount.InventLocationId);
if
(inventLocation.mfiSyncToD365 == NoYes::Yes)
{
aifQuery = new Query(queryStr(mfiInventOnHand));
qbdsInventCount
=query.dataSourceTable(TableNum(MFIInventCountProcessData));
qbdsInventCount.addRange(FieldNum(MFIInventCountProcessData,RecId)).value(queryvalue(inventCount.RecId));
actionId =
AifSendService::getDefaultSendAction(classnum(mfiInventOnHandService),
AifSendActionType::SendByQuery);
aifConstraint.parmType(AifConstraintType::NoConstraint);
aifConstraintList.addConstraint(aifConstraint) ;
endpointList =
AifSendService::getEligibleEndpoints(actionId, aifConstraintList);
AifSendService::SubmitFromQuery(actionId, endpointList, query,
AifSendMode::Async);
}
}
}
UI Builder class:
class mfiInventWHSSyncUiBuilder extends SysOperationAutomaticUIBuilder
{
DialogField dialogWareHouse;
DialogField wareHouseCheckBox;
}
public void
build()
{
mfiInventWHSSyncContract contract;
DialogGroup dlgGrp;
Dialog
dlg = this.dialog();
contract = this.dataContractObject() as mfiInventWHSSyncContract;
dlgGrp = dlg.addGroup('');
dlgGrp.columns(1);
dlgGrp.addFieldname(identifierStr(wareHouseCheckBox));
wareHouseCheckBox = this.addDialogField(methodStr(mfiInventWHSSyncContract,parmSyncWarehouse),contract);
dlgGrp = dlg.addGroup('Inventory Dimensions');
dlgGrp.columns(1);
dlgGrp.addFieldname(identifierStr(dialogWareHouse));
dialogWareHouse = this.addDialogField(methodStr(mfiInventWHSSyncContract,parmWareHouse),contract);
}
public boolean
modifyChecBox(FormCheckBoxControl _checkBoxControl)
{
dialogWareHouse.enabled(!_checkBoxControl.checked());
return
true;
}
public void
postBuild()
{
mfiInventWHSSyncContract contract;
super();
dialogWareHouse.enabled(any2enum(!wareHouseCheckBox.value()));
contract = this.dataContractObject() as mfiInventWHSSyncContract;
wareHouseCheckBox =
this.bindInfo().getDialogField(contract,methodStr(mfiInventWHSSyncContract,parmSyncWarehouse));
dialogWareHouse = this.bindInfo().getDialogField(contract,methodStr(mfiInventWHSSyncContract,parmWareHouse));
dialogWareHouse.registerOverrideMethod(methodStr(FormStringControl, lookup),methodStr(mfiInventWHSSyncUiBuilder,wareHouseLookup),this);
wareHouseCheckBox.registerOverrideMethod(methodstr(FormCheckBoxControl, modified), methodstr(mfiInventWHSSyncUiBuilder,modifyChecBox),
this);
}
private void
wareHouseLookup(FormStringControl _control)
{
Query
query;
container conWareHouse;
query = new
Query(queryStr(InventLocationSRS));
SysLookupMultiSelectGrid::lookup(query,_control,_control,conWareHouse);
}
Controller class:
[SysOperationJournaledParametersAttribute(true)]
class mfiInventWHSSyncController extends SysOperationServiceController
{
}
public ClassDescription caption()
{
return
"@MFI6176";
}
public void
new()
{
super(classStr(mfiInventWHSSyncService),methodStr(mfiInventWHSSyncService,processOperation),SysOperationExecutionMode::ReliableAsynchronous);
this.parmDialogCaption("@MFI6177");
}
// Here goes a description of the class
static ClassDescription description()
{
return
"D365 Inventory Sync Job";
}
public static
void main(Args _args)
{
mfiInventWHSSyncController controller;
controller = new
mfiInventWHSSyncController();
controller.startOperation();
}
No comments:
Post a Comment