Hi Everyone.
Currently I encounter error while. executing my custom button name “Create TP Number”.

and here my sample code.
public static void CreateTPNumber(PMQuoteMaint pMQuoteMaint)
{
using (var ts = new PXTransactionScope())
{
PXResultset<CROpportunityProducts> pXResultsetCROpportunityProducts = pMQuoteMaint.Products.Select();
PXResultset<PMQuoteTask> pXResultsetPMQuoteTask = pMQuoteMaint.Tasks.Select();
List<CROpportunityProducts> cROpportunityProductsDuplicate = pXResultsetCROpportunityProducts
.RowCast<CROpportunityProducts>()
.GroupBy(x => new { x.InventoryID, x.TaskCD }).Where(g => g.Count() > 1)
.SelectMany(g => g)
.ToList();
if (cROpportunityProductsDuplicate.Count() > 0)
{
foreach (CROpportunityProducts pMQuoteTask in cROpportunityProductsDuplicate)
{
InventoryItem pXResultInventoryItem = SelectFrom<InventoryItem>.Where<InventoryItem.inventoryID
.IsEqual<@P.AsInt>>.View.Select(pMQuoteMaint, pMQuoteTask.InventoryID).FirstOrDefault();
throw new PXException(Messages.TravelPackageErrorMessageDuplicate(pXResultInventoryItem.InventoryCD));
}
}
if (pXResultsetCROpportunityProducts.Count <= 0 && pXResultsetPMQuoteTask.Count <= 0) return;
foreach (CROpportunityProducts cROpportunityProduct in pXResultsetCROpportunityProducts)
{
CROpportunityProductsExtension cROpportunityProductsExtensions =
PXCache<CROpportunityProducts>.GetExtension<CROpportunityProductsExtension>(cROpportunityProduct);
if (cROpportunityProductsExtensions == null) return;
string status = cROpportunityProductsExtensions.UsrStatus ?? String.Empty;
if (status == Messages.openStatus
&& cROpportunityProduct.TaskCD == null)
{
InventoryItem inventoryItem = SelectFrom<InventoryItem>.Where<InventoryItem.inventoryID
.IsEqual<@P.AsInt>>.View.Select(pMQuoteMaint, cROpportunityProduct.InventoryID).FirstOrDefault();
if (inventoryItem == null) return;
for (int i = 0; i < cROpportunityProduct.Qty; i++)
{
PMQuoteTask pMQuoteTaskNew = new PMQuoteTask();
pMQuoteTaskNew.Description = inventoryItem.InventoryCD;
pMQuoteMaint.Tasks.Update(pMQuoteTaskNew);
pMQuoteMaint.Actions.PressSave();
}
pMQuoteMaint.Products.Delete(cROpportunityProduct);
foreach (PMQuoteTask pMQuoteTask in pMQuoteMaint.Tasks.Select().RowCast<PMQuoteTask>()
.Where(x => x.Description == inventoryItem.InventoryCD))
{
bool isTaskCD = pXResultsetCROpportunityProducts
.RowCast<CROpportunityProducts>().Where(x => x.TaskCD == pMQuoteTask.TaskCD).Any();
if (!isTaskCD)
{
CROpportunityProducts cROpportunityProductsNew = new CROpportunityProducts();
CROpportunityProductsExtension cROpportunityProductsExtension = PXCache<CROpportunityProducts>
.GetExtension<CROpportunityProductsExtension>(cROpportunityProduct);
CROpportunityProductsExtension cROpportunityProductsExtensionNew = PXCache<CROpportunityProducts>
.GetExtension<CROpportunityProductsExtension>(cROpportunityProductsNew);
cROpportunityProductsNew.InventoryID = inventoryItem.InventoryID;
cROpportunityProductsNew.Qty = 1;
cROpportunityProductsExtensionNew.UsrSuggestedMinimumBid = cROpportunityProductsExtension.UsrSuggestedMinimumBid;
cROpportunityProductsNew.TaskCD = pMQuoteTask.TaskCD;
pMQuoteMaint.Products.Update(cROpportunityProductsNew);
}
}
}
}
pMQuoteMaint.Actions.PressSave();
ts.Complete();
}
}I hope you can help me. Thanks.