My code here is to copy Purchase Agreement line from reference Purchase Agreement to new Purchase Agreement.
static void PSMCopydirecttoagreementline(Args _args)
{
AgreementLineQuantityCommitment agreementLineQuantity;
AgreementLineQuantityCommitment xagreementLineQuantity;
AgreementLineVolumeCommitment agreementlinevolume;
AgreementLineVolumeCommitment xagreementlinevolume;
PurchAgreementHeader purchAgreementHeader = PurchAgreementHeader::findAgreementId("PSM-000020");//Header reference
purchAgreementHeader xpurchagreementheader = PurchAgreementHeader::findAgreementId("PSM-000078");//Header baru
//Jika Komitment Purchase Agreement berdasaran kuantity
if(purchAgreementHeader.DefaultAgreementLineType == CommitmentType::ProductQuantity)
{
info("Quantity based");
//copy line AgrementLIneQuanity menjadi line baru
while select agreementLineQuantity
where agreementLineQuantity.Agreement == purchAgreementHeader.RecId
{
xagreementLineQuantity.clear();
xagreementLineQuantity.data(agreementLineQuantity);
xagreementLineQuantity.Agreement = xpurchagreementheader.RecId;
xagreementLineQuantity.doInsert();
}
}
else
{
//Jika Komitment Purchase Agreement BUKAN berdasaran kuantity
info("value based");
while select agreementlinevolume
where agreementlinevolume.Agreement == purchAgreementHeader.RecId
{
xagreementlinevolume.clear();
xagreementlinevolume.data(agreementlinevolume);
xagreementlinevolume.Agreement = xpurchagreementheader.RecId;
xagreementlinevolume.doInsert();
}
}
}
below is how to setup and create new Purchase Agreement(header) from reference Purchase Agreement(header) through x++
void createDuplicate()
{
ttsBegin;
this.setHeader();
this.createPurchAgreementHeader();
this.setLine();
//this.createAgreementLine();
ttsCommit;
info("done");
}
void setHeader()
{
PurchAgreementId tmpAgreementId;
NumberSeq num;
xpurchagreementheader.clear();
xpurchagreementheader.data(purchAgreementHeader);
xpurchagreementheader.WorkflowStatus_PSN = PurchAgreementWorkflowStatus::NotSubmitted;
xpurchagreementheader.PSMTotalNetAmount = 0;
num = NumberSeq::newGetNum(PurchParameters::numRefPurchAgreementId());
tmpAgreementId = num.num();
info(strFmt("num %1",tmpAgreementId));
if (PurchAgreementHeader::findAgreementId(tmpAgreementId).RecId)
{
num.abort();
checkFailed("@SYS19304");
checkFailed(strfmt("@SYS24176", tmpAgreementId));
throw error("@SYS23020");
}
xpurchagreementheader.PurchNumberSequence = tmpAgreementId;
num.used();
agreementHeaderDefault = AgreementHeaderDefault::findAgreementHeader(purchAgreementHeader.RecId);
if(agreementHeaderDefault.RecId)
{
xgreementHeaderDefault.clear();
xgreementHeaderDefault.data(agreementHeaderDefault);
}
purchAgreementHeaderDefault = PurchAgreementHeaderDefault::findPurchAgreementHeader(purchAgreementHeader.RecId);
if(purchAgreementHeaderDefault.RecId)
{
xpurchAgreementHeaderDefault.clear();
xpurchAgreementHeaderDefault.data(purchAgreementHeaderDefault);
}
void createPurchAgreementHeader()
{
xpurchagreementheader.insert();
xgreementHeaderDefault.AgreementHeader = xpurchagreementheader.RecId;
xgreementHeaderDefault.insert();
xpurchAgreementHeaderDefault.PurchaseAgreementHeader = xpurchagreementheader.RecId;
xpurchAgreementHeaderDefault.insert();
}
note :
u must define/create those 3 method createDuplicate(),setHeader() and createPurchAgreementheader() in the class. for me i called those three methods in run() method.