Opportunity Wall XML

  • 3
  • Praise
  • Updated 4 years ago
  • (Edited)
Drag and Drop Opportunity Wall is a hit and Summer 14 Release, with multiple actions, a number one on the top of the charts!

https://github.com/skuidify/SamplePages/blob/master/ActionRecipies/OpportunityPlanningWall.xml
Photo of Gregg Baxter

Gregg Baxter, Official Rep

  • 3,080 Points 3k badge 2x thumb

Posted 4 years ago

  • 3
Photo of Rob Hatch

Rob Hatch, Official Rep

  • 44,006 Points 20k badge 2x thumb
Glad you like it!
I've combined it with poupup actions to create a "trello" like interface for managing our projects here at Skuid.  Its pretty cool. 
Photo of Gregg Baxter

Gregg Baxter, Official Rep

  • 3,080 Points 3k badge 2x thumb
Please share the XML.

Here is my Michelangelo version lol and share.

<skuidpage showsidebar="false" showheader="true" tabtooverride="Opportunity">   <models>
      <model id="Opps_Prospecting" limit="100" query="true" createrowifnonefound="false" sobject="Opportunity" orderby="Name">
         <fields>
            <field id="Name"/>
            <field id="StageName"/>
            <field id="Amount"/>
            <field id="CloseDate"/>
            <field id="OwnerId"/>
            <field id="Owner.Name"/>
            <field id="Owner.SmallPhotoUrl"/>
            <field id="AccountId"/>
            <field id="Account.Name"/>
         <field id="Probability"/>
</fields>
         <conditions>
            <condition type="fieldvalue" value="Prospecting" enclosevalueinquotes="true" field="StageName"/>
         </conditions>
         <actions/>
      </model>
      <model id="Opps_NegotiationReview" limit="100" query="true" createrowifnonefound="false" sobject="Opportunity" orderby="Name">
         <fields>
            <field id="Name"/>
            <field id="StageName"/>
            <field id="Amount"/>
            <field id="CloseDate"/>
            <field id="OwnerId"/>
            <field id="Owner.Name"/>
            <field id="Owner.SmallPhotoUrl"/>
            <field id="AccountId"/>
            <field id="Account.Name"/>
         </fields>
         <conditions>
            <condition type="fieldvalue" value="Negotiation/Review" enclosevalueinquotes="true" field="StageName"/>
         </conditions>
         <actions/>
      </model>
      <model id="Opps_ProposalPriceQuote" limit="100" query="true" createrowifnonefound="false" sobject="Opportunity" orderby="Name">
         <fields>
            <field id="Name"/>
            <field id="StageName"/>
            <field id="Amount"/>
            <field id="CloseDate"/>
            <field id="OwnerId"/>
            <field id="Owner.Name"/>
            <field id="Owner.SmallPhotoUrl"/>
            <field id="AccountId"/>
            <field id="Account.Name"/>
         </fields>
         <conditions>
            <condition type="fieldvalue" value="Proposal/Price Quote" enclosevalueinquotes="true" field="StageName"/>
         </conditions>
         <actions/>
      </model>
      <model id="Opps_ClosedWon" limit="100" query="true" createrowifnonefound="false" sobject="Opportunity" orderby="Name">
         <fields>
            <field id="Name"/>
            <field id="StageName"/>
            <field id="Amount"/>
            <field id="CloseDate"/>
            <field id="OwnerId"/>
            <field id="Owner.Name"/>
            <field id="Owner.SmallPhotoUrl"/>
            <field id="AccountId"/>
            <field id="Account.Name"/>
         </fields>
         <conditions>
            <condition type="fieldvalue" value="Closed Won" enclosevalueinquotes="true" field="StageName"/>
         </conditions>
         <actions/>
      </model>
      <model id="Opps_ClosedLost" limit="100" query="true" createrowifnonefound="false" sobject="Opportunity" orderby="Name">
         <fields>
            <field id="Name"/>
            <field id="StageName"/>
            <field id="Amount"/>
            <field id="CloseDate"/>
            <field id="OwnerId"/>
            <field id="Owner.Name"/>
            <field id="Owner.SmallPhotoUrl"/>
            <field id="AccountId"/>
            <field id="Account.Name"/>
         </fields>
         <conditions>
            <condition type="fieldvalue" value="Closed Lost" enclosevalueinquotes="true" field="StageName"/>
         </conditions>
         <actions/>
      </model>
   <model id="Opps_Qualification" limit="100" query="true" createrowifnonefound="false" sobject="Opportunity" orderby="Name">
         <fields>
            <field id="Name"/>
            <field id="StageName"/>
            <field id="Amount"/>
            <field id="CloseDate"/>
            <field id="OwnerId"/>
            <field id="Owner.Name"/>
            <field id="Owner.SmallPhotoUrl"/>
            <field id="AccountId"/>
            <field id="Account.Name"/>
         </fields>
         <conditions>
            <condition type="fieldvalue" value="Qualification" enclosevalueinquotes="true" field="StageName"/>
         </conditions>
         <actions/>
      </model>
