stacked model conditions with "abort this model's query" not updating the SOQL when requeried

  • 1
  • Problem
  • Updated 2 years ago
  • Solved
I think this is similar to this bug that was resolved in the past, but my situation is a little different (I think) and I'm seeing unexpected behavior.  Model3 has conditions dependent on Model1 and Model2 as follows:

<conditions logic="">
    <condition type="modelmerge" value="" field="Id" operator="in" model="Model1" enclosevalueinquotes="true" mergefield="Id" novaluebehavior="noquery"/>
    <condition type="modelmerge" value="" field="Id" operator="in" model="Model2" enclosevalueinquotes="true" mergefield="Id" novaluebehavior="noquery"/>
</conditions>
When the models are initially queried and Model2 has rows, the Model3 results are as expected.  When I change some filters so that Model2 returns 0 rows, then empty and requery the three models (in order: 1, then 2, then 3), Model3 continues to show the data from the initial query.  This is not just a re-rendering issue.  I checked the models' data and SOQL in the javascript console; the list of IDs returned by the first query for Model2 are still in Model 3's SOQL where clause, despite Model2 being empty.
Photo of and thorough

and thorough

  • 736 Points 500 badge 2x thumb

Posted 2 years ago

  • 1
Photo of Stephen Sells

Stephen Sells, Official Rep

  • 16,856 Points 10k badge 2x thumb
Thanks for bringing this to the community.

I have two questions for you:

1.) What version of Skuid are you using?

2.) Can you paste this page's XML for us to analyze with any additional steps to reproduce that are necessary?
Photo of and thorough

and thorough

  • 736 Points 500 badge 2x thumb
Hi, Stephen.
  1. I'm using version 8.13.

  2. Below is the XML of my attempt at a simplified version of this page (sorry it is still kind of complicated) to try to isolate this issue; the page I am working with has a lot more to it, but I am able to see this error with the below as well.  A few things to note:
  • The FilterHolder model is functioning as a UI model to hold dates entered by the user and used in conditions in other models.
  • Episode__c is a child object to Contact.
  • The Episode__c date fields, Episode_Start_Date_fx__c and Date_closed__c, are used in conditions that reference the FilterHolder model UI-only fields StartDate and EndDate.
  • Model EpisodeStartDateInRp should return records with an Episode_Start_Date_fx__c value in the user-entered start/end date range.
  • Model EpisodeStartBeforeCloseInRp should return records with an Episode_Start_Date_fx__c value before the user-entered start date, and Date_closed__c value within the user-entered start/end date range.
To reproduce the error, you would need some dummy data with the Episode__c date fields in question (Episode_Start_Date_fx__c and Date_closed__c) populated. 
  1. Enter a valid date range in the Start Date and End Date UI fields (a range in which at least some records from Episode__c have Episode_Start_Date_fx__c and Date_closed__c values).
  2. Click the "Run Report" button (upper right).
  3. Results should appear in the table below.
  4. Enter a new date range where you know you do NOT have Episode__c records with either Episode_Start_Date_fx__c or Date_closed__c values.
  5. Click the "Run Report" button again.
When I do the above, where I know there were no Episode__c records with a Date_closed__c in the range entered in step 4, instead of 0 being returned in row 3 of the results, I am seeing the values from the date range entered in step 1.  If I enter:
skuid.model.getModel('EpisodeStartBeforeCloseInRp'); 
in the console after step 5, I see in the data section that it correctly returns 0 rows.  However, when I enter:
skuid.model.getModel('EpisodeFiltered_StartBeforeCloseInRp'); 
in the console, rows are returned and the SOQL section shows the IDs returned from the step 1 date range still in the second part of the WHERE clause.  This should not be the case, since condition 2 of model EpisodeFiltered_StartBeforeCloseInRp is dependent on model EpisodeStartBeforeCloseInRp (see row 121 in the XML).  

Hopefully this all makes sense.  Thank you for any help with this!

