Skip to main content
Answer

Add "Add Items" Action Button to Details Grid on Sales Quotes Screen (CR304500)

  • June 20, 2025
  • 7 replies
  • 190 views

DipakNilkanth
Pro III
Forum|alt.badge.img+13

Hi Community,

I’m working on a customization where I’d like to add the “Add Items” action button to the Details grid on the Sales Quotes screen (CR304500), similar to how it currently works on the Sales Orders screen (SO301000).

The goal is for this button to open the Inventory Lookup dialog, allowing users to search for and add inventory items directly into the quote lines, just like in the Sales Orders screen.

This functionality is already working as expected in Sales Orders, and I would like to replicate the same behavior in Sales Quotes to streamline the quoting process.

Has anyone implemented this before or can provide guidance on:

  • Which action or logic controls the Inventory Lookup in SO301000?

  • How best to reuse or extend this functionality in CR304000?

    I went through This link of ideas section for same requirement but its already in status as Unlikely to implement SO i am findig a way to implement it via code.
     

    I’ve added the popup panel, form, and grid for the inventory lookup dialog in the Customization Editor, replicating it exactly as it's implemented on the Sales Orders (SO301000) screen. I’ve also added the ItemFilter and ItemsInfo views to the QuoteMaint graph in my customization.

    However, I'm still seeing a warning in the Customization Editor that says:
    The view ItemInfo doesn't exist.”

    I’ve double-checked the spelling and view definitions, and everything seems correct. Here's what I've done so far:

  • Copied the Inventory Lookup dialog structure from SO301000

  • Created the ItemFilter view as a PXSelect

  • Created the ItemInfo view using the same logic as in SOOrderEntry

  • Despite this, the Customization Editor doesn’t seem to recognize ItemInfo as a valid view for the grid.

    Has anyone run into this issue before, or is there a specific step I might be missing to register the view so the editor picks it up?

Any suggestions, code snippets, or documentation references would be greatly appreciated!

Thanks in advance.

Best answer by Django

The first step is to create a class of type AlternateIDLookupExt. Something like:

public class CROpportunitySiteStatusLookupExt : AlternateIDLookupExt<OpportunityMaint, CROpportunity, CROpportunityProducts, XXSiteStatusSelected, SOSiteStatusFilter, XXSiteStatusSelected.salesUnit>

You’ll go through the code in AlternateIDLookupExt.cs so that you are overriding the methods within your extension as required. AlternateIDLookupExt doesn’t know how to add detail lines to a specific type of transaction. If you look at SOOrderSiteStatusLookupExt, you’ll see how it overrides the method of AlternateIDLookupExt to be able to update the SO transaction. So your CROpportunitySiteStatusLookupExt extension (of whatever you’re calling it if you’re adding it to the Quotes screen) will need to supply the code to be able to add detail lines to the quote.

You’ll notice that my CROpportunitySiteStatusLookupExt has two parameters that start with XX. I had to create my down XXSiteStatusSelected object. It is the implementation of the projection used to find the items. The reason I did that is because the SOSiteStatusProjectionAttribute has four parameters - the last being Type currentBehaviour and quotes don’t have that field. So I created my own projection based on SOSiteStatusProjectAttribute to remove the reference to currentBehaviour in the BQL of the projection.

That should get you going in the right direction. Whomever at Acumatica created the AddItems code did a good job of creating that code and the SOOrderSiteStatusLookupExt is a good reference for how to implement it to make it work with Quotes.

 

 

7 replies

darylbowman
Captain II
Forum|alt.badge.img+15

I believe you’ll need to create a graph extension like SOOrderSiteStatusLookupExt except for the QuoteMaint graph and CRQuote.


Forum|alt.badge.img+7
  • Captain II
  • June 20, 2025

Daryl has it right.

This was a pain in the…. it took a lot of digging around.

I added mine to Opportunities which ends up putting the lines on the Quote.

I created a copy of the SOOrderSiteStatusLookupExt because the original query references the SO Order behaviour and opportunities don’t have that. So I had to modify the PXProjection’s BQL slightly.

That meant I needed to create my own SiteStatusSelected class because it calls the the above projection, passing only three parameters instead of four.