<model id="Opps_NeedsAna" limit="100" query="true" createrowifnonefound="false" sobject="Opportunity" orderby="Name">
         <fields>
            <field id="Name"/>
            <field id="StageName"/>
            <field id="Amount"/>
            <field id="CloseDate"/>
            <field id="OwnerId"/>
            <field id="Owner.Name"/>
            <field id="Owner.SmallPhotoUrl"/>
            <field id="AccountId"/>
            <field id="Account.Name"/>
         </fields>
         <conditions>
            <condition type="fieldvalue" value="Needs Analysis" enclosevalueinquotes="true" field="StageName"/>
         </conditions>
         <actions/>
      </model>
<model id="Opps_ValProp" limit="100" query="true" createrowifnonefound="false" sobject="Opportunity" orderby="Name">
         <fields>
            <field id="Name"/>
            <field id="StageName"/>
            <field id="Amount"/>
            <field id="CloseDate"/>
            <field id="OwnerId"/>
            <field id="Owner.Name"/>
            <field id="Owner.SmallPhotoUrl"/>
            <field id="AccountId"/>
            <field id="Account.Name"/>
         </fields>
         <conditions>
            <condition type="fieldvalue" value="Value Proposition" enclosevalueinquotes="true" field="StageName"/>
         </conditions>
         <actions/>
      </model>
<model id="Opps_IdDesicionMakers" limit="100" query="true" createrowifnonefound="false" sobject="Opportunity" orderby="Name">
         <fields>
            <field id="Name"/>
            <field id="StageName"/>
            <field id="Amount"/>
            <field id="CloseDate"/>
            <field id="OwnerId"/>
            <field id="Owner.Name"/>
            <field id="Owner.SmallPhotoUrl"/>
            <field id="AccountId"/>
            <field id="Account.Name"/>
         </fields>
         <conditions>
            <condition type="fieldvalue" value="Id. Decision Makers" enclosevalueinquotes="true" field="StageName"/>
         </conditions>
         <actions/>
      </model>
<model id="Opps_PercepAnalaysis" limit="100" query="true" createrowifnonefound="false" sobject="Opportunity" orderby="Name">
         <fields>
            <field id="Name"/>
            <field id="StageName"/>
            <field id="Amount"/>
            <field id="CloseDate"/>
            <field id="OwnerId"/>
            <field id="Owner.Name"/>
            <field id="Owner.SmallPhotoUrl"/>
            <field id="AccountId"/>
            <field id="Account.Name"/>
         </fields>
         <conditions>
            <condition type="fieldvalue" value="Perception Analysis" enclosevalueinquotes="true" field="StageName"/>
         </conditions>
         <actions/>
      </model>
</models>
   <components>
      <pagetitle model="Opps_Prospecting">
         <maintitle>Opportunity Planning Wall</maintitle>
         <actions>
            <action type="savecancel" window="self">
               <models>
                  <model>Opps_NegotiationReview</model>
                  <model>Opps_ProposalPriceQuote</model>
                  <model>Opps_ClosedWon</model>
                  <model>Opps_ClosedLost</model>
               </models>
               <savehotkeys>
                  <hotkey modifiers="ctrl" key="s"/>
                  <hotkey modifiers="meta" key="s"/>
               </savehotkeys>
            </action>
         </actions>
      </pagetitle>
<panelset type="custom" scroll="fixed" uniqueid="" height="400">
         <panels>
            <panel width="18%" cssclass="frame" uniqueid="frames">
               <components>
                  <queue tagrendertype="snippet" parameter="id" defaultitemparameter="id" clickactiontype="multi" searchbox="true" model="Opps_Prospecting" title="Prospecting 10%" rendersnippet="Queue.ItemRenderer">
                     <filters/>
                     <actions>
                        <action type="showPopup">
                           <popup title="Opportunity Details: {{Name}}" width="80%">
                              <components>
                                 <includepanel type="skuid" pagename="OpportunityDetail_AFDeepDive" module="" querystring="id={{{Id}}}"/>
                              </components>
                           </popup>
                        </action>
                     </actions>
                  <renderconditions/>
</queue>
               </components>
            </panel>
            
            <panel width="1%" uniqueid="" cssclass="">
               <components>
                  
               </components>
            </panel>
            <panel width="18%" cssclass="frame" uniqueid="frames">
               <components>
<queue tagrendertype="snippet" querystring="id={{Id}}" defaultitemparameter="id" clickactiontype="updatepanel" searchbox="true" model="Opps_Qualification" title="Qualification 10%" rendersnippet="Queue.ItemRenderer">
   <rendertemplate>{{{Name}}}</rendertemplate>