<skuidpage unsavedchangeswarning="yes" personalizationmode="server" showsidebar="false" showheader="false" cachepage="false">    <models>
        <!-- FILTER HOLDER -->
        <model id="FilterHolder" limit="1" query="false" createrowifnonefound="true" adapter="salesforce" type="" sobject="Account" doclone="" processonclient="false" unloadwarningifunsavedchanges="false">
            <fields>
                <field id="StartDate" uionly="true" displaytype="DATE" label="Start Date" defaultValue="2016-07-01"/>
                <field id="EndDate" uionly="true" displaytype="DATE" label="End Date" defaultValue="2016-12-31"/>
            </fields>
            <conditions/>
            <actions/>
        </model>
        <!-- CLIENTS SERVED: 1st pass: date-filtered only -->
        <model id="EpisodeStartDateInRp" limit="" query="false" createrowifnonefound="false" adapter="salesforce" type="" sobject="Episode__c" processonclient="false" orderby="" doclone="">
            <fields>
                <field id="Id"/>
                <field id="Contact__c"/>
            </fields>
            <conditions logic="">
                <condition type="modelmerge" value="" field="Episode_Start_Date_fx__c" operator="gte" model="FilterHolder" enclosevalueinquotes="false" mergefield="StartDate" novaluebehavior="noquery"/>
                <condition type="modelmerge" value="" field="Episode_Start_Date_fx__c" operator="lte" model="FilterHolder" enclosevalueinquotes="false" mergefield="EndDate" novaluebehavior="noquery"/>
            </conditions>
            <actions/>
            <groupby method="simple"/>
        </model>
        <model id="EpisodeStartBeforeCloseInRp" limit="" query="false" createrowifnonefound="false" adapter="salesforce" type="" sobject="Episode__c" processonclient="false" doclone="">
            <fields>
                <field id="Id"/>
                <field id="Contact__c"/>
            </fields>
            <conditions logic="">
                <condition type="modelmerge" value="" field="Episode_Start_Date_fx__c" operator="lt" model="FilterHolder" enclosevalueinquotes="false" mergefield="StartDate" novaluebehavior="noquery"/>
                <condition type="modelmerge" value="" field="Date_closed__c" operator="gte" model="FilterHolder" enclosevalueinquotes="false" mergefield="StartDate" novaluebehavior="noquery"/>
                <condition type="modelmerge" value="" field="Date_closed__c" operator="lte" model="FilterHolder" enclosevalueinquotes="false" mergefield="EndDate" novaluebehavior="noquery"/>
            </conditions>
            <actions/>
            <groupby method="simple"/>
        </model>
        <!-- TO APPLY TABLE FILTERS -->
        <model id="EpisodeAllInRp_Filterable" limit="" query="false" createrowifnonefound="false" adapter="salesforce" type="" sobject="Episode__c" processonclient="false" doclone="" orderby="Referral_Source_Type__c, Exit_Code__c, Reason_for_discharge__c">
            <fields>
                <field id="Id"/>
                <field id="Contact__c"/>
                <field id="Contact__r.Name"/>
                <field id="Status__c"/>
            </fields>
            <conditions logic="1 OR 2">
                <condition type="modelmerge" value="" field="Id" operator="in" model="EpisodeStartDateInRp" enclosevalueinquotes="true" mergefield="Id" novaluebehavior="noquery" state="" inactive="false"/>
                <condition type="modelmerge" value="" field="Id" operator="in" model="EpisodeStartBeforeCloseInRp" enclosevalueinquotes="true" mergefield="Id" novaluebehavior="deactivate" state="" inactive="false"/>
            </conditions>
            <actions>
                <action>
                    <actions>
                        <action type="blockUI" message="Loading part 2..."/>
                        <action type="blockUI" message="emptying models..."/>
                        <action type="emptyModelData">
                            <models>
                                <model>EpisodeFiltered_StartDateInRp</model>
                                <model>EpisodeFiltered_StartBeforeCloseInRp</model>
                                <model>ResultsHolder_ClientsServed</model>
                            </models>
                        </action>
                        <action type="blockUI" message="requerying..."/>
                        <action type="requeryModels" behavior="standard">
                            <models>
                                <model>EpisodeFiltered_StartDateInRp</model>
                                <model>EpisodeFiltered_StartBeforeCloseInRp</model>
                            </models>
                            <onerroractions>
                                <action type="blockUI" message="There was an error" timeout="3000"/>
                            </onerroractions>
                        </action>
                        <action type="blockUI" message="updating results..."/>
                        <action type="createRow" model="ResultsHolder_ClientsServed" appendorprepend="append" defaultmodefornewitems="read">
                            <defaults>
                                <default type="fieldvalue" field="Category" enclosevalueinquotes="true" value="Total served during reporting period (RP)"/>
                                <default type="fieldvalue" field="countEpisode" enclosevalueinquotes="false" value="{{$Model.EpisodeAllInRp_Filterable.data.length}}"/>
                            </defaults>
                        </action>
                        <action type="createRow" model="ResultsHolder_ClientsServed" appendorprepend="append" defaultmodefornewitems="read">
                            <defaults>
                                <default type="fieldvalue" field="Category" enclosevalueinquotes="true" value="Started during RP"/>
                                <default type="fieldvalue" field="countEpisode" enclosevalueinquotes="false" value="{{$Model.EpisodeFiltered_StartDateInRp.data.length}}"/>
                            </defaults>
                        </action>
                        <action type="createRow" model="ResultsHolder_ClientsServed" appendorprepend="append" defaultmodefornewitems="read">
                            <defaults>
                                <default type="fieldvalue" field="Category" enclosevalueinquotes="true" value="Closed during RP"/>
                                <default type="fieldvalue" field="countEpisode" enclosevalueinquotes="false" value="{{$Model.EpisodeFiltered_StartBeforeCloseInRp.data.length}}"/>
                            </defaults>
                        </action>
                        <action type="blockUI" message="done updating results..."/>
                        <action type="unblockUI"/>
                    </actions>
                    <events>
                        <event>models.loaded</event>
                    </events>
                </action>
            </actions>
            <groupby method="simple"/>
        </model>
        <!-- CLIENTS SERVED: 2nd pass: based on additional table filters applied to EpisodeAllInRp_Filterable -->
        <model id="EpisodeFiltered_StartDateInRp" limit="" query="false" createrowifnonefound="false" adapter="salesforce" type="" sobject="Episode__c" processonclient="false" doclone="">
            <fields>
                <field id="Id"/>
                <field id="Contact__c"/>
            </fields>
            <conditions logic="">
                <condition type="modelmerge" value="" field="Id" operator="in" model="EpisodeAllInRp_Filterable" enclosevalueinquotes="true" mergefield="Id" novaluebehavior="noquery"/>
                <condition type="modelmerge" value="" field="Id" operator="in" model="EpisodeStartDateInRp" enclosevalueinquotes="true" mergefield="Id" novaluebehavior="noquery"/>
            </conditions>
            <actions/>
            <groupby method="simple"/>
        </model>
        <model id="EpisodeFiltered_StartBeforeCloseInRp" limit="" query="false" createrowifnonefound="false" adapter="salesforce" type="" sobject="Episode__c" processonclient="false" doclone="">
            <fields>
                <field id="Id"/>
                <field id="Contact__c"/>
            </fields>
            <conditions logic="">
                <condition type="modelmerge" value="" field="Id" operator="in" model="EpisodeAllInRp_Filterable" enclosevalueinquotes="true" mergefield="Id" novaluebehavior="noquery"/>
                <condition type="modelmerge" value="" field="Id" operator="in" model="EpisodeStartBeforeCloseInRp" enclosevalueinquotes="true" mergefield="Id" novaluebehavior="noquery"/>
            </conditions>
            <actions/>
            <groupby method="simple"/>
        </model>
        <!-- RESULTS -->
        <model id="ResultsHolder_ClientsServed" limit="" query="false" createrowifnonefound="false" adapter="salesforce" type="" sobject="Account" doclone="" unloadwarningifunsavedchanges="false">
            <fields>
                <field id="Category" uionly="true" displaytype="TEXT" label="Category"/>
                <field id="countEpisode" uionly="true" displaytype="DOUBLE" label="# Cases" precision="9" scale="0"/>
                <field id="percentEpisodeFx" uionly="true" displaytype="FORMULA" label="% of total cases" readonly="true" returntype="PERCENT" precision="9" scale="0">
                    <formula>
                        (
                          {{countEpisode}}
                          / {{$Model.EpisodeAllInRp_Filterable.data.length}}
                        ) * 100
                    </formula>
                </field>
            </fields>
            <conditions/>
            <actions/>
        </model>
    </models>
    <components>
        <grid uniqueid="sk-XphlN-1144" cssclass="section">
            <divisions>
                <division behavior="flex" minwidth="100px" ratio="3" verticalalign="top">
                    <components>
                        <basicfieldeditor showheader="true" showsavecancel="false" showerrorsinline="true" model="FilterHolder" buttonposition="" uniqueid="sk-WMJ1p-420" mode="edit" layout="">
                            <columns>
                                <column width="100%">
                                    <sections>
                                        <section title="Reporting Period (RP)" collapsible="no">
                                            <fields>
                                                <columns layoutmode="fixed">
                                                    <column width="50%">
                                                        <sections>
                                                            <section title="New Section" collapsible="no" showheader="false">
                                                                <fields>
                                                                    <field id="StartDate" valuehalign="" type=""/>
                                                                </fields>
                                                            </section>
                                                        </sections>
                                                    </column>
                                                    <column width="50%">
                                                        <sections>
                                                            <section title="New Section" collapsible="no" showheader="false">
                                                                <fields>
                                                                    <field id="EndDate" valuehalign="" type=""/>
                                                                </fields>
                                                            </section>
                                                        </sections>
                                                    </column>
                                                </columns>
                                            </fields>
                                        </section>
                                    </sections>
                                </column>
                            </columns>
                        </basicfieldeditor>
                        <skootable showconditions="true" showsavecancel="false" showerrorsinline="true" searchmethod="server" searchbox="false" showexportbuttons="false" pagesize="5" createrecords="false" model="EpisodeAllInRp_Filterable" buttonposition="" mode="readonly" uniqueid="sk-1FShSf-790" emptysearchbehavior="query" cssclass="noFooter noBody">
                            <fields/>
                            <rowactions/>
                            <massactions usefirstitemasdefault="true"/>
                            <views>
                                <view type="standard"/>
                            </views>
                            <searchfields/>
                            <filters>
                                <filter type="multiselect" filteroffoptionlabel="All Case Statuses Included" createfilteroffoption="true" affectcookies="false" autocompthreshold="25" conditionsource="auto" labelmode="manual" conditionfield="Status__c" conditionoperator="in" label="Statuses Included"/>
                            </filters>
                            <renderconditions logictype="and">
                                <rendercondition type="fieldvalue" enclosevalueinquotes="true" fieldmodel="EpisodeStartDateInRp" sourcetype="modelproperty" nosourcerowbehavior="deactivate" sourceproperty="hasRows"/>
                            </renderconditions>
                        </skootable>
                    </components>
                </division>
                <division behavior="flex" verticalalign="top" minwidth="100px" ratio="1">
                    <components>
                        <pagetitle model="FilterHolder" uniqueid="sk-WmOwd-1870">
                            <actions>
                                <action type="multi" label="Run Report" icon="fa-refresh">
                                    <actions>
                                        <action type="blockUI" message="Loading part 1..."/>
                                        <action type="blockUI" message="emptying part 1 models..."/>
                                        <action type="emptyModelData">
                                            <models>
                                                <model>EpisodeStartDateInRp</model>
                                                <model>EpisodeStartBeforeCloseInRp</model>
                                            </models>
                                        </action>
                                        <action type="blockUI" message="requerying part 1 models..."/>
                                        <action type="requeryModels" behavior="standard">
                                            <models>
                                                <model>EpisodeStartDateInRp</model>
                                                <model>EpisodeStartBeforeCloseInRp</model>
                                            </models>
                                            <onerroractions>
                                                <action type="blockUI" message="There was an error" timeout="3000"/>
                                            </onerroractions>
                                        </action>
                                        <action type="blockUI" message="emptying filterable model..."/>
                                        <action type="emptyModelData">
                                            <models>
                                                <model>EpisodeAllInRp_Filterable</model>
                                            </models>
                                        </action>
                                        <action type="blockUI" message="requerying filterable model..."/>
                                        <action type="requeryModels" behavior="standard">
                                            <models>
                                                <model>EpisodeAllInRp_Filterable</model>
                                            </models>
                                            <onerroractions>
                                                <action type="blockUI" message="There was an error" timeout="3000"/>
                                            </onerroractions>
                                        </action>
                                        <action type="blockUI" message="done requerying filterable model..."/>
                                        <action type="unblockUI"/>
                                    </actions>
                                    <renderconditions logictype="and"/>
                                    <enableconditions/>
                                </action>
                            </actions>
                        </pagetitle>
                    </components>
                </division>
            </divisions>
            <styles>
                <styleitem type="background" bgtype="none"/>
            </styles>
        </grid>
        <wrapper uniqueid="sk-1MuYPq-1183" cssclass="majorSection">
            <components>
                <template multiple="false" uniqueid="sk-aAIKw-1448" cssclass="title1">
                    <contents>Clients Served</contents>
                </template>
                <skootable showconditions="true" showsavecancel="false" showerrorsinline="true" searchmethod="server" searchbox="false" showexportbuttons="false" pagesize="all" createrecords="false" model="ResultsHolder_ClientsServed" buttonposition="" mode="readonly" uniqueid="sk-1KCTPO-1909" emptysearchbehavior="query" cssclass="modifiedDataAsNormalText tableFirstRowEmph">
                    <fields>
                        <field id="Category"/>
                        <field id="countEpisode" decimalplaces="" valuehalign="right" type=""/>
                        <field id="percentEpisodeFx" decimalplaces="" valuehalign="right" type=""/>
                    </fields>
                    <rowactions/>
                    <massactions usefirstitemasdefault="true"/>
                    <views>
                        <view type="standard"/>
                    </views>
                    <searchfields/>
                    <renderconditions logictype="and"/>
                </skootable>
            </components>
            <styles>
                <styleitem type="background"/>
                <styleitem type="border"/>
                <styleitem type="size"/>
            </styles>
        </wrapper>
    </components>
    <resources>
        <labels/>
        <javascript>
            <jsitem location="staticresource" name="CustomJavascriptForSkuidPages" cachelocation="false" url="" namespace="">var params = arguments[0],
    $ = skuid.$;
