Error Occurred While Updating Some of the Page - xpages

I have a combobox that performs a partial refresh of a hidden table. I'm trying to show the table once any value is selected other than the default value. I am using a hidden edit field that is bound to a scope variable to control the table rendering or not. I believe the problem I am having is my code is doing the partial refresh first before the scope variable is set ( see code below onComplete...). However, I am unsure how to set the scope variable first before the refresh occurs. Can anyone point me in the right direction?
<xp:comboBox id="vendorAppAdvSkills1">
<xp:selectItem itemLabel="-Select a Category-"
itemValue="" id="selectItem1">
</xp:selectItem>
<xp:selectItems id="selectItems1">
<xp:this.value><![CDATA[#{javascript:getComponent( "vendorAppSkills1" ).getValue();}]]></xp:this.value>
</xp:selectItems>
<xp:eventHandler event="onblur" submit="false"
id="eventHandler1">
<xp:this.script><![CDATA[
XSP.partialRefreshPost("#{id:tblAdvertising}",
{
// Added showAdvertising code to hide the advertising table until the user selects their free category!
onComplete: function()
{
// Fetch a handle to the first category field
var freeCategory = dojo.byId('#{id:vendorAppAdvSkills1}');
var showAdvertising = document.getElementById('#{id:showAdvertising}');
// If it's blank, force the cursor off the field to fire the onBlur Event
if( freeCategory.value == "" || freeCategory.value == null )
{
if($('body').scrollTop()>0)
{
$('body').scrollTop(0); //Chrome,Safari
}
else
{
if($('html').scrollTop()>0)
{ //IE, FF
$('html').scrollTop(0);
}
}
showAdvertising.value = false;
// Notify the user this is required
alert( "Please Select Your FREE Category Listing!" );
// Place the cursor back in the first category field again
freeCategory.focus();
}
else
showAdvertising.value = true;
}
} );]]></xp:this.script>
</xp:eventHandler>
</xp:comboBox>
NEW CODE ADDED HERE
<xp:comboBox id="vendorAppAdvSkills1">
<xp:selectItem itemLabel="-Select a Category-"
itemValue="" id="selectItem1">
</xp:selectItem>
<xp:selectItems id="selectItems1">
<xp:this.value><![CDATA[#{javascript:getComponent( "vendorAppSkills1" ).getValue();}]]></xp:this.value>
</xp:selectItems>
<xp:eventHandler event="onblur" submit="true" refreshMode="partial" refreshId="tblAdvertising"
onComplete="alert( 'ssjs code done' )">
<xp:this.script><![CDATA[#{javascript:
var vendorAppSkills = getComponent( "vendorAppSkills1" ).getValue();
print( "vendorAppSkills: " + vendorAppSkills );
print( "typeof vendorAppSkills: " + typeof vendorAppSkills );
if( typeof vendorAppSkills == "java.util.Vector" )
{
if( vendorAppSkills.contains( "-Select a Category-" ) )
viewScope.put( "showAdvertising", false );
}
else
{
if( typeof( vendorAppSkills == "String" ) )
if( vendorAppSkills.equalsIgnoreCase( "-Select a Category-" ) )
viewScope.put( "showAdvertising", false );
else
viewScope.put( "showAdvertising", true );
}
}]]></xp:this.script>

Instead of doing the partial refresh with XSP.partialRefreshPost use the refreshId parameter of the event handler, set your scope variable, then your onComplete code will run after the scoped variable has been assigned a value:
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.afterPageLoad><![CDATA[#{javascript:viewScope.myVar = "initial value";}]]></xp:this.afterPageLoad>
<xp:comboBox id="comboBox1">
<xp:selectItem itemLabel="val 1" itemValue="val1"></xp:selectItem>
<xp:selectItem itemLabel="val 2" itemValue="val2"></xp:selectItem>
<xp:eventHandler event="onchange" submit="true" refreshMode="partial"
refreshId='#{javascript:(viewScope.myVar == "someValue") ? "idToUpdate" : ""}'
onComplete="alert('ssjs code done');">
<xp:this.action><![CDATA[#{javascript:viewScope.myVar = "someValue";}]]></xp:this.action>
</xp:eventHandler>
</xp:comboBox>
<xp:panel id="idToUpdate">
<xp:this.rendered><![CDATA[#{javascript:(viewScope.myVar == "someValue")}]]></xp:this.rendered>
table data
</xp:panel>
</xp:view>

Related

XPages JsonRPC - update ViewScope

I am having troubles setting viewScope from jsonRPC via button (onClick).
See code below.
I am using a browser (FF/Chrome Mac & PC) to access the XPage.
After clicking the button i get message "RPC done" as expected,
but the viewScope is not set.
<xe:jsonRpcService id="myRpc" serviceName="myRpcService">
<xe:this.methods>
<xe:remoteMethod name="setDialogValues">
<xe:this.script><![CDATA[var success = false;
try {
viewScope.put("dojoDialog_title", "Window title");
success = true;
} catch (e) {
success = false;
}
return success;]]></xe:this.script>
</xe:remoteMethod>
</xe:this.methods>
</xe:jsonRpcService>
<xp:button value="Set viewScope via RPC" id="setVSButton">
<xp:eventHandler event="onclick" submit="false">
<xp:this.script><![CDATA[var remoteMethod = myRpcService.setDialogValues();
remoteMethod.addCallback(function(response){
if(response===true){
alert("RPC done");
}else{
alert("ERROR");
}
});]]></xp:this.script>
</xp:eventHandler>
</xp:button>
EDIT:
What I ultimately want to achieve is setting ViewScope parameters for a dojo dialog. The dialog is opened via CSJS, reads the ViewScope variables and displays the correct page, size and title.
What I have tried successfully is using a label to set ViewScope before opening the dialog. My experience tells me this is a quick and dirty solution that might crash and burn at any time. Surely there must be a better / correct way to set ViewScope or run SSJS before running CSJS?
See code excerpt below.
Label - Execute SSJS (Set ViewScope for dialog)
<xp:label id="labelSetParamsBeforeOpeningDialog">
<xp:this.value><![CDATA[#{javascript:
var result = '';
try{
if(param.containsKey('runCode')){
if(param.runCode){
var title = param.title;
var width = param.width;
var height = param.height;
var dialogType = param.dialogType;
var parentUnid = viewScope.get("currentDocUnid");
var pageToOpen = "";
switch(dialogType){
case "one":
//Dialog type specific code goes here
pageToOpen = "dojoDialog_one.xsp?open&parent="+ parentUnid +"&dialog=true";
break;
case "two":
viewScope.put("checkForConflicts", true);
pageToOpen = 'dojoDialog_two.xsp?open&parent='+ parentUnid;
break;
case "three":
pageToOpen = "dojoDialog_three.xsp?open&parent="+ parentUnid;
break;
default:
pageToOpen = "error-page.xsp?open";
break;
}
viewScope.put('dojoDialog_parentunid', parentUnid);
viewScope.put('dojoDialog_pageToOpen', pageToOpen);
viewScope.put('dojoDialog_title', title);
viewScope.put('dojoDialog_width', width);
viewScope.put('dojoDialog_height', height);
}
}
}catch (e){
result = "ERROR:"+ e.message;
}
return result;
}]]></xp:this.value>
</xp:label>
Button - Run SSJS (label) then open dialog (CSJS)
<xp:button value="Show dialog three" id="myButton">
<xp:eventHandler event="onclick" submit="false">
<xp:this.script><![CDATA[
var title = 'THREE';
var width = 1200;
var height = 440;
var dialogType = 'three';
XSP.partialRefreshGet("#{id:labelSetParamsBeforeOpeningDialog}",
{
params: {"runCode":true, "title":title, "width":width, "height":height,"dialogType":dialogType},
onStart: function(){
//nothing
},
onError: function(){
alert("ERROR")
},
onComplete: function(){
XSP.openDialog('#{id:inPlaceDialog}');
}
});]]></xp:this.script>
</xp:eventHandler>
</xp:button>
Dojo dialog - Reads ViewScope
<xe:dialog id="inPlaceDialog" style="height:auto;width:auto"
dojoType="com.ZetaOne.widget.Dialog">
<xe:this.title>
<![CDATA[#{javascript:var title =
viewScope.get("dojoDialog_title");return title;}]]>
</xe:this.title>
<xe:this.dojoAttributes>
<xp:dojoAttribute name="autofocus" value="false"></xp:dojoAttribute>
</xe:this.dojoAttributes>
<xc:global_dojoDialog_iframe
elementSRC="#{javascript:applicationScope.dbPath}/#
{javascript:viewScope.dojoDialog_page}"
elementUnid="#{javascript:viewScope.dojoDialog_unid;}"
elementParentUnid="#{javascript:viewScope.dojoDialog_parentunid;}"
elementDialogWidth="#{javascript:viewScope.dojoDialog_width;}"
elementDialogHeight="#{javascript:viewScope.dojoDialog_height;}">
</xc:global_dojoDialog_iframe>
<xp:eventHandler event="onShow" submit="false">
<xe:this.script><![CDATA[dojo.query("img[aria-label='close
button']").forEach(function(el){
el.src = "blank_x.gif";
});]]></xe:this.script>
</xp:eventHandler>
</xe:dialog>
From what I've seen JSON RPC is doesn't update the component tree at all. So viewScope can't be updated from a JSON RPC call. See http://www.intec.co.uk/json-rpc-service-component-tree-manipulation-openlog/
If you want to update viewScope, I'm not sure why you would use a JSON RPC call over a partial refresh (GET or POST).

SSJS Confirmation Dialog before rest of Codes runs behind a button in XPages

I would like to make a confirmation before continue. I mean rest of codes should not run a until a user make a decision (Yes/No). If a user push the button "YES" It should create a new document. If the user chose "NO" nothing should happen.
in this code a confirmation dialog appears that asks "Are you sure to create new Document" My problem is
a new document is already created If the user chose "Yes or no". this codes below does not care answer in the Dialog? Whole code runs then that dialog appears. I think i miss something :(
var dateOther = docOther.getFirstItem("TarihBitis").getDateTimeValue();
if (dateOther==null)
{
var dlgA = getComponent("dialogTarifeConfirm");
dlgA.show();
//Creating New Doc...
var docNew = database.createDocument();
docNew.appendItemValue("Subject", requestScope.subject);
docNew.appendItemValue("fieldName1", viewScope.fieldName1);
docNew.appendItemValue("fieldName2", viewScope.fieldName2);
docNew.save();
}
Any suggestion is appreciated.
Regards
Cumhur Ata
UPDATE 1 : Please find Where i am mixed after the dialog codes does not care the answer both document are created then the dialog will appear on the screen. I think I miss something that I don't know.
try
{
//Sync backend document with changes made in the frontend document
var doc:NotesDocument = document1.getDocument(true);
var today:NotesDateTime = session.createDateTime(#Now());
var bugun:java.util.Date = new java.util.Date();
var dateFormat = new java.text.SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
cn = sessionScope.commonUserName;
//getCurrnetUserName as String
var user:String=session.getEffectiveUserName();
var tKey = doc.getItemValueString("ParentUNID");
var ParaBirimi = document1.getItemValueString("ParaBirimi");
var tarifeView:NotesView = database.getView("(viewStandartTarifelerKontrol)");
var vec:NotesViewEntryCollection = tarifeView.getAllEntriesByKey(ParaBirimi);
var docBuUNID = document1.getDocument().getUniversalID();
if(document1.isNewNote())
{
if (vec.getCount() > 0)
{
var entry1:NotesViewEntry = vec.getFirstEntry();
while (entry1!= null)
{
var tarifeDoc:NotesDocument = entry1.getDocument();
var tarifeUNID = tarifeDoc.getUniversalID();
var ParentUNID = tarifeDoc.getItemValueString("ParentUNID");
if (docBuUNID!=tarifeUNID)
{
var tarifeDocBasDate:NotesDateTime = tarifeDoc.getItemValueDateTimeArray("startDate").elementAt(0);
var docBuBasDate:NotesDateTime = doc.getItemValueDateTimeArray("startDate").elementAt(0);
var days:int = tarifeDocBasDate.timeDifferenceDouble(docBuBasDate) / 86400;
diff = docBuBasDate.timeDifference(tarifeDocBasDate)/86400;
var a = tarifeDoc.getFirstItem("endDate").getDateTimeValue();
if (a==null)
{
if(diff>0)
{
var a = getComponent("dialogConfirm1");
a.show();
//If the user say YES FORMA document will be created.
var docNew = database.createDocument();
docNew.appendItemValue("Subject", viewScope.subject);
docNew.appendItemValue("Form","FormA");
//If the user say NO FORMB document will be created.
var docNew = database.createDocument();
docNew.appendItemValue("Subject", viewScope.subject);
docNew.appendItemValue("Form","FormB");
docNew.save();
}
}
}
var tmpentry = vec.getNextEntry();
entry1.recycle();
entry1 = tmpentry;
}
}
}
}
catch(e)
{
print(e);
}
1. Create a button for opening your dialog:
<xp:button id="btnDialogTarifeConfirm" value="Create New Document">
<xp:eventHandler event="onclick" submit="true" execMode="partial" execId="btnDialogTarifeConfirm">
<xp:this.action><![CDATA[#{javascript:var dialogTarifeConfirm:com.ibm.xsp.extlib.component.dialog.UIDialog = getComponent("dialogTarifeConfirm");
dialogTarifeConfirm.show();}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
2. Behind your dialogs button btnCreateNewDocument your code should be placed:
<xe:dialog id="dialogTarifeConfirm" title="Create New Document">
...
<xp:div styleClass="lotusDialogFooter">
<xp:button id="btnCreateNewDocument" value="YES (Create New Document)">
<xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="lotusForm"
execMode="partial" execId="btnCreateNewDocument">
<xp:this.action><![CDATA[#{javascript://Creating New Doc...
var docNew = database.createDocument();
docNew.appendItemValue("Subject", requestScope.subject);
docNew.appendItemValue("fieldName1", viewScope.fieldName1);
docNew.appendItemValue("fieldName2", viewScope.fieldName2);
docNew.save();}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:link escape="true" text="No" themeId="Link.Action"
onclick="XSP.closeDialog('#{id:dialogTarifeConfirm}')">
</xp:link>
</xp:div>
</xe:dialog>
I hope this helps
Can you not use "this.message"?
A simple example of using it to delete documents could be:
<xp:button value="Delete" id="button3"
styleClass="btn btn-danger btn-block btn-xs">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action>
<xp:actionGroup>
<xp:confirm>
<xp:this.message><![CDATA[#{javascript:"Are you sure you want to delete this document?"}]]></xp:this.message>
</xp:confirm>
<xp:actionGroup>
<xp:this.condition><![CDATA[#{javascript:var id = rowData.getUniversalID();
var doc:NotesDocument = database.getDocumentByUNID(id);
doc.remove(true);}]]></xp:this.condition>
</xp:actionGroup>
</xp:actionGroup>
</xp:this.action>
</xp:eventHandler>
</xp:button>

xpages and unitegallery. xpages function freezes

I am using unitegallery within an xpage. here is the code:
<div id="gallery" style="display:none;">
<xp:repeat rows="100" value="#{javascript:Album.getPictures();}" var="obj" indexVar="idx" disableOutputTag="true" removeRepeat="true">
<xp:text escape="true">
<xp:this.value>
<![CDATA[#{javascript:var db = datasource.getString('DB_FILEPATH');
var id = obj;
var Picture = new org.openntf.bildr.Picture();
Picture.loadByUnid(obj);
var original = Picture.getOriginal();
var pic = "../" + db + "/0/" + id + "/$FILE/" + original;
return '<img src="' + pic + '" data-image="' + pic + '"></img>'}]]></xp:this.value>
</xp:text>
<xp:image rendered="false">
<xp:this.attrs>
<xp:attr name="data-image">
<xp:this.value>
<![CDATA[#{javascript:var db = datasource.getString('DB_FILEPATH');
var id = obj;
var Picture = new org.openntf.bildr.Picture();
Picture.loadByUnid(obj);
var original = Picture.getOriginal();
return "../" + db + "/0/" + id + "/$FILE/" + original;}]]>
</xp:this.value>
</xp:attr>
</xp:this.attrs>
<xp:this.url>
<![CDATA[#{javascript:var db = datasource.getString('DB_FILEPATH');
var id = obj;
var Picture = new org.openntf.bildr.Picture();
Picture.loadByUnid(obj);
var thumb = Picture.getThumb();
return "../" + db + "/0/" + id + "/$FILE/" + thumb;}]]>
</xp:this.url>
</xp:image>
</xp:repeat>
</div>
<!--/#gallery -->
(the sample contains an attempt with an xp:image and xp:text control)
This delivers me the images in the gallery, however the rest of the function in my xpages freezes e.g. buttons.
Anyone know a solution for this?
The problem is related to AMD loading complications in Notes 9. After using the xsnippet from Ferry Kranenburg for AMD loading the problem is gone.

Control spacing of CheckBoxGroup in a form table in an Xpage

My app has a checkBoxGroup inside of a Form Layout Row and that is inside of a Form table.
I want to control the font weight and spacing and so on, it seems I can't. If the checkbox group is outside the form table, my css works, but not inside the form table. I believe this is because the table that is generated by the form layout table is not getting changed. I want to change ONLY the spacing inside of this on form row.
Here is the code for the checkbox inside the form layout row:
<xe:formRow id="formRow4"
labelPosition="inherit" label="Area">
<xp:checkBoxGroup id="checkBoxGroup2"
layout="pageDirection" styleClass="threeColumnCheckBoxGroup"
style="font-size:8pt;font-style:normal">
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:var tmp:String = viewScope.application;
var tmpLst = [];
if (tmp == "OTM")
{
tmpLst.push("User Interface");
tmpLst.push("Rating/Planning");
tmpLst.push("Tendering/Booking");
tmpLst.push("Documentton");
tmpLst.push("Finance");
}
if (tmp = "GTM")
{
tmpLst.push("Parting Screening");
tmpLst.push("AES Filing");
tmpLst.push("AMS Filing");
tmpLst.push("Product Classification");
}
return tmpLst}]]></xp:this.value>
</xp:selectItems>
</xp:checkBoxGroup>
</xe:formRow>
And for the checkbox outside:
<xp:checkBoxGroup id="checkBoxGroup4" layout="pageDirection" styleClass="threeColumnCheckBoxGroup" style="font-size:8pt;font-style:normal">
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:var tmp:String = viewScope.application;
var tmpLst = [];
if (tmp == "OTM")
{
tmpLst.push("User Interface");
tmpLst.push("Rating/Planning");
tmpLst.push("Tendering/Booking");
tmpLst.push("Documentton");
tmpLst.push("Finance");
}
if (tmp = "GTM")
{
tmpLst.push("Parting Screening");
tmpLst.push("AES Filing");
tmpLst.push("AMS Filing");
tmpLst.push("Product Classification");
}
return tmpLst}]]></xp:this.value>
</xp:selectItems>
</xp:checkBoxGroup
and the css
.xspCheckBox { width: 500px; /* change to your preferred width */ }
.xspCheckBox td { white-space: nowrap; padding-bottom:3px; }
.threeColumnCheckboxGroup { display: inline; }
.threeColumnCheckboxGroup td { float: left; width: 24%; padding-bottom:3px; }

How to stop width of Extra Columns in Xpages DataView from changing

I have a nice DataView, with only one thing wrong. The width of the extra columns keeps changing depending on the width of the data in the field. I think it looks much better if these values do not jump around.
How can I set the width of these columns? I tried using a width with !important in the style of the extra columns, but that didn't work. I tried adding &NBSP to the values, but that didn't work perfectly, and is really really kludgy.
<xe:dataView id="dataView1" var="dvEntry"
collapsibleDetail="false" columnTitles="true"
detailsOnClient="true" openDocAsReadonly="true" rows="25"
disableTheme="false" pageName="/xpFormEmployee.xsp"
styleClass="lotusTable" rowStyleClass="EVEN,ODD"
rowStyle="width:1000px">
<xe:this.data>
<xp:dominoView var="view1"
viewName="(xpEmployeeByNameActiveOnly)"
databaseName="TheTruth.nsf" dataCache="id"
searchExactMatch="false">
<xp:this.search><![CDATA[#{javascript:var query:String = '';
var search:String = viewScope.get("searchString")
if (search === null || search == "")
{query = ""}
else
{query = 'FIELD HR_FullName CONTAINS ' + search + '*'}
return query
}]]></xp:this.search>
</xp:dominoView>
</xe:this.data>
<xe:this.extraColumns>
<xe:viewExtraColumn
style="width:400px !important;vertical-align:middle;font-weight:bold"
headerStyle="font-weight:bold;font-size:12pt" contentType="html"
columnTitle="Location">
<xe:this.href><![CDATA[#{javascript:var geoView:NotesView = database.getView("(DbLookupLocationsByName)");
var geoDoc:NotesDocument;
var UNID:String;
geoDoc = geoView.getDocumentByKey(dvEntry.getColumnValue("HR_GeoLocation"));
if (geoDoc != null)
{
UNID = geoDoc.getUniversalID();
"notes://XX/__86257D58005E456E.nsf/0/" + UNID + "?OpenDocument"}
else
{""}}]]></xe:this.href>
<xe:this.value><![CDATA[#{javascript:var tmpLoc:String = dvEntry.getColumnValue("HR_geoLocation");
var lenTmpLoc = 30 - tmpLoc.length;
var tmpPad:String = "";
for (i = 0; i < (lenTmpLoc); i++)
{tmpPad += " ";}
return tmpLoc + tmpPad
}]]></xe:this.value>
</xe:viewExtraColumn>
<xe:viewExtraColumn columnTitle="Office Phone"
columnName="HR_OfficePhone"
style="width:400px !important;vertical-align:middle"
headerStyle="font-weight:bold;font-size:12pt"
contentType="html">
<xe:this.value><![CDATA[#{javascript:var tmpLoc:String = dvEntry.getColumnValue("HR_officePhone");
var lenTmpLoc = 50 - tmpLoc.length;
var tmpPad:String = "";
for (i = 0; i < (lenTmpLoc); i++)
{tmpPad += " ";}
return tmpLoc + tmpPad
}]]></xe:this.value>
</xe:viewExtraColumn>
<xe:viewExtraColumn></xe:viewExtraColumn>
</xe:this.extraColumns>
<xe:this.iconColumn>
<xe:viewIconColumn>
<xe:this.icons>
<xe:iconEntry
style="height:35px;width:35px;padding-right:5.0px">
<xe:this.url><![CDATA[#{javascript:var phtStr:String;
var imgNme:String;
phtStr = dvEntry.getColumnValue("photo");
var docUNID:String = dvEntry.getColumnValue("docUNID");
if (phtStr != "")
{imgNme = "XXXXXX/xsp/.ibmmodres/domino/OpenAttachment/XXXX" + docUNID + "/$File/" + phtStr + "?Open"}
else
{imgNme = "xpPhotoPlaceholder.gif"}
imgNme
}]]></xe:this.url>
</xe:iconEntry>
</xe:this.icons>
</xe:viewIconColumn>
</xe:this.iconColumn>
<xe:this.summaryColumn>
<xe:viewSummaryColumn columnTitle="Name"
headerStyle="font-weight:bold;font-size:12pt;padding-left:8.0px">
</xe:viewSummaryColumn>
</xe:this.summaryColumn>
<xp:this.facets>
<xp:panel xp:key="summary">
<xp:table>
<xp:tr>
<xp:td>
<xp:text escape="false"
id="computedField2">
<xp:this.value><![CDATA[#{javascript:return "<h4><a href='xpFormEmployee.xsp?openDocument&documentId=" + dvEntry.getUniversalID() + "'>" + dvEntry.getDocument().getItemValueString('HR_FullName') + "</a></h4>";
}]]></xp:this.value>
</xp:text>
</xp:td>
</xp:tr>
</xp:table>
</xp:panel>
<xe:pagerSizes id="pagerSizes1"
sizes="5|10|25|50|100" xp:key="pagerTopLeft">
</xe:pagerSizes>
<xp:panel xp:key="pagerBottomLeft"
id="panel3">
<xe:pagerSizes id="pagerSizes2"></xe:pagerSizes>
</xp:panel>
<xp:panel xp:key="pagerTopRight"
styleClass="panelPagerTopRight">
<xp:pager layout="Previous Group Next"
for="dataView1" id="pager3" partialRefresh="true"
styleClass="pager">
</xp:pager>
</xp:panel>
<xp:panel xp:key="pagerBottomRight">
<xp:pager layout="Previous Group Next"
for="dataView1" id="pager1" partialRefresh="true"
styleClass="pager">
</xp:pager>
</xp:panel>
<xp:panel xp:key="noRows">
<xp:br />
<xp:div styleClass="xlEmptyFacet">
<xp:label>
<xp:this.value><![CDATA[#{javascript:"No Documents Found"}]]></xp:this.value>
</xp:label>
</xp:div>
</xp:panel>
</xp:this.facets>
</xe:dataView>
Change style of class lotusTable to
.lotusTable {
table-layout: fixed;
}
Then style width= in column's headerStyle or style won't be ignored anymore.
Example:
Assuming css code from above is in Style Sheets Resource "fixedTable.css" then you can set columns' widths this way
<xp:this.resources>
<xp:styleSheet
href="/fixedTable.css"></xp:styleSheet>
</xp:this.resources>
<xe:dataView ...>
...
<xe:this.extraColumns>
<xe:viewExtraColumn
headerStyle="width:10%;" ...>
...
</xe:viewExtraColumn>
<xe:this.extraColumns>
<xe:viewExtraColumn
headerStyle="width:20%;" ...>
...
</xe:viewExtraColumn>
<xe:this.summaryColumn>
<xe:viewSummaryColumn
headerStyle="width:70%;" ...>
</xe:viewSummaryColumn>
</xe:this.summaryColumn>
...
</xe:dataView>

Resources