Potential bug applying conditions via javascript on Skuid Platform

  • 1
  • Problem
  • Updated 11 months ago
  • In Progress
This issue relates to this thread: https://community.skuid.com/skuid/topics/ui-only-picklist-options-that-are-values-from-a-field-on-an...

I was able to get John's recommended code working on the latest version of Skuid for Salesforce, but when I try to implement on Skuid Platform it doesn't work. I'm thinking there might be a bug with how Skuid Platform is applying the model conditions via javascript. Basically nothing happens when the javascript is run and the conditions should have been applied.

Here is sample code for Skuid Platform (change the datasource) to reproduce the issue:
<skuidpage unsavedchangeswarning="yes" personalizationmode="server" showsidebar="true" showheader="true">
	<models>
		<model id="Filter" query="false" createrowifnonefound="false" datasource="ENTER_SALESFORCE_DATASOURCE" processonclient="true" type="" sobject="Account" limit="1" uniqueid="sk-pNJKb-264">
			<fields>
				<field id="Id" accessible="true" createable="false" editable="false" filterable="true" groupable="true" sortable="true" displaytype="ID" label="Account ID"/>
				<field id="Industry" accessible="true" createable="true" editable="true" filterable="true" groupable="true" sortable="true" length="40" displaytype="PICKLIST" label="Industry"/>
			</fields>
			<conditions>
				<condition type="fieldvalue" value="" enclosevalueinquotes="true" field="Industry" state="filterableoff" inactive="true" name="Industry"/>
			</conditions>
			<actions>
				<action>
					<actions>
						<action type="blockUI" message="Applying..."/>
						<action type="custom">
							<onerroractions>
								<action type="blockUI" message="There was an error" timeout="3000"/>
							</onerroractions>
						</action>
						<action type="requeryModel" model="Account" behavior="standard">
							<onerroractions>
								<action type="blockUI" message="There was an error" timeout="3000"/>
							</onerroractions>
						</action>
						<action type="unblockUI"/>
					</actions>
					<events>
						<event>models.loaded</event>
					</events>
				</action>
			</actions>
		</model>
		<model id="Account" query="true" createrowifnonefound="false" datasource="Alignly_SFDC_DEV" processonclient="true" type="" sobject="Account" limit="50" uniqueid="sk-pNJKb-264">
			<fields>
				<field id="Id" accessible="true" createable="false" editable="false" filterable="true" groupable="true" sortable="true" displaytype="ID" label="Account ID"/>
				<field id="Industry" accessible="true" createable="true" editable="true" filterable="true" groupable="true" sortable="true" length="40" displaytype="PICKLIST" label="Industry"/>
				<field id="Name" accessible="true" createable="true" editable="true" filterable="true" groupable="true" namefield="true" required="true" sortable="true" length="255" displaytype="STRING" label="Account Name"/>
			</fields>
			<conditions>
				<condition type="fieldvalue" value="" enclosevalueinquotes="true" field="Industry" state="filterableoff" inactive="true" name="Industry"/>
			</conditions>
			<actions/>
		</model>
	</models>
	<components>
		<filterset searchmethod="server" searchbox="true" uniqueid="sk-pMHJn-162" model="Filter" position="right" emptysearchbehavior="query">
			<filters>
				<filter type="select" filteroffoptionlabel="All Industries" createfilteroffoption="true" affectcookies="true" autocompthreshold="25" conditionsource="manual" filtermethod="server" labelmode="manual" condition="Industry" label="Industry">
					<sources>
						<source type="metadata" effectsbehavior="justdefault"/>
					</sources>
				</filter>
			</filters>
			<searchfields/>
		</filterset>
		<skootable showconditions="true" showsavecancel="true" showerrorsinline="true" searchmethod="server" searchbox="true" showexportbuttons="false" pagesize="50" alwaysresetpagination="false" createrecords="false" buttonposition="" mode="read" allowcolumnreordering="true" responsive="true" uniqueid="sk-pMI80-166" model="Account">
			<fields>
				<field id="Name" hideable="true" uniqueid="fi-pNdYe-454" valuehalign="" type=""/>
				<field id="Industry" hideable="true" uniqueid="fi-pNdy5-466" valuehalign="" type=""/>
			</fields>
			<rowactions/>
			<massactions usefirstitemasdefault="true"/>
			<views>
				<view type="standard"/>
			</views>
			<renderconditions logictype="and"/>
			<searchfields/>
		</skootable>
	</components>
	<resources>
		<labels/>
		<javascript>
			<jsitem location="inlinesnippet" name="crossFilter" cachelocation="false" url="">var $ = skuid.$,
    Filter_Model = skuid.$M('Filter');
    Account_Model = skuid.$M('Account');
    
    $.each(Filter_Model.conditions, function(i,condition){
        
        var priConditionName = condition.name,
            basicCondition1 = Account_Model.getConditionByName(priConditionName);
        if(condition.inactive) {
            Account_Model.deactivateCondition(basicCondition1);
        } else {            
            Account_Model.activateCondition(basicCondition1);
            Account_Model.setCondition(basicCondition1,condition.value);
        }

    });</jsitem>
		</javascript>
		<css/>
		<actionsequences uniqueid="sk-pNJKb-263"/>
	</resources>
	<styles>
		<styleitem type="background" bgtype="none"/>
	</styles>
</skuidpage>
Photo of Andrew N

Andrew N

  • 1,178 Points 1k badge 2x thumb

Posted 11 months ago

  • 1
Photo of Zach McElrath

Zach McElrath, Employee

  • 48,984 Points 20k badge 2x thumb