</jsitem>
        </javascript>
        <css>
            <cssitem location="staticresource" name="CustomCssForSkuidPages" cachelocation="false" url="" namespace=""/>
        </css>
    </resources>
    <styles>
        <styleitem type="background" bgtype="none"/>
    </styles>
</skuidpage>
Photo of Stephen Sells

Stephen Sells, Official Rep

  • 16,856 Points 10k badge 2x thumb
I've been trying to wrap my head around the issue you're describing. Because of the custom objects in the XML, it makes navigating through the page difficult. If it's possible to recreate this page without custom objects, that will make troubleshooting remarkably easier.

If you wouldn't mind, which models are Model 1, Model 2, Model 3? 

However, I'll go ahead and tell you where I'm theorizing the problem may be laying:
1. I think it might be requerying loop.
2. It might be that you're trying to requery a UI Only model/field.
3. 8.13 was a long time ago. We've had a good bit of things change since then. 
Photo of and thorough

and thorough

  • 736 Points 500 badge 2x thumb
OK, below is a version of the page using the Contact standard object instead of my Episode__c custom object.  I changed some model names and used standard fields, so the contrived Contact example is a little different but same concepts.  Regarding your questions:
  • Model 1 = EpisodeAllInRp_Filterable = ContactAllInRp_Filterable (in below new example using contact)
  • Model 2 = EpisodeStartBeforeCloseInRp = ContactBirthdateBeforeRp (in below)
  • Model 3 = EpisodeFiltered_StartBeforeCloseInRp = ContactFiltered_BirthdateBeforeRp (in below)
I am not requerying any UI-only models or fields as far as I know.  The two models acting as UI models are FilterHolder and ResultsHolder_ClientsServed and these do not get queried or requeried.  (In the version of Skuid I have, UI-only models are not an option, so I am using models based on Account and adding new rows as a stand-in for a UI-only model setup, but not querying it.)  

To your last point, which version of Skuid should I be on?  Honestly, I got a little confused by the list of releases when Brooklyn came out as to which one was stable, and was a bit concerned by some of the initial bug reports posted here.  I was in the middle of a time-sensitive project at the time and afraid to risk breaking pages that I knew I wouldn't have time to appropriately test in the new version.  (Unfortunately, due to the nature of my work, this is often the case -- I think I'm still on the version of Skuid I started with when I first installed this for my organization.)

By the way, I noticed in testing the below example, the issue of stale data persists when any condition (birthdates in the date range, birthdates before the date range, or applying the lead sources filter) returns any rows in the first run, followed by what should be 0 in the next.  The previous values appear instead of 0.  But when a second run returns values greater than 0, the displayed values update correctly.

<skuidpage unsavedchangeswarning="yes" personalizationmode="server" showsidebar="false" showheader="false" cachepage="false">    <models>
        <!-- FILTER HOLDER -->
        <model id="FilterHolder" limit="1" query="false" createrowifnonefound="true" adapter="salesforce" type="" sobject="Account" doclone="" processonclient="false" unloadwarningifunsavedchanges="false">
            <fields>
                <field id="StartDate" uionly="true" displaytype="DATE" label="Start Date" defaultValue="2016-07-01"/>
                <field id="EndDate" uionly="true" displaytype="DATE" label="End Date" defaultValue="2016-12-31"/>
            </fields>
            <conditions/>
            <actions/>
        </model>
        <!-- CLIENTS SERVED: 1st pass: date-filtered only -->
        <model id="ContactBirthdateInRp" limit="" query="false" createrowifnonefound="false" adapter="salesforce" type="" sobject="Contact" processonclient="false" orderby="" doclone="">
            <fields>
                <field id="Id"/>
            </fields>
            <conditions logic="">
                <condition type="modelmerge" value="" field="Birthdate" operator="gte" model="FilterHolder" enclosevalueinquotes="false" mergefield="StartDate" novaluebehavior="noquery"/>
                <condition type="modelmerge" value="" field="Birthdate" operator="lte" model="FilterHolder" enclosevalueinquotes="false" mergefield="EndDate" novaluebehavior="noquery"/>
            </conditions>
            <actions/>
            <groupby method="simple"/>
        </model>
        <model id="ContactBirthdateBeforeRp" limit="" query="false" createrowifnonefound="false" adapter="salesforce" type="" sobject="Contact" processonclient="false" doclone="">
            <fields>
                <field id="Id"/>
            </fields>
            <conditions logic="">
                <condition type="modelmerge" value="" field="Birthdate" operator="lt" model="FilterHolder" enclosevalueinquotes="false" mergefield="StartDate" novaluebehavior="noquery"/>
            </conditions>
            <actions/>
            <groupby method="simple"/>
        </model>
        <!-- TO APPLY TABLE FILTERS -->
        <model id="ContactAllInRp_Filterable" limit="" query="false" createrowifnonefound="false" adapter="salesforce" type="" sobject="Contact" processonclient="false" doclone="">
            <fields>
                <field id="Id"/>
                <field id="LeadSource"/>
            </fields>
            <conditions logic="1 OR 2">
                <condition type="modelmerge" value="" field="Id" operator="in" model="ContactBirthdateInRp" enclosevalueinquotes="true" mergefield="Id" novaluebehavior="noquery" state="" inactive="false"/>
                <condition type="modelmerge" value="" field="Id" operator="in" model="ContactBirthdateBeforeRp" enclosevalueinquotes="true" mergefield="Id" novaluebehavior="deactivate" state="" inactive="false"/>
            </conditions>
            <actions>
                <action>
                    <actions>
                        <action type="blockUI" message="Loading part 2..."/>
                        <action type="blockUI" message="emptying models..."/>
                        <action type="emptyModelData">
                            <models>
                                <model>ContactFiltered_BirthdateInRp</model>
                                <model>ContactFiltered_BirthdateBeforeRp</model>
                                <model>ResultsHolder_ClientsServed</model>
                            </models>
                        </action>
                        <action type="blockUI" message="requerying..."/>
                        <action type="requeryModels" behavior="standard">
                            <models>
                                <model>ContactFiltered_BirthdateInRp</model>
                                <model>ContactFiltered_BirthdateBeforeRp</model>
                            </models>
                            <onerroractions>
                                <action type="blockUI" message="There was an error" timeout="3000"/>
                            </onerroractions>
                        </action>
                        <action type="blockUI" message="updating results..."/>
                        <action type="createRow" model="ResultsHolder_ClientsServed" appendorprepend="append" defaultmodefornewitems="read">
                            <defaults>
                                <default type="fieldvalue" field="Category" enclosevalueinquotes="true" value="Total with birthdates in or before reporting period (RP)"/>
                                <default type="fieldvalue" field="countContact" enclosevalueinquotes="false" value="{{$Model.ContactAllInRp_Filterable.data.length}}"/>
                            </defaults>
                        </action>
                        <action type="createRow" model="ResultsHolder_ClientsServed" appendorprepend="append" defaultmodefornewitems="read">
                            <defaults>
                                <default type="fieldvalue" field="Category" enclosevalueinquotes="true" value="Birthdate in RP"/>
                                <default type="fieldvalue" field="countContact" enclosevalueinquotes="false" value="{{$Model.ContactFiltered_BirthdateInRp.data.length}}"/>
                            </defaults>
                        </action>
                        <action type="createRow" model="ResultsHolder_ClientsServed" appendorprepend="append" defaultmodefornewitems="read">
                            <defaults>
                                <default type="fieldvalue" field="Category" enclosevalueinquotes="true" value="Birthdate before RP"/>
                                <default type="fieldvalue" field="countContact" enclosevalueinquotes="false" value="{{$Model.ContactFiltered_BirthdateBeforeRp.data.length}}"/>
                            </defaults>
                        </action>
                        <action type="blockUI" message="done updating results..."/>
                        <action type="unblockUI"/>
                    </actions>
                    <events>
                        <event>models.loaded</event>
                    </events>
                </action>
            </actions>
            <groupby method="simple"/>
        </model>
        <!-- CLIENTS SERVED: 2nd pass: based on additional table filters applied to ContactAllInRp_Filterable -->
        <model id="ContactFiltered_BirthdateInRp" limit="" query="false" createrowifnonefound="false" adapter="salesforce" type="" sobject="Contact" processonclient="false" doclone="">
            <fields>
                <field id="Id"/>
            </fields>
            <conditions logic="">
                <condition type="modelmerge" value="" field="Id" operator="in" model="ContactAllInRp_Filterable" enclosevalueinquotes="true" mergefield="Id" novaluebehavior="noquery"/>
                <condition type="modelmerge" value="" field="Id" operator="in" model="ContactBirthdateInRp" enclosevalueinquotes="true" mergefield="Id" novaluebehavior="noquery"/>
            </conditions>
            <actions/>
            <groupby method="simple"/>
        </model>
        <model id="ContactFiltered_BirthdateBeforeRp" limit="" query="false" createrowifnonefound="false" adapter="salesforce" type="" sobject="Contact" processonclient="false" doclone="">
            <fields>
                <field id="Id"/>
            </fields>
            <conditions logic="">
                <condition type="modelmerge" value="" field="Id" operator="in" model="ContactAllInRp_Filterable" enclosevalueinquotes="true" mergefield="Id" novaluebehavior="noquery"/>
                <condition type="modelmerge" value="" field="Id" operator="in" model="ContactBirthdateBeforeRp" enclosevalueinquotes="true" mergefield="Id" novaluebehavior="noquery"/>
            </conditions>
            <actions/>
            <groupby method="simple"/>
        </model>
        <!-- RESULTS -->
        <model id="ResultsHolder_ClientsServed" limit="" query="false" createrowifnonefound="false" adapter="salesforce" type="" sobject="Account" doclone="" unloadwarningifunsavedchanges="false">
            <fields>
                <field id="Category" uionly="true" displaytype="TEXT" label="Category"/>
                <field id="countContact" uionly="true" displaytype="DOUBLE" label="# Contacts" precision="9" scale="0"/>
                <field id="percentContactFx" uionly="true" displaytype="FORMULA" label="% of total contacts" readonly="true" returntype="PERCENT" precision="9" scale="0">
                    <formula>
                        (
                          {{countContact}}
                          / {{$Model.ContactAllInRp_Filterable.data.length}}
                        ) * 100
                    </formula>
                </field>
            </fields>
            <conditions/>
            <actions/>
        </model>
    </models>
    <components>
        <grid uniqueid="sk-XphlN-1144" cssclass="section">
            <divisions>
                <division behavior="flex" minwidth="100px" ratio="3" verticalalign="top">
                    <components>
                        <basicfieldeditor showheader="true" showsavecancel="false" showerrorsinline="true" model="FilterHolder" buttonposition="" uniqueid="sk-WMJ1p-420" mode="edit" layout="">
                            <columns>
                                <column width="100%">
                                    <sections>
                                        <section title="Reporting Period (RP)" collapsible="no">
                                            <fields>
                                                <columns layoutmode="fixed">
                                                    <column width="50%">
                                                        <sections>
                                                            <section title="New Section" collapsible="no" showheader="false">
                                                                <fields>
                                                                    <field id="StartDate" valuehalign="" type=""/>
                                                                </fields>
                                                            </section>
                                                        </sections>
                                                    </column>
                                                    <column width="50%">
                                                        <sections>
                                                            <section title="New Section" collapsible="no" showheader="false">
                                                                <fields>
                                                                    <field id="EndDate" valuehalign="" type=""/>
                                                                </fields>
                                                            </section>
                                                        </sections>
                                                    </column>
                                                </columns>
                                            </fields>
                                        </section>
                                    </sections>
                                </column>
                            </columns>
                        </basicfieldeditor>
                        <skootable showconditions="true" showsavecancel="false" showerrorsinline="true" searchmethod="server" searchbox="false" showexportbuttons="false" pagesize="5" createrecords="false" model="ContactAllInRp_Filterable" buttonposition="" mode="readonly" uniqueid="sk-1FShSf-790" emptysearchbehavior="query" cssclass="noFooter noBody">
                            <fields/>
                            <rowactions/>
                            <massactions usefirstitemasdefault="true"/>
                            <views>
                                <view type="standard"/>
                            </views>
                            <searchfields/>
                            <filters>
                                <filter type="multiselect" filteroffoptionlabel="All Lead Sources Included" createfilteroffoption="true" affectcookies="false" autocompthreshold="25" conditionsource="auto" labelmode="manual" conditionfield="LeadSource" conditionoperator="in" label="Lead Sources Included"/>
                            </filters>
                            <renderconditions logictype="and">
                                <rendercondition type="fieldvalue" enclosevalueinquotes="true" fieldmodel="ContactBirthdateInRp" sourcetype="modelproperty" nosourcerowbehavior="deactivate" sourceproperty="hasRows"/>
                            </renderconditions>
                        </skootable>
                    </components>
                </division>
                <division behavior="flex" verticalalign="top" minwidth="100px" ratio="1">
                    <components>
                        <pagetitle model="FilterHolder" uniqueid="sk-WmOwd-1870">
                            <actions>
                                <action type="multi" label="Run Report" icon="fa-refresh">
                                    <actions>
                                        <action type="blockUI" message="Loading part 1..."/>
                                        <action type="blockUI" message="emptying part 1 models..."/>
                                        <action type="emptyModelData">
                                            <models>
                                                <model>ContactBirthdateInRp</model>
                                                <model>ContactBirthdateBeforeRp</model>
                                            </models>
                                        </action>
                                        <action type="blockUI" message="requerying part 1 models..."/>
                                        <action type="requeryModels" behavior="standard">
                                            <models>
                                                <model>ContactBirthdateInRp</model>
                                                <model>ContactBirthdateBeforeRp</model>
                                            </models>
                                            <onerroractions>
                                                <action type="blockUI" message="There was an error" timeout="3000"/>
                                            </onerroractions>
                                        </action>
                                        <action type="blockUI" message="emptying filterable model..."/>
                                        <action type="emptyModelData">
                                            <models>
                                                <model>ContactAllInRp_Filterable</model>
                                            </models>
                                        </action>
                                        <action type="blockUI" message="requerying filterable model..."/>
                                        <action type="requeryModels" behavior="standard">
                                            <models>
                                                <model>ContactAllInRp_Filterable</model>
                                            </models>
                                            <onerroractions>
                                                <action type="blockUI" message="There was an error" timeout="3000"/>
                                            </onerroractions>
                                        </action>
                                        <action type="blockUI" message="done requerying filterable model..."/>
                                        <action type="unblockUI"/>
                                    </actions>
                                    <renderconditions logictype="and"/>
                                    <enableconditions/>
                                </action>
                            </actions>
                        </pagetitle>
                    </components>
                </division>
            </divisions>
            <styles>
                <styleitem type="background" bgtype="none"/>
            </styles>
        </grid>
        <wrapper uniqueid="sk-1MuYPq-1183" cssclass="majorSection">
            <components>
                <template multiple="false" uniqueid="sk-aAIKw-1448" cssclass="title1">
                    <contents>Clients</contents>
                </template>
                <skootable showconditions="true" showsavecancel="false" showerrorsinline="true" searchmethod="server" searchbox="false" showexportbuttons="false" pagesize="all" createrecords="false" model="ResultsHolder_ClientsServed" buttonposition="" mode="readonly" uniqueid="sk-1KCTPO-1909" emptysearchbehavior="query" cssclass="modifiedDataAsNormalText tableFirstRowEmph">
                    <fields>
                        <field id="Category"/>
                        <field id="countContact" decimalplaces="" valuehalign="right" type=""/>
                        <field id="percentContactFx" decimalplaces="" valuehalign="right" type=""/>
                    </fields>
                    <rowactions/>
                    <massactions usefirstitemasdefault="true"/>
                    <views>
                        <view type="standard"/>
                    </views>
                    <searchfields/>
                    <renderconditions logictype="and"/>
                </skootable>
            </components>
            <styles>
                <styleitem type="background"/>
                <styleitem type="border"/>
                <styleitem type="size"/>
            </styles>
        </wrapper>
    </components>
    <resources>
        <labels/>
        <javascript>
            <jsitem location="staticresource" name="CustomJavascriptForSkuidPages" cachelocation="false" url="" namespace="">var params = arguments[0],
    $ = skuid.$;
</jsitem>
        </javascript>
        <css>
            <cssitem location="staticresource" name="CustomCssForSkuidPages" cachelocation="false" url="" namespace=""/>
        </css>
    </resources>
    <styles>
        <styleitem type="background" bgtype="none"/>
    </styles>
</skuidpage>
Photo of Stephen Sells

Stephen Sells, Official Rep

  • 16,856 Points 10k badge 2x thumb
I have been able to reproduce your problem in an earlier version of Rockaway but the problem has been resolved on 8.15.16 - Rockaway Iteration 14 and higher. 

You can download the upgrade here.

As a reminder, Salesforce does NOT allow reverting back to prior versions of managed packages. Skuid always recommends installing new versions in a non-business critical sandbox environment to test all mission critical functionality before installing into a production environment. We also recommend that you update out of date themes when you upgrade.
Photo of and thorough

and thorough

  • 736 Points 500 badge 2x thumb
Thank you for looking into this.  I upgraded to the latest version in a sandbox and am testing my pages.
Photo of Stephen Sells

Stephen Sells, Official Rep

  • 16,856 Points 10k badge 2x thumb
Please let us know if you have issues with it.