</queue>
                  
               </components>
            </panel>
            <panel width="1%" cssclass="" uniqueid="">
               <components>
                  
               </components>
            </panel>
         <panel width="18%" uniqueid="frames" cssclass="frame">
<components>
   <queue tagrendertype="snippet" querystring="id={{Id}}" defaultitemparameter="id" clickactiontype="updatepanel" searchbox="true" model="Opps_NeedsAna" title="Needs Analysis 20%" rendersnippet="Queue.ItemRenderer">
      <rendertemplate>{{{Name}}}</rendertemplate>
   </queue>
</components>
</panel>
<panel width="1%">
   <components/>
</panel>
<panel width="18%" uniqueid="frames" cssclass="frame">
   <components>
      <queue tagrendertype="snippet" querystring="id={{Id}}" defaultitemparameter="id" clickactiontype="updatepanel" searchbox="true" model="Opps_ValProp" title="Value Proposition 50%" rendersnippet="Queue.ItemRenderer">
         <rendertemplate>{{{Name}}}</rendertemplate>
      </queue>
   </components>
</panel>
<panel width="1%">
   <components/>
</panel>
<panel width="18%" uniqueid="frames" cssclass="frame">
   <components>
      <queue tagrendertype="snippet" querystring="id={{Id}}" defaultitemparameter="id" clickactiontype="updatepanel" searchbox="true" model="Opps_Prospecting" title="Id. Decision Makers 60%" rendersnippet="Queue.ItemRenderer">
         <rendertemplate>{{{Name}}}</rendertemplate>
      </queue>
   </components>
</panel>
<panel width="2%">
   <components/>
</panel>
</panels>
      </panelset>
<pagetitle model="Opps_PercepAnalaysis">
   <actions/>
</pagetitle>
      <panelset type="custom" scroll="variable" offset="220">
<panels>
   <panel width="18%" uniqueid="frames" cssclass="frame">
      <components>
         <queue tagrendertype="snippet" querystring="id={{Id}}" defaultitemparameter="id" clickactiontype="updatepanel" searchbox="true" model="Opps_PercepAnalaysis" title="Perception Analysis 70%" rendersnippet="Queue.ItemRenderer">
            <rendertemplate>{{{Name}}}</rendertemplate>
         </queue>
      </components>
   </panel>
   <panel width="1%">
      <components/>
   </panel>
   <panel width="18%" cssclass="frame" uniqueid="frames">
      <components>
         <queue tagrendertype="snippet" parameter="id" defaultitemparameter="id" clickactiontype="multi" searchbox="true" model="Opps_ProposalPriceQuote" title="Proposal/Price Quote 75%" rendersnippet="Queue.ItemRenderer">
                     <filters/>
                     <actions>
                        <action type="showPopup">
                           <popup title="Opportunity Details: {{Name}}" width="80%">
                              <components>
                                 <includepanel type="skuid" pagename="OpportunityDetail_AFDeepDive" module="" querystring="id={{{Id}}}"/>
                              </components>
                           </popup>
                        </action>
                     </actions>
                  </queue>
      </components>
   </panel>
   <panel width="1%">
      <components/>
   </panel>
   <panel width="18%" cssclass="frame" uniqueid="frames">
      <components>
         <queue tagrendertype="snippet" parameter="id" defaultitemparameter="id" clickactiontype="multi" searchbox="true" model="Opps_NegotiationReview" title="Negotiation/Review 90%" rendersnippet="Queue.ItemRenderer">
                     <filters/>
                     <actions>
                        <action type="showPopup">
                           <popup title="Opportunity Details: {{Name}}" width="80%">
                              <components>
                                 <includepanel type="skuid" pagename="OpportunityDetail_AFDeepDive" module="" querystring="id={{{Id}}}"/>
                              </components>
                           </popup>
                        </action>
                     </actions>
                  </queue>
      </components>
   </panel>
   <panel width="1%">
      <components/>
   </panel>
   <panel width="18%" cssclass="frame" uniqueid="frames">
      <components>
         <queue tagrendertype="snippet" parameter="id" defaultitemparameter="id" clickactiontype="multi" searchbox="true" model="Opps_ClosedWon" title="Closed Won 100%" rendersnippet="Queue.ItemRenderer">
                     <filters/>
                     <actions>
                        <action type="showPopup">
                           <popup title="Opportunity Details: {{Name}}" width="80%">
                              <components>
                                 <includepanel type="skuid" pagename="OpportunityDetail_AFDeepDive" module="" querystring="id={{{Id}}}"/>
                              </components>
                           </popup>
                        </action>
                     </actions>
                  </queue>
      </components>
   </panel>
   <panel width="1%">
      <components/>
   </panel>
   <panel width="18%" cssclass="frame" uniqueid="frames">
      <components>
         <queue tagrendertype="snippet" parameter="id" defaultitemparameter="id" clickactiontype="multi" searchbox="true" model="Opps_ClosedLost" title="Closed Lost - Try Again" rendersnippet="Queue.ItemRenderer">
                     <filters/>
                     <actions>
                        <action type="showPopup">
                           <popup title="Opportunity Details: {{Name}}" width="80%">
                              <components>
                                 <includepanel type="skuid" pagename="OpportunityDetail_AFDeepDive" module="" querystring="id={{{Id}}}"/>
                              </components>
                           </popup>
                        </action>
                     </actions>
                  </queue>
      </components>
   </panel>
   <panel width="1%">
      <components/>
   </panel>