Based on what I can see, the "crossFilter" Snippet is not being invoked by anything in your Skuid Page. When are you trying to have this Snippet invoked? As a result of a Model Action / button click? If so, you will need to configure the Model Action / Button to invoke the Snippet using the "Run Snippet" action type.
Photo of Andrew N

Andrew N

  • 1,178 Points 1k badge 2x thumb
Zach - I appreciate the reply and sorry for the delay in the follow-up. In my haste building out a sample page, I included the "Run Snippet" but forgot to select the actual snippet. Here's the sample code where I'm still having the issue.  The actions are on the "Filter" model and are run when the model is requeried (filter is applied).



<skuidpage unsavedchangeswarning="yes" personalizationmode="server" showsidebar="true" showheader="true">
	<models>
		<model id="Filter" query="false" createrowifnonefound="false" datasource="ENTER_SALESFORCE_DATASOURCE" processonclient="true" type="" sobject="Account" limit="1" uniqueid="sk-pNJKb-264">
			<fields>
				<field id="Id" accessible="true" createable="false" editable="false" filterable="true" groupable="true" sortable="true" displaytype="ID" label="Account ID"/>
				<field id="Industry" accessible="true" createable="true" editable="true" filterable="true" groupable="true" sortable="true" length="40" displaytype="PICKLIST" label="Industry"/>
			</fields>
			<conditions>
				<condition type="multiple" value="" field="Industry" state="filterableoff" inactive="true" name="Industry" operator="in" enclosevalueinquotes="true">
					<values>
						<value/>
					</values>
				</condition>
				<condition type="multiple" field="Industry" operator="in" inactive="true" enclosevalueinquotes="true" name="__autofilter__Industry" state="filterableoff" value=""/>
			</conditions>
			<actions>
				<action>
					<actions>
						<action type="blockUI" message="Applying..."/>
						<action type="custom" snippet="crossFilter">
							<onerroractions>
								<action type="blockUI" message="There was an error" timeout="3000"/>
							</onerroractions>
						</action>
						<action type="requeryModel" model="Account" behavior="standard">
							<onerroractions>
								<action type="blockUI" message="There was an error" timeout="3000"/>
							</onerroractions>
						</action>
						<action type="unblockUI"/>
					</actions>
					<events>
						<event>models.loaded</event>
					</events>
				</action>
			</actions>
		</model>
		<model id="Account" query="true" createrowifnonefound="false" datasource="Alignly_SFDC_DEV" processonclient="true" type="" sobject="Account" limit="50" uniqueid="sk-pNJKb-264">
			<fields>
				<field id="Id" accessible="true" createable="false" editable="false" filterable="true" groupable="true" sortable="true" displaytype="ID" label="Account ID"/>
				<field id="Industry" accessible="true" createable="true" editable="true" filterable="true" groupable="true" sortable="true" length="40" displaytype="PICKLIST" label="Industry"/>
				<field id="Name" accessible="true" createable="true" editable="true" filterable="true" groupable="true" namefield="true" required="true" sortable="true" length="255" displaytype="STRING" label="Account Name"/>
			</fields>
			<conditions>
				<condition type="multiple" value="" field="Industry" state="filterableoff" inactive="true" name="Industry" operator="in" enclosevalueinquotes="true">
					<values>
						<value/>
					</values>
				</condition>
			</conditions>
			<actions/>
		</model>
	</models>
	<components>
		<filterset searchmethod="server" searchbox="true" uniqueid="sk-pMHJn-162" model="Filter" position="right" emptysearchbehavior="query">
			<filters>
				<filter type="multiselect" filteroffoptionlabel="All Industries" createfilteroffoption="true" affectcookies="true" autocompthreshold="25" conditionsource="auto" filtermethod="server" labelmode="manual" condition="Industry" label="Industry" conditionfield="Industry" conditionoperator="in"/>
			</filters>
			<searchfields/>
		</filterset>
		<skootable showconditions="true" showsavecancel="true" showerrorsinline="true" searchmethod="server" searchbox="true" showexportbuttons="false" pagesize="50" alwaysresetpagination="false" createrecords="false" buttonposition="" mode="read" allowcolumnreordering="true" responsive="true" uniqueid="sk-pMI80-166" model="Account">
			<fields>
				<field id="Name" hideable="true" uniqueid="fi-pNdYe-454" valuehalign="" type=""/>
				<field id="Industry" hideable="true" uniqueid="fi-pNdy5-466" valuehalign="" type=""/>
			</fields>
			<rowactions/>
			<massactions usefirstitemasdefault="true"/>
			<views>
				<view type="standard"/>
			</views>
			<renderconditions logictype="and"/>
			<searchfields/>
		</skootable>
	</components>
	<resources>
		<labels/>
		<javascript>
			<jsitem location="inlinesnippet" name="crossFilter" cachelocation="false" url="">var $ = skuid.$,
    Filter_Model = skuid.$M('Filter');
    Account_Model = skuid.$M('Account');
    
    $.each(Filter_Model.conditions, function(i,condition){
        
        var priConditionName = condition.name,
            basicCondition1 = Account_Model.getConditionByName(priConditionName);
        if(condition.inactive) {
            Account_Model.deactivateCondition(basicCondition1);
        } else {            
            Account_Model.activateCondition(basicCondition1);
            Account_Model.setCondition(basicCondition1,condition.value);
        }

    });</jsitem>
		</javascript>
		<css/>
		<actionsequences uniqueid="sk-pNJKb-263"/>
	</resources>
	<styles>
		<styleitem type="background" bgtype="none"/>
	</styles>
</skuidpage>