Welcome to Support!
Search for an answer or ask a question of the zone or Customer Support.
Need help? DismissYou need to sign in to do that
Don't have an account?
- Solved Questions
- This Question
Error in Quote
Hi Everyone
I want to add more product in a perticular Quote.I know the relationship between Quote,QuoteLineItem ,Pricebook2,Product2 and PricebookEntry.my first product is saved but when I am trying to add more product under a perticular Quote an error is fired.
"Id is not specified in an update call.." .I have written update statement to update Quote because there is a required field Pricebook2Id in Quote.when I am creating a new product at that time assisgning a unit price through PricebookEntry.Because Product2 and Pricebook2 are related in a many to many relationship and the junction object is PricebookEntry.
My problem is that how can we update PricebookId field In Quote each time when a Product is created.
That means there is one record in Quote but I have to created more product inside perticular Quote.
I am beginner in salesforce.May be I canot express my problem.So I request please help me in a simpler way....
Here is my code.
<apex:page controller= pcontactdetailcontroller>
................
...............
<!----QUOTE table-->
<apex:pageBlockSection title="Quote Details of a Perctcular Opportunity" rendered="{!table=='Show'}">
<B>OPPORTUNITY NAME: {!Opportunity1.Name}</B>
<!--<apex:outputField label="OPPORTUNITY" value="{!OpportunityContactRoles.Opportunity.Name}"/>-->
<apex:outputPanel style="float:middle">
<p><B> All Quotes </B></P>
<apex:dataTable value="{!Opportunity1.Quotes}" var="Qut" cellpadding="2" border="1" rowClasses="odd,even" >
<apex:column headerValue="Quote Name">
<apex:commandLink value="{!Qut.Name}" title="to see product" style="font-size:15;color:blue;" action="{!forProduct}">
<apex:param name="quoteId" value="{!Qut.Id}"/>
</apex:commandLink>
</apex:column>
<apex:column headerValue="Status">{!Qut.Status}</apex:column>
</apex:dataTable>
</apex:outputPanel>
<apex:commandButton value="Add Quote" action="{!toaddQoute}"/>
</apex:pageBlockSection>
<!--product table------>
<apex:pageBlockSection title="Product Details" rendered="{!asish=='Show'}">
<B>OPPORTUNITY NAME: {!Opportunity1.Name}</B><br/><br/>
<B>QUOTE NAME: {!Quote1.Name}</B>
<apex:outputPanel style="float:middle">
<p><B> Product Details </B></P>
<apex:datatable value="{!quote1.QuoteLineItems}" var="pdct" cellpadding="2" border="1" rowClasses="odd,even">
<apex:column headerValue="Product Name">{!pdct.PricebookEntry.Product2.Name}</apex:column>
<apex:column headerValue="Unit Price">{!pdct.UnitPrice}</apex:column>
<apex:column headerValue="Quantity">{!pdct.Quantity}</apex:column>
<apex:column headerValue="Sub Total">"{!pdct.Subtotal}</apex:column>
<apex:column headerValue="Discount">"{!pdct.Discount}</apex:column>
<apex:column headerValue="TotalPrice">{!pdct.TotalPrice}</apex:column>
</apex:datatable>
</apex:outputPanel>
<apex:commandButton value="Add Product" action="{!toaddProduct}"/>
</apex:pageBlockSection>
.......................
<!--PRODUCT SECTION FOR ENTRY-->
<apex:pageBlockSection title="Product Details" rendered="{!visible=='Step3'}">
<apex:inputField value="{!Product.Name}"/>
<!--<apex:inputField value="{!PricebookEntry.UnitPrice}"/>-->
<apex:inputField value="{!QuoteLineItem.UnitPrice}"/>
<apex:inputField value="{!QuoteLineItem.Quantity}"/>
<apex:inputField value="{!QuoteLineItem.Discount}"/>
<apex:inputCheckbox value="{!PricebookEntry.IsActive}"/>
<apex:commandButton value="save" action="{!tosaveProduct}" style="float:left"/>
</apex:pageBlockSection>
</apex:page>
here is my controller code.....
public class pcontactdetailcontroller {
..................
.................
public Quote quote{get;set;}
public PricebookEntry pbentry{get;set;}
public Pricebook2 pb{get;set;}
public Product2 product{get;set;}
public QuoteLineItem qutlineitem{get;set;}
public Id quoteId{get;set;}
public pcontactdetailcontroller() {
pb= new Pricebook2();
pbentry= new PricebookEntry(UseStandardPrice=true,UnitPrice=0.00);
product=new Product2();
qutlineitem=new QuoteLineItem();
}
public Quote getQuote() {
return quote;
}
public Product2 getProduct2() {
return product;
}
public Pricebook2 getPricebook2() {
return pb;
}
public PricebookEntry getPricebookEntry() {
return pbentry;
}
public QuoteLineItem getQuoteLineItem() {
return qutlineitem;
}
//saving Quote and opening product entry section
public PageReference tosaveQuote() {
quote.BillingName=contact.Account.Name;
quote.ShippingName=contact.Account.Name;
quote.ContactId =contact.Id;
quote.Phone=contact.MobilePhone;
quote.Email= contact.Email;
// System.debug('########## quoteOpportunityId######'+ quote.OpportunityId);
insert quote;
visible='Step3';
// insert quote1;
return null;
}
//saving Product
public PageReference tosaveProduct() {
insert product;
pb.Name='Standard';
insert pb;
pbentry.Product2Id=product.Id;
pbentry.Pricebook2Id=pb.Id;
// pbentry.UnitPrice=0.00;
// pbentry.UseStandardPrice=true;
insert pbentry;
quote.Pricebook2Id=pb.Id;
update quote;
qutlineitem.PricebookEntryId = pbentry.Id;
qutlineitem.quoteId=quote.Id;
insert qutlineitem;
visible=null;
Id Id = ApexPages.currentPage().getParameters().get('Id');
PageReference samepage= new PageReference('/apex/pcontactdetail?id='+id);
samepage.setRedirect(true);
return samepage;
}
public PageReference forProduct() {
quoteId = ApexPages.currentPage().getParameters().get('quoteId');
quote1= [select Id,Name,(select Id,PricebookEntry.Product2.Name,UnitPrice,Quantity,Subtotal,Discount,TotalPrice From QuoteLineItems) from Quote where Id=:quoteId];
asish = 'Show';
return null;
}
public PageReference toaddProduct() {
visible = 'Step3';
return null;
}
}
I have sent necessary code at which I am facing problem.I have faced problem in the line
Update Quote;
kindly reply me as soon as possible...
i think you are correct.already one ProceBook is selected for this quote(Opportunity) again you are selecting one more for this quote, So it is wrong. Based on below statement.
at a time one PriceBook is enabled for a Opportunity you cann't select morethan one Pricebook for a Opportunity.
So you can add more products of one PriceBook to a Quote.
Sorry for helpless.
i am also same like you Salesforce.
Reds,
Buss
All Answers
HI asish,
it may becuase you are used same object to insert and update while updating it refering the same Memory which is used for Insert. My Suggestion is take new Quote Object and Query in tosaveProduct() and perform your update logic.
Reds,
Buss
Hi
I tried by making a new variable quote1 in Quote but still I am facing same Problem.I want to know how can we update multiple value in a singly field.when I am creating a new product each product is associated with a pricebook2Id through PricebookEntry object and also there is a required field "PricebookId" in Quote, In order to save Product and Price In Product under Quote we have to update PricebookId in Quote.that is
quote.PricebookId = pricebook.Id;
update quote;
In this way first product is saved under particular Quote.When I am creating another product under same Quote then error is fired Invalid Id for Update call.....
I think there is one record in Quote table.PricebookId field has one value.so when I create another product under same Quote
then PricebookId field has allready a value.how can this field contain multi value for one record in Quote.Because each time we have to update PricebookId in Quote when a product is created.
As for my understanding I have expressed my problem clearly...so kindly help me if anyone have suggession.
with Regards
asish
i think you are correct.already one ProceBook is selected for this quote(Opportunity) again you are selecting one more for this quote, So it is wrong. Based on below statement.
at a time one PriceBook is enabled for a Opportunity you cann't select morethan one Pricebook for a Opportunity.
So you can add more products of one PriceBook to a Quote.
Sorry for helpless.
i am also same like you Salesforce.
Reds,
Buss