I've been using DataTables for a number of things lately, where I need a bit more flexibility than a viewPanel, but I don't want to build it from scratch with a Repeat.
I'm currently working on process where I'm making a nsf to replace a MS Access database. So I'm having to adjust from the relational method. This means I need to use a key to look things up in a view to display the human friendly words rather than the code. So traditional Notes views don't do that. DataTables give me the flexibility I need. For part of this, I have 'events', and these will have one to several classes at each of these events. I want to hide the classes for each event until I click something to make it look neater and to save space.
DataTables don't have a native way to show categories, so I found one. I put a repeat in a column, and populate that repeat with a NotesViewEntryCollection from a value in a row of the DataTable. I tried to use the plus/minus icons like shown here in a great post by Ulrich Krause. But when I paged the icons disappeared. Both of them. So I used the basic idea, and put a link in that was always there to show the classes, and another link to hide them if desired. It works like I desire, so fine.
So this does what I wanted. I'm putting the code below. I have a few things to adjust. First, the classes should be in a table so they display better (I'm not putting it in to make the code a little shorter). Also, the columns resize when the repeat is expanded. Something I'll look into fixing after I post this.
Cheers,
Brian
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.data>
<xp:dominoView
var="view1"
viewName="Event\Name">
<xp:this.databaseName><![CDATA[#{javascript:var curServer = @Subset(@DbName(),1);
if(@Left(curServer.toLowerCase(), "/") == "cn=svrname") {
session.getDatabase('svrname/OU', 'foldername\\Data.nsf');
} else {
session.getDatabase('', 'foldername\\Data.nsf');
}}]]></xp:this.databaseName>
</xp:dominoView>
</xp:this.data>
<xp:dataTable
id="dataTable1"
rows="30"
var="rowData"
value="#{view1}">
<xp:this.facets>
<xp:pager
partialRefresh="true"
layout="Previous Group Next"
xp:key="header"
id="pager1">
</xp:pager>
<xp:pager
partialRefresh="true"
layout="Previous Group Next"
xp:key="footer"
id="pager2">
</xp:pager>
</xp:this.facets>
<xp:column id="column1">
<xp:this.facets>
<xp:label
value="Event Name"
id="label1"
xp:key="header">
</xp:label>
</xp:this.facets>
<xp:link
escape="true"
id="link1">
</xp:link>
<xp:text
escape="true"
id="computedField4">
<xp:this.value><![CDATA[#{javascript:rowData.getColumnValues()[0];}]]></xp:this.value></xp:text></xp:column>
<xp:column id="column2">
<xp:text
escape="true"
id="computedField5">
<xp:this.value><![CDATA[#{javascript:rowData.getColumnValues()[4];}]]></xp:this.value></xp:text>
<xp:this.facets>
<xp:label
value="Date"
id="label2"
xp:key="header">
</xp:label>
</xp:this.facets>
</xp:column>
<xp:column id="column3">
<xp:this.facets>
<xp:label
value="Group"
id="label3"
xp:key="header">
</xp:label>
</xp:this.facets>
<xp:text
escape="true"
id="computedField6">
<xp:this.value><![CDATA[#{javascript:rowData.getColumnValues()[3];}]]></xp:this.value></xp:text></xp:column>
<xp:column id="column4">
<xp:this.facets>
<xp:label
value="Number"
id="label4"
xp:key="header">
</xp:label>
</xp:this.facets>
<xp:text
escape="true"
id="computedField7">
<xp:this.value><![CDATA[#{javascript:rowData.getColumnValues()[2];}]]></xp:this.value>
<xp:this.converter>
<xp:convertNumber
type="number"
integerOnly="true">
</xp:convertNumber>
</xp:this.converter>
</xp:text></xp:column>
<xp:column id="column6">
<xp:panel id="mainpanel">
<xp:link
escape="true"
text="Classes"
id="link6">
<xp:eventHandler
event="onclick"
submit="false">
<xp:this.script><![CDATA[var visibility = 'show';
XSP.partialRefreshGet("#{id:mainpanel}", {
params: {'$$xspsubmitvalue': visibility},
onComplete: function () {
XSP.partialRefreshGet("#{id:secondpanel}", {
params: {'$$xspsubmitvalue': visibility}});}
});]]></xp:this.script>
</xp:eventHandler></xp:link>
</xp:panel></xp:column>
<xp:column id="column5">
<xp:this.facets>
<xp:label
value="Courses"
id="label5"
xp:key="header">
</xp:label>
</xp:this.facets>
<xp:panel id="secondpanel">
<xp:repeat
id="repeat1"
rows="30"
rendered="#{javascript:context.getSubmittedValue()== 'show'}"
var="rptRowData">
<xp:this.value><![CDATA[#{javascript:var curServer = @Subset(@DbName(),1);
if(@Left(curServer.toLowerCase(), "/") == "cn=svrname") {
var dataDb:NotesDatabase=session.getDatabase('svrname/ou', 'foldername\\Data.nsf');
} else {
var dataDb:NotesDatabase=session.getDatabase('', 'foldername\\Data.nsf');
}
var v:NotesView=dataDb.getView('Class Instance\\Event-Course');
var nvec:NotesViewEntryCollection=v.getAllEntriesByKey(rowData.getColumnValues()[2] + '', true);
return nvec;}]]></xp:this.value>
<xp:text
escape="true"
id="computedField1">
<xp:this.value><![CDATA[#{javascript:rptRowData.getColumnValues()[1];}]]></xp:this.value>
</xp:text>
   
<xp:text
escape="true"
id="computedField2">
<xp:this.value><![CDATA[#{javascript:rptRowData.getColumnValues()[2];}]]></xp:this.value>
<xp:this.converter>
<xp:convertNumber
type="number"
integerOnly="true">
</xp:convertNumber>
</xp:this.converter>
</xp:text>
      
<xp:text
escape="true"
id="computedField3">
<xp:this.value><![CDATA[#{javascript:var cNumV:NotesView=database.getView('Course Number');
var cNVE:NotesViewEntry=cNumV.getEntryByKey(rptRowData.getColumnValues()[1], true);
if(cNVE != null){
return cNVE.getColumnValues()[1];
}
return "Course Name not found";}]]></xp:this.value>
</xp:text>
      
</xp:repeat>
<xp:link
escape="true"
text="Close"
rendered="#{javascript:context.getSubmittedValue()== 'show'}"
id="link5">
<xp:eventHandler
event="onclick"
submit="false">
<xp:this.script><![CDATA[var visibility = 'hide';
XSP.partialRefreshGet("#{id:mainpanel}", {
params: {'$$xspsubmitvalue': visibility},
onComplete: function () {
XSP.partialRefreshGet("#{id:secondpanel}", {
params: {'$$xspsubmitvalue': visibility}});}
});]]></xp:this.script>
</xp:eventHandler>
</xp:link>
</xp:panel>
</xp:column>
</xp:dataTable>
<xp:br></xp:br>
</xp:view>
No comments:
Post a Comment