AX 4 – Copy BOM item in X++

I wrote some X++ code to clone BOM items in AX 4, here I prefer using default AX classes and methods rather than hijacking tables directly.
static void BOMCopy(Args _args)
{
InventTable        inventTable;
BOMVersion         bomVersion_from;
BOMVersion         bomVersion_to;
BOMTable             bomTable;
NumberSeq           numberSeq;
BOMRouteCopyJob       bomCopyJob;
BOM                                  bom;
BOMVersionApprove  bomVersionApprove;
;
select * from inventTable where inventTable.ItemId == ‘1234’;
select forupdate * from bomVersion_from
where bomVersion_from.ItemId  == inventTable.ItemId;
//BOMTable
numberSeq                   = BOMTable::numberSeq();
bomTable.BOMId       = numberSeq.num();
bomTable.ItemGroupId = inventTable.ItemGroupId;
bomTable.Name               = strfmt(“%1 COPY.”, inventTable.ItemId);
if (! bomTable.validateWrite())    throw error(“@SYS23020″);
bomTable.insert();
//Copy BOM using Job.
//check box Optional follows default AX behavior, e.g. if a line has optional checked,
//and it has old expire date, AX won’t copy it by default.
bomCopyJob = BOMRouteCopyJob::newFromToBOMId(bomVersion_from.BOMId,bomTable.BOMId);
bomCopyJob.parmFromType(BaseDataProd::BaseData);
bomCopyJob.parmFromItemId(inventTable.ItemId);
bomCopyJob.parmFromBOMId(bomVersion_from.BOMId);
bomCopyJob.parmToType(BaseDataProd::BaseData);
bomCopyJob.parmCopyRoute(NoYes::No);
bomCopyJob.parmMethod(BOMCopyMethod::AddTo);
bomCopyJob.run();
//BOMVersion
bomVersion_to.BOMId =  bomTable.BOMId;
if (BOMParameters::find().MandatoryQtyAndDate)
{
bomVersion_to.FromDate = systemdateget();
bomVersion_to.ToDate   = systemdateget();
}
bomVersion_to.Name       = BOMTable::find(bomVersion_to.BOMId).Name;
bomVersion_to.ItemId     = bomVersion_from.ItemId;
bomVersion_to.ApprovedBy = bomVersion_from.ApprovedBy;
bomVersion_to.insert();
//Unlock and remove approval from bomVersion_from
ttsbegin;
{
bomVersion_from.Locked      = NoYes::No;
bomVersion_from.LockedBy    = ”;
bomVersion_from.Approved    = false;
bomVersion_from.ApprovedBy  = ”;
bomVersion_from.Active      = false;
bomVersion_from.update();
}
ttscommit;
//Approve bomVersion_to
bomVersionApprove = BOMRouteVersionApprove::newBOMVersion(bomVersion_to);
bomVersionApprove.parmEmplId(bomVersion_to.ApprovedBy);
bomVersionApprove.run();
info(“done”);
}

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.