Display opportunities as a related list on Product2 record

Has anybody been able to display opportunity records on a product2 record as a related list? 

Done as a popup to a list of Products, but the same can be done for a Product detail page.

<skuidpage unsavedchangeswarning="yes" personalizationmode="server" showsidebar="true" useviewportmeta="true" showheader="true">
 <models>
 <model id="Products" limit="20" query="true" createrowifnonefound="false" datasource="salesforce" type="" sobject="Product2">
 <fields>
 <field id="Name"/>
 <field id="Description"/>
 <field id="Id"/>
 </fields>
 <conditions/>
 <actions/>
 </model>
 <model id="Opps" limit="20" query="false" createrowifnonefound="false" datasource="salesforce" type="" sobject="Opportunity">
 <fields>
 <field id="Name"/>
 <field id="StageName"/>
 <field id="CloseDate"/>
 </fields>
 <conditions>
 <condition type="join" value="" field="Id" operator="in" enclosevalueinquotes="true" joinobject="QuoteLineItem" joinfield="Quote&#46;OpportunityId">
 <conditions>
 <condition type="fieldvalue" value="" enclosevalueinquotes="true" field="Product2Id" state="filterableon" inactive="false" name="Product2Id"/>
 </conditions>
 </condition>
 </conditions>
 <actions/>
 </model>
 </models>
 <components>
 <skootable showconditions="true" showsavecancel="true" showerrorsinline="true" searchmethod="server" searchbox="true" showexportbuttons="false" pagesize="10" createrecords="true" model="Products" buttonposition="" mode="read" allowcolumnreordering="true" uniqueid="sk-2njv91-129">
 <fields>
 <field id="Name" hideable="true" uniqueid="fi-2nkNx5-194"/>
 <field id="Description" hideable="true" uniqueid="fi-2nkNx5-195"/>
 </fields>
 <rowactions>
 <action type="edit"/>
 <action type="delete"/>
 <action type="multi" label="View record details" icon="sk-icon-popup" openicon="fa-chevron-up">
 <drawer title="Drawer Area" width="90%" closehandle="true">
 <components>
 <skootable showconditions="true" showsavecancel="true" showerrorsinline="true" searchmethod="server" searchbox="true" showexportbuttons="false" pagesize="10" createrecords="true" model="Opps" buttonposition="" mode="read" allowcolumnreordering="true" uniqueid="sk-2nl71J-238">
 <fields>
 <field id="Name" hideable="true" uniqueid="fi-2nlCPN-266" valuehalign="" type=""/>
 <field id="StageName" hideable="true" uniqueid="fi-2nlCj--276" valuehalign="" type=""/>
 <field id="CloseDate" hideable="true" uniqueid="fi-2nlD1c-287" valuehalign="" type=""/>
 </fields>
 <rowactions>
 <action type="edit"/>
 <action type="delete"/>
 </rowactions>
 <massactions usefirstitemasdefault="true">
 <action type="massupdate"/>
 <action type="massdelete"/>
 </massactions>
 <views>
 <view type="standard"/>
 </views>
 <conditions>
 <condition type="contextrow" field="Id" mergefield="Id" operator="="/>
 </conditions>
 </skootable>
 </components>
 <beforeload>
 <action type="setCondition" model="Opps" condition="Product2Id" value="{{Id}}"/>
 <action type="requeryModels" behavior="loadmore">
 <models>
 <model>Opps</model>
 </models>
 </action>
 </beforeload>
 </drawer>
 <actions>
 <action type="setCondition" model="Opps" condition="Product2Id" value="{{Id}}"/>
 <action type="requeryModel" model="Opps" behavior="standard"/>
 <action type="showPopup">
 <popup width="80%" title="Viewing {{Model&#46;label}}: {{Name}}">
 <components>
 <skootable showconditions="true" showsavecancel="true" showerrorsinline="true" searchmethod="server" searchbox="true" showexportbuttons="false" pagesize="10" createrecords="true" model="Opps" buttonposition="" mode="read" allowcolumnreordering="true" uniqueid="sk-2nlYuS-130">
 <fields>
 <field id="Name" hideable="true" uniqueid="fi-2nldg7-144"/>
 <field id="CloseDate" hideable="true" uniqueid="fi-2nldg8-145"/>
 <field id="StageName" hideable="true" uniqueid="fi-2nldg8-146"/>
 </fields>
 <rowactions>
 <action type="edit"/>
 <action type="delete"/>
 </rowactions>
 <massactions usefirstitemasdefault="true">
 <action type="massupdate"/>
 <action type="massdelete"/>
 </massactions>
 <views>
 <view type="standard"/>
 </views>
 <conditions/>
 </skootable>
 </components>
 </popup>
 </action>
 </actions>
 </action>
 </rowactions>
 <massactions usefirstitemasdefault="true">
 <action type="massupdate"/>
 <action type="massdelete"/>
 </massactions>
 <views>
 <view type="standard"/>
 </views>
 </skootable>
 </components>
 <resources>
 <labels/>
 <javascript/>
 <css/>
 </resources>
 <styles>
 <styleitem type="background" bgtype="none"/>
 </styles>
</skuidpage>




Thanks very much but I receive the following error message when trying to view records.

1. An error occurred while attempting to perform the following SOQL query: SELECT Name,StageName,CloseDate,Id FROM Opportunity WHERE (Id in (SELECT Quote.OpportunityId FROM QuoteLineItem WHERE (((Product2Id = ‘01t5E000000O3ALQA0’))))) LIMIT 21 Error:The inner select field ‘Quote.OpportunityId’ cannot have more than one level of relationships

Darn it. Didn’t try testing it. Can be done, just have to add another / query.

Ah no problem, thanks for your help :slight_smile: So do i need to add another condition in the opps model, is that what you’re saying?

