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;
;
{
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;
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();
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);
//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();
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();
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;
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();
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.