</panels>
</panelset>
   </components>
   <resources>
      <labels/>
      <css>
         <cssitem location="inline" name="newcss" cachelocation="false">.nx-queue .nx-list-contents {
    min-height: 25px;
}

.nx-queue .nx-list-contents.ui-state-highlight {
    min-height: 100px;
}</cssitem>
      <cssitem location="inline" name="frame" cachelocation="false">#frames.frame{
    border: 2px solid #299fc5;
    padding: 5px;
}
</cssitem>
</css>
      <javascript>
         <jsitem location="inlinesnippet" name="Queue.ItemRenderer" cachelocation="false">var args = arguments[0],
    item = args.item,
    list = args.list,
    model = args.model,
    element = args.element,
    row = item.row,
    renderTemplate = 
        '&lt;img src="{{{Owner.SmallPhotoUrl}}}" width="20" height="20" style="margin-right: 8px;"/&gt;'
        + '{{Name}} ({{CloseDate}})',
    mergeSettings = {
        createFields: true,
        registerFields: true
    },
    $ = skuid.$;
    
element.html(
    skuid.utils.merge('row',renderTemplate,mergeSettings,model,row)
).
draggable({
    revert: 'invalid',
    appendTo : 'body',
helper : function() {
        var original = $(this);
        var helper = original.clone();
        // Pass along a reference to the current list's contents
        // so that we can compare lists
        // to ensure we're not allowing dropping on the current list
        original.data('listContents',list.contents);

helper.css({
'z-index' : 1000,
'width' : $(this).css('width'),
'height' : $(this).css('height'),
'border' : '1px black solid',
'padding' : '4px',
'background-color' : '#EEE',
'font-family': 'Arial,Helvetica,sans-serif',
'cursor':'move'
});

return helper; 
}
});</jsitem>
         <jsitem location="inline" name="Make Queue contents Droppable" cachelocation="false" url="">(function(skuid){
   
   // Global setting -- if true, then all changes will be immediately saved,
   // otherwise, changes will remain unsaved until you click Save.
   var SAVE_IMMEDIATELY = true;
    
   var $ = skuid.$;
   
    var getQueueList = function(queueElement){
        var queueList;
        $.each(skuid.model.list(),function(i,model){
           $.each(model.registeredEditors,function(){
              if (this.element.is(queueElement)) {
                  queueList = this.lists[0];
                  return false;
              } 
           });
           if (queueList) return false;
        });
        return queueList;
    };
   
   $(function(){
      $('.nx-queue').each(function(){
         var queue = $(this);
         var listContents = queue.find('.nx-list-contents');
         listContents.droppable({
            hoverClass: 'ui-state-highlight',
            accept: function(draggables) {
                // Do not accept draggables
                // that came from this list
                return (!listContents.is($(draggables[0]).data('listContents')));
            },
            drop: function(e,ui){
                var draggable = ui.draggable;
                
                var sourceItem = draggable.parent().data('object');
                
                // You will get a jQUery UI bug unless you detach the draggable.
                // We wait until now to detach in order to get a 
                draggable.detach();
                
                var sourceRow = sourceItem.row;
                var sourceRowId = sourceRow.Id;
                var sourceList = sourceItem.list;
                var sourceModel = sourceItem.list.model;
                
                var targetList = getQueueList(queue);
                var targetModel = targetList.model;
                
                targetModel.adoptRow(sourceRow);
                sourceModel.removeRowById(sourceRowId);
                
                var targetRow = targetModel.getRowById(sourceRowId);
                
                // Find the first Condition in our target Model,
                // and apply it to our target row.
                // (that is, change the Stage of the dragged Opportunity)
                var targetModelCondition = targetModel.conditions[0];
                targetModel.updateRow(
                    targetRow,
                    targetModelCondition.field,
                    targetModelCondition.value
                );
                
                if (SAVE_IMMEDIATELY) {
                    targetModel.save();
                }
                
                // Re-render just the Source List and the Target List
                sourceList.render();
                targetList.render();
                
            }
         });
      });
   });
   
})(skuid);</jsitem>
      </javascript>
   </resources>
</skuidpage>