Cannot find the PXSelect to override in the source code for the Vendor ID
I want to add the State to the Vendor ID lookup popup window (selector). It is not one of the fields that can be added easily as it is not part of the vendor id attribute.
There is a well documented way to do this here, but unfortunately, I cannot find where the actual PXSelect statement is to overriden.
I found the VendorAttribute which matches the fields that show in the popup window.
I thought maybe this method might be what is used to create the results for the selector but when I put a break on this in debug, it is not being fired.
In the customization editor on screen AP301000 Bills and Adjustments, the field attribute is shown as follows.
Does anyone know where the actual PXSelect statement is for this lookup field? The code example provided by KishoK in the article mentioned above gives me a boilerplate template on how to do it, I just don’t know where to override the PXSelect that is being used for the popup.
Thanks,
Joe
Page 1 / 1
Hi @joe21 I have not tested the below code but it may work. Please verify.
Hi @Naveen B. I copied your code. I changed POOrder_VendorID_CacheAttached to APInvoice_VendorID_CacheAttached because I am working on the Bills and Adjustments screen. The popup now includes the extra fields due to your magic code!
However, when I select a Vendor from the Popup, I get an overflow exception. I made a snip of the error. I am not sure, but maybe the tstamp field is not populated and is causing an error?
That’s just a guess because it says something about value cannot be null.
FYI, the method is located in the DimensionAttribute.cs file under this class:
SO CLOSE! :-)
I tried going about this the way that KishoK described. I created a custom attribute
public class CustVendorIDAttribute : PXSelectorAttribute { public CustVendorIDAttribute(Type search) : base(search, typeof(Vendor.acctCD), typeof(Vendor.acctName), typeof(Address.addressLine1), typeof(Address.addressLine2), typeof(Address.state), typeof(Address.postalCode), typeof(Contact.phone1), typeof(Address.city), typeof(Address.countryID), typeof(Vendor.curyID), typeof(Contact.attention), typeof(Vendor.vendorClassID), typeof(Vendor.status)) { } }
Then in my extension, I created a selector using the custom attribute
The popup looks perfect. But when I select a vendor from the popup, I get this error:
I’m fumbling in the dark trying various things. Both ways get the popup to give me the fields I want but when I select the vendor, I get an error.
@Naveen B , your way works but causes an overflow exception and the KishoK way gives me an invalid column name error.
I feel that this is so close to working, it hurts.
Hi Joe Hope you’re doing great, I saw your message and gone through this case you’re almost close but I have rather an easy approach. When I was checking the Vendor Active attribute I found it derived from VendorAttribute while checking the code of VendorAttribute voila it has a constructor (typeof(Search)): base(Search, typesr]) signature, So we can utilize it check the below code I'm going to create our version of the VendorActive attribute (CustVendorActive) with slight modification
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using PX.Common; using PX.Data;
using PX.Objects.GL; using PX.Objects.TX; using PX.Objects.CM; using PX.Objects.CA; using PX.Objects.CS; using PX.Objects.CR; using APQuickCheck = PX.Objects.AP.Standalone.APQuickCheck; using PX.Data.SQLTree; using PX.Objects.GL.FinPeriods; using PX.Objects.PO; using PX.Objects.GL.FinPeriods.TableDefinition; using PX.Data.BQL;
public CustVendorActiveAttribute() : base() { } } }
Here note I’m passing my own set of the fields list to the first constructor To invoke the attribute please check the graph extension → cache attached code attached below
You need to pass the search condition (Search<BAccountR.bAccountID>) here to invoke the base constructor which has the same signature. Please let us know if it solves your requirement
Hi, @joe21 and @KishoK I think it is NOT required to create a new custom version of the “Vendor Attribute” code for this requirement.
We can use PXCustomizeSelectorColumns concept to add the fields to the existing selector if that particular table is already in the Base code.
In this case, the Address table is already there in the VendorActive Attribute, we can PXCustomizeSelectorColumns feature to add the State field.
Here is the below simple code and it is working as expected. Please find the source code and screenshot for reference.
public class APInvoiceEntry_Extension : PXGraphExtension<APInvoiceEntry> { PXMergeAttributes(Method = MergeMethod.Merge)] PXUIField(DisplayName = "Vendor ID")] PXCustomizeSelectorColumns( typeof(Vendor.acctCD), typeof(Vendor.acctName), typeof(Address.addressLine1), typeof(Address.addressLine2), typeof(Address.postalCode), typeof(Contact.phone1), typeof(Address.city), typeof(Address.state), // Here is the code for STATE field typeof(Address.countryID), typeof(Location.taxRegistrationID), typeof(Vendor.curyID), typeof(Contact.attention), typeof(Vendor.vendorClassID), typeof(Vendor.status))]
Thank you both for solutions to my issue. I don’t know which one to mark as best answer and they both are awesome. I have learned much from this issue and BOTH of your solutions are very valuable.