You need to sign in to do that
Don't have an account?

Avoid Duplicates
Hi,
i want to develop web service class which is take opportunity id and List of products as input.
from that list of products i have to create opportunity products.
for this requirement i have to take care the following actions
a)avoid duplicates of products(i have to check the incomming products with existing products based on some fields like Productid__c,if it is exist its updated if it is not dere insert and finally add to opportunity products)
b)used to Standard pricebook id
c)create pricebook entry
d)OpportunityLineItem
please suggest me how i achieve this functionality......
global class BB_productservicenew{
// A class to accept an array of input records (e.g. product/amount combinations)
global class productInfo{
webservice String productName;
webservice String productCode;
webservice Double UnitPrice;
webservice Double Quantity;
}
// A class to send back as an output to PHP
global class myOutputs{
webservice String errorMessage;
webservice Boolean success;
webservice List<productInfo> inputs;
webservice Id OpportunityId;
}
webservice static myOutputs initiateService(Id OppId, List<productInfo> inputs)
{
List<String>pidlist=new List<String>();
for(BB_productservicenew.productInfo ps:inputs)
{
pidlist.add(ps.productCode);
}
List<Product2>plist2=[select id,name,productCode,ProductId__c from Product2];
List<Product2> plist = new List<Product2>();
for(Product2 pd:plist2){
for(Integer i=0;i<inputs.size();i++){
if(pd.ProductId__c==inputs[i].productCode){
Pd.Name=inputs[i].productName;
pd.ProductId__c=inputs[i].productCode;
pd.Quantity__c=inputs[i].Quantity;
pd.UnitPrice__c=inputs[i].UnitPrice;
pd.IsActive=true;
plist.add(pd);
}
}
}
if(plist.size()>0){
update plist;
Pricebook2 pbid=[select id from Pricebook2 where IsStandard = true limit 1];
List<PricebookEntry> pentrylist=new List<PricebookEntry>();
List<PricebookEntry>pentrylist2=[select id,Pricebook2Id,Product2Id,UnitPrice,UseStandardPrice,IsActive from PricebookEntry where Product2Id in:plist];
for(Product2 p:plist){
//PricebookEntry pentry=new PricebookEntry();
for(integer i=0;i<pentrylist2.size();i++){
if(p.id==pentrylist2[i].Product2Id){
// pentrylist2[i].Pricebook2Id=pbid.id;
//pentrylist2[i].Product2Id=p.id;
pentrylist2[i].UnitPrice=p.UnitPrice__c;
// pentry.Quantity__c=p.Quantity__c;
pentrylist2[i].UseStandardPrice=false;
pentrylist2[i].IsActive=true;
pentrylist.add(pentrylist2[i]);
}
}
}
update pentrylist;
List<OpportunityLineItem> opitemlist=new List<OpportunityLineItem>();
List<PricebookEntry> pbeIds =[Select Id,UnitPrice, Product2.Name,Product2.Quantity__c,Product2.UnitPrice__c From PricebookEntry where Id in:pentrylist];
for(PricebookEntry pb:pbeIds)
{
OpportunityLineItem opitem=new OpportunityLineItem();
opitem.OpportunityId=OppId;
opitem.PricebookEntryId=pb.id;
opitem.Quantity=pb.Product2.Quantity__c;
opitem.TotalPrice=pb.UnitPrice * opitem.Quantity ;
opitemlist.add(opitem);
}
insert opitemlist;
}
myOutputs output = new myOutputs();
output.errorMessage = 'No errors here.';
output.success = true;
output.inputs = inputs;
output.OpportunityId= OppId;
return output;
}
}
i want to develop web service class which is take opportunity id and List of products as input.
from that list of products i have to create opportunity products.
for this requirement i have to take care the following actions
a)avoid duplicates of products(i have to check the incomming products with existing products based on some fields like Productid__c,if it is exist its updated if it is not dere insert and finally add to opportunity products)
b)used to Standard pricebook id
c)create pricebook entry
d)OpportunityLineItem
please suggest me how i achieve this functionality......
global class BB_productservicenew{
// A class to accept an array of input records (e.g. product/amount combinations)
global class productInfo{
webservice String productName;
webservice String productCode;
webservice Double UnitPrice;
webservice Double Quantity;
}
// A class to send back as an output to PHP
global class myOutputs{
webservice String errorMessage;
webservice Boolean success;
webservice List<productInfo> inputs;
webservice Id OpportunityId;
}
webservice static myOutputs initiateService(Id OppId, List<productInfo> inputs)
{
List<String>pidlist=new List<String>();
for(BB_productservicenew.productInfo ps:inputs)
{
pidlist.add(ps.productCode);
}
List<Product2>plist2=[select id,name,productCode,ProductId__c from Product2];
List<Product2> plist = new List<Product2>();
for(Product2 pd:plist2){
for(Integer i=0;i<inputs.size();i++){
if(pd.ProductId__c==inputs[i].productCode){
Pd.Name=inputs[i].productName;
pd.ProductId__c=inputs[i].productCode;
pd.Quantity__c=inputs[i].Quantity;
pd.UnitPrice__c=inputs[i].UnitPrice;
pd.IsActive=true;
plist.add(pd);
}
}
}
if(plist.size()>0){
update plist;
Pricebook2 pbid=[select id from Pricebook2 where IsStandard = true limit 1];
List<PricebookEntry> pentrylist=new List<PricebookEntry>();
List<PricebookEntry>pentrylist2=[select id,Pricebook2Id,Product2Id,UnitPrice,UseStandardPrice,IsActive from PricebookEntry where Product2Id in:plist];
for(Product2 p:plist){
//PricebookEntry pentry=new PricebookEntry();
for(integer i=0;i<pentrylist2.size();i++){
if(p.id==pentrylist2[i].Product2Id){
// pentrylist2[i].Pricebook2Id=pbid.id;
//pentrylist2[i].Product2Id=p.id;
pentrylist2[i].UnitPrice=p.UnitPrice__c;
// pentry.Quantity__c=p.Quantity__c;
pentrylist2[i].UseStandardPrice=false;
pentrylist2[i].IsActive=true;
pentrylist.add(pentrylist2[i]);
}
}
}
update pentrylist;
List<OpportunityLineItem> opitemlist=new List<OpportunityLineItem>();
List<PricebookEntry> pbeIds =[Select Id,UnitPrice, Product2.Name,Product2.Quantity__c,Product2.UnitPrice__c From PricebookEntry where Id in:pentrylist];
for(PricebookEntry pb:pbeIds)
{
OpportunityLineItem opitem=new OpportunityLineItem();
opitem.OpportunityId=OppId;
opitem.PricebookEntryId=pb.id;
opitem.Quantity=pb.Product2.Quantity__c;
opitem.TotalPrice=pb.UnitPrice * opitem.Quantity ;
opitemlist.add(opitem);
}
insert opitemlist;
}
myOutputs output = new myOutputs();
output.errorMessage = 'No errors here.';
output.success = true;
output.inputs = inputs;
output.OpportunityId= OppId;
return output;
}
}
I would suggest you to use Set or Map as collection instead of list. This will help you to avoid duplicates.