This is what I’m saying. :wink:

<skuidpage unsavedchangeswarning="yes" personalizationmode="server" showsidebar="true" useviewportmeta="true" showheader="true">
 <models>
 <model id="Products" limit="20" query="true" createrowifnonefound="false" datasource="salesforce" type="" sobject="Product2">
 <fields>
 <field id="Name"/>
 <field id="Description"/>
 <field id="Id"/>
 </fields>
 <conditions/>
 <actions/>
 </model>
 <model id="Quotes" limit="" query="false" createrowifnonefound="false" datasource="salesforce" type="" sobject="Quote">
 <fields>
 <field id="Id"/>
 <field id="OpportunityId"/>
 <field id="Opportunity.Name"/>
 </fields>
 <conditions>
 <condition type="join" value="" field="Id" operator="in" enclosevalueinquotes="true" joinobject="QuoteLineItem" joinfield="QuoteId">
 <conditions>
 <condition type="fieldvalue" value="" field="Product2Id" operator="=" mergefield="Id" novaluebehavior="deactivate" state="filterableon" inactive="false" name="Product2Id" enclosevalueinquotes="true"/>
 </conditions>
 </condition>
 </conditions>
 <actions/>
 </model>
 <model id="Opps" limit="" query="false" createrowifnonefound="false" datasource="salesforce" type="" sobject="Opportunity">
 <fields>
 <field id="Name"/>
 <field id="StageName"/>
 <field id="CloseDate"/>
 </fields>
 <conditions>
 <condition type="modelmerge" value="" field="Id" operator="in" model="Quotes" enclosevalueinquotes="true" mergefield="OpportunityId" novaluebehavior="noquery"/>
 </conditions>
 <actions/>
 </model>
 </models>
 <components>
 <skootable showconditions="true" showsavecancel="true" showerrorsinline="true" searchmethod="server" searchbox="true" showexportbuttons="false" pagesize="10" createrecords="true" model="Products" buttonposition="" mode="read" allowcolumnreordering="true" uniqueid="sk-2njv91-129">
 <fields>
 <field id="Name" hideable="true" uniqueid="fi-2nkNx5-194"/>
 <field id="Description" hideable="true" uniqueid="fi-2nkNx5-195"/>
 </fields>
 <rowactions>
 <action type="edit"/>
 <action type="delete"/>
 <action type="multi" label="View record details" icon="sk-icon-popup" openicon="fa-chevron-up">
 <drawer title="Drawer Area" width="90%" closehandle="true">
 <components>
 <skootable showconditions="true" showsavecancel="true" showerrorsinline="true" searchmethod="server" searchbox="true" showexportbuttons="false" pagesize="10" createrecords="true" model="Opps" buttonposition="" mode="read" allowcolumnreordering="true" uniqueid="sk-2nl71J-238">
 <fields>
 <field id="Name" hideable="true" uniqueid="fi-2nlCPN-266" valuehalign="" type=""/>
 <field id="StageName" hideable="true" uniqueid="fi-2nlCj--276" valuehalign="" type=""/>
 <field id="CloseDate" hideable="true" uniqueid="fi-2nlD1c-287" valuehalign="" type=""/>
 </fields>
 <rowactions>
 <action type="edit"/>
 <action type="delete"/>
 </rowactions>
 <massactions usefirstitemasdefault="true">
 <action type="massupdate"/>
 <action type="massdelete"/>
 </massactions>
 <views>
 <view type="standard"/>
 </views>
 <conditions>
 <condition type="contextrow" field="Id" mergefield="Id" operator="="/>
 </conditions>
 </skootable>
 </components>
 <beforeload>
 <action type="setCondition" model="Opps" condition="Product2Id" value="{{Id}}"/>
 <action type="requeryModels" behavior="loadmore">
 <models>
 <model>Opps</model>
 </models>
 </action>
 </beforeload>
 </drawer>
 <actions>
 <action type="setCondition" model="Quotes" condition="Product2Id" value="{{Id}}"/>
 <action type="requeryModels" model="Opps" behavior="standard">
 <models>
 <model>Quotes</model>
 <model>Opps</model>
 </models>
 </action>
 <action type="showPopup">
 <popup width="80%" title="Viewing {{Model.label}}: {{Name}}">
 <components>
 <skootable showconditions="true" showsavecancel="true" showerrorsinline="true" searchmethod="server" searchbox="true" showexportbuttons="false" pagesize="10" createrecords="true" model="Opps" buttonposition="" mode="read" allowcolumnreordering="true" uniqueid="sk-2nlYuS-130">
 <fields>
 <field id="Name" hideable="true" uniqueid="fi-2nldg7-144"/>
 <field id="CloseDate" hideable="true" uniqueid="fi-2nldg8-145"/>
 <field id="StageName" hideable="true" uniqueid="fi-2nldg8-146"/>
 </fields>
 <rowactions>
 <action type="edit"/>
 <action type="delete"/>
 </rowactions>
 <massactions usefirstitemasdefault="true">
 <action type="massupdate"/>
 <action type="massdelete"/>
 </massactions>
 <views>
 <view type="standard"/>
 </views>
 <conditions/>
 </skootable>
 </components>
 </popup>
 </action>
 </actions>
 </action>
 </rowactions>
 <massactions usefirstitemasdefault="true">
 <action type="massupdate"/>
 <action type="massdelete"/>
 </massactions>
 <views>
 <view type="standard"/>
 </views>
 </skootable>
 </components>
 <resources>
 <labels/>
 <javascript/>
 <css/>
 </resources>
 <styles>
 <styleitem type="background" bgtype="none"/>
 </styles>
</skuidpage>


Ah so you’ve created another model, thanks very much for your help with this, it’s now resolved!

yw :wink: