-
-
Save zachelrath/4eef2eceaa2d56be9cf2 to your computer and use it in GitHub Desktop.
<skuidpage showsidebar="true" showheader="true"> | |
<models> | |
<model id="DummyUserModel" datasource="salesforce" sobject="User" limit="1" query="false"/> | |
</models> | |
<components> | |
<custom name="DynamicTableAndModel"/> | |
</components> | |
<resources> | |
<labels/> | |
<javascript> | |
<jsitem location="inlinecomponent" name="DynamicTableAndModel" cachelocation="false" url="">var element = arguments[0], | |
$ = skuid.$, | |
$xml = skuid.utils.makeXMLDoc; | |
// Add some content to our area while we are loading it in | |
element.html('Loading...'); | |
// Define our Model(s) | |
var allModels = []; | |
var OppModel = new skuid.model.Model({ | |
dataSourceName: "salesforce", | |
objectName: "Opportunity", | |
id: "OpportunityData", | |
recordsLimit: 20, | |
fields: [ | |
{ id: 'Name' }, | |
{ id: 'AccountId' }, | |
{ id: 'Account.Name' }, | |
{ id: 'StageName' }, | |
{ id: 'Amount' }, | |
{ id: 'CloseDate' }, | |
{ id: 'OwnerId' }, | |
{ id: 'Owner.Name' }, | |
], | |
conditions: [ | |
{ | |
type: 'fieldvalue', | |
field: 'StageName', | |
operator: '=', | |
value: '', | |
state: 'filterableoff', | |
inactive: true, | |
name: 'StageName', | |
encloseValueInQuotes: true | |
}, | |
], | |
}); | |
allModels.push(OppModel); | |
// Initialize each of our Models | |
// so that they have index maps created | |
// and other internal guts, | |
// then register them with Skuid | |
// so that Skuid officially knows about them | |
$.each(allModels,function(){ | |
// Register each of our Models with Skuid | |
this.initialize().register(); | |
}); | |
// Define the XML for the component we want to show in our element, | |
// which we'll instantiate once our Models are loaded | |
var xmlDefinition = $xml( | |
'<skootable showconditions="true" showsavecancel="true" searchmethod="server" searchbox="true" showexportbuttons="false" pagesize="10" createrecords="true" model="OpportunityData" mode="read"/>' | |
).append( | |
$xml('<fields/>').append( | |
$xml('<field id="Name" allowordering="true"/>'), | |
$xml('<field id="AccountId"/>'), | |
$xml('<field id="StageName"/>'), | |
$xml('<field id="Amount"/>'), | |
$xml('<field id="CloseDate"/>'), | |
$xml('<field id="OwnerId"/>') | |
), | |
$xml('<rowactions/>').append( | |
$xml('<action type="edit"/>'), | |
$xml('<action type="delete"/>') | |
), | |
$xml('<massactions usefirstitemasdefault="true"/>').append( | |
$xml('<action type="massupdate"/>'), | |
$xml('<action type="massdelete"/>') | |
), | |
$xml('<views><view type="standard"/></views>'), | |
$xml('<filters/>').append( | |
$xml('<filter type="select" filteroffoptionlabel="Any Stage" createfilteroffoption="true" affectcookies="true" autocompthreshold="25" condition="StageName"/>') | |
.append( | |
$xml('<sources><source type="metadata" effectsbehavior="justdefault"/></sources>') | |
) | |
) | |
); | |
// Load all Models --- this will: | |
// (a) populate all metadata | |
// (b) run the queries on the models | |
// Once the loading is finished, | |
// we'll build our components from XML | |
$.when(skuid.model.load(allModels)).then(function(){ | |
element.empty(); | |
skuid.component.factory({ | |
element: element, | |
xmlDefinition: xmlDefinition | |
}); | |
}); | |
</jsitem> | |
</javascript> | |
<css/> | |
</resources> | |
</skuidpage> |
Hi @zachelrath,
I'm trying to add a custom filter to the table, but it doesn't show me the filter list. It just shows a button instead.
My CompetitionTeam__u field is a UI field which I'm trying to populate the values from another model.
Heres the snippet;
`var element = arguments[0],
$ = skuid.$,
$xml = skuid.utils.makeXMLDoc;
// Add some content to our area while we are loading it in
element.html('Loading...');
var originalSource = skuid.$M('PlayerStatistics');
var Statisticsdefinition = skuid.$M('Statisticsdefinition');
// Define our Model(s)
var allModels = [];
$.each(allModels, function() {
// Register each of our Models with Skuid
this.initialize().register();
});
// Define the XML for the component we want to show in our element,
// which we'll instantiate once our Models are loaded
//generate the table column headers dynamically, this is the main reason we used a custom table component
var statFields = [];
var statFieldsForModel = [];
// adding default fields
statFields.push('NAME') ;
statFieldsForModel.push({id: 'NAME', label: 'NAME', accessible: true, displaytype: "TEXT", filterable: true});
statFieldsForModel.push({id: 'CompetitionTeam__u', label: 'Competition Team', accessible: true, displaytype: "PICKLIST", filterable: true, snippet : "CompetitionTeamPicklIstRenderer"});
//dunamically adding the fields
$.each(Statisticsdefinition.data, function(i,row){
statFields.push(row.code) ;
statFieldsForModel.push({id: row.code, label: row.code, accessible: true, displaytype: "TEXT", filterable: false});
});
originalSource.fields = statFieldsForModel;
allModels.push(Statisticsdefinition);
allModels.push(originalSource);
var xmlDefinition = $xml(
''
).append(
$xml('').append(
skuid.$.map(statFields,function(statField){
return $xml('').attr('id',statField);
})
),
$xml('').append(
$xml(''),
$xml('')
),
$xml('').append(
$xml(''),
$xml('')
),
$xml('')
,
$xml('').append(
$xml('')
)
);
console.log(xmlDefinition);
// Load all Models --- this will:
// (a) populate all metadata
// (b) run the queries on the models
// Once the loading is finished,
// we'll build our components from XML
$.when(skuid.model.load(allModels)).then(function() {
element.empty();
skuid.component.factory({
element: element,
xmlDefinition: xmlDefinition
});
});`
Thanks @zachelrath this works now