That led me to creating an extension called CROpportunitySiteStatusLookupExt which is of type: AlternateIDLookupExt. This does the work of adding the detail lines to the Opportunity. But because of the inheritance of AlternateIDLookupExt - I got access to the rest of the underlying framework.

The ItemInfo view comes from AddItemLookupBaseExt, which is extended by SiteStatusLookupExt. AlternateIDLookupExt extends SiteStatusLookupExt. And my CROpportunitySiteStatusLookupExt is of type AlternateIDLookupExt - thus giving me access to the ItemInfo view.

 


DipakNilkanth
Pro III
Forum|alt.badge.img+13
  • Author
  • Pro III
  • June 20, 2025

I believe you’ll need to create a graph extension like SOOrderSiteStatusLookupExt except for the QuoteMaint graph and CRQuote.

Thank you ​@darylbowman Yes, I did go through the SOOrderSiteStatusLookupExt graph, but I’m still a bit unsure about where exactly to start. I got confused when reviewing the AlternateIDLookupExt extension — I’m not certain whether this extension is required to implement the inventory lookup functionality in the Sales Quotes screen or if it can be skipped.
 


DipakNilkanth
Pro III
Forum|alt.badge.img+13
  • Author
  • Pro III
  • June 20, 2025

Daryl has it right.

This was a pain in the…. it took a lot of digging around.

I added mine to Opportunities which ends up putting the lines on the Quote.

I created a copy of the SOOrderSiteStatusLookupExt because the original query references the SO Order behaviour and opportunities don’t have that. So I had to modify the PXProjection’s BQL slightly.

That meant I needed to create my own SiteStatusSelected class because it calls the the above projection, passing only three parameters instead of four.

That led me to creating an extension called CROpportunitySiteStatusLookupExt which is of type: AlternateIDLookupExt. This does the work of adding the detail lines to the Opportunity. But because of the inheritance of AlternateIDLookupExt - I got access to the rest of the underlying framework.

The ItemInfo view comes from AddItemLookupBaseExt, which is extended by SiteStatusLookupExt. AlternateIDLookupExt extends SiteStatusLookupExt. And my CROpportunitySiteStatusLookupExt is of type AlternateIDLookupExt - thus giving me access to the ItemInfo view.

 

Thank you ​@Django , Do you have any sample working code for this?


Forum|alt.badge.img+7
  • Captain II
  • Answer
  • June 25, 2025

The first step is to create a class of type AlternateIDLookupExt. Something like:

public class CROpportunitySiteStatusLookupExt : AlternateIDLookupExt<OpportunityMaint, CROpportunity, CROpportunityProducts, XXSiteStatusSelected, SOSiteStatusFilter, XXSiteStatusSelected.salesUnit>

You’ll go through the code in AlternateIDLookupExt.cs so that you are overriding the methods within your extension as required. AlternateIDLookupExt doesn’t know how to add detail lines to a specific type of transaction. If you look at SOOrderSiteStatusLookupExt, you’ll see how it overrides the method of AlternateIDLookupExt to be able to update the SO transaction. So your CROpportunitySiteStatusLookupExt extension (of whatever you’re calling it if you’re adding it to the Quotes screen) will need to supply the code to be able to add detail lines to the quote.

You’ll notice that my CROpportunitySiteStatusLookupExt has two parameters that start with XX. I had to create my down XXSiteStatusSelected object. It is the implementation of the projection used to find the items. The reason I did that is because the SOSiteStatusProjectionAttribute has four parameters - the last being Type currentBehaviour and quotes don’t have that field. So I created my own projection based on SOSiteStatusProjectAttribute to remove the reference to currentBehaviour in the BQL of the projection.

That should get you going in the right direction. Whomever at Acumatica created the AddItems code did a good job of creating that code and the SOOrderSiteStatusLookupExt is a good reference for how to implement it to make it work with Quotes.

 

 


Bravo94
Freshman I
Forum|alt.badge.img
  • Freshman I
  • September 30, 2025

Hi guys, can one of u upload the Customizaiton to this Project ?

 

 


darylbowman
Captain II
Forum|alt.badge.img+15
  • September 30, 2025

Asking for help with a customization is one thing. Asking for a completed project is not something most people are going to help you with, as it represents time and effort, which should be worth something (in my opinion).