我的客户希望能够在多个数据库中进行搜索,然后能够对数据进行过滤和排序。我希望通过XML输入使用Dojo增强型Datagrid。这样,我可以在后端编译所有结果,然后将它们整体呈现给Grid。
我尝试了许多示例,它们似乎都可以在浏览器中工作,但不能在Notes Client中工作。不幸的是,这是一个Notes Client应用程序。
我一直在使用Texas BBQ应用程序作为测试,只是因为所有数据都包含在应用程序中。我在以下位置找到了
NotesIn9 92:在XPages中使用Dojo增强型数据网格,作者Paul Calhoun http://www.notesin9.com/2012/12/03/notesin9-092-using-the-dojo-enhanced-data-grid-in-xpages/
我已经能够获取“带有XML数据源的Dojo增强型数据网格”以加载Dojo控件,但是我只是得到“抱歉,发生了错误”,数据应该在该位置。
这里是9中Notes到Texas BBQ的链接。 http://www.nnsu.com/nnsusite.nsf/Download.xsp?documentId=5EB484B0C31CC83886257B59006DA42A&action=openDocument
如果我可以使用它,它将是一个非常有用的工具,因为我必须尽快开始考虑归档,并将使用它来合并我的搜索结果。
我正在将Domino 9.0.1 FP5服务器与Notes 9.0.1 FP9客户端一起使用。
任何帮助将不胜感激。
Notes客户端结果页面的图像:
答案 0 :(得分:1)
我设法将问题追溯到dataStore的实际调用。如果使用BBQ的示例,Paul使用单独的Xpage形成XML输入,并在其代码中将其作为URL引用进行调用:
var strURL = "/DanF/TexasBBQ_DGO.nsf/BBQXML_NC.xsp"
var xmlStore = new dojox.data.XmlStore({ url: strURL });
这在Notes客户端内部不起作用!
我的解决方案是在同一页面上使用XML restService来构建输入。这使页面更加独立,并且Notes Client能够一次性构建页面。
如果我的最终结果是Xpage: (您需要将dataStore的URL指向自己的Xpage)
<xp:this.resources>
<xp:dojoModule name="dojox.data.XmlStore"></xp:dojoModule>
<xp:dojoModule name="dojox.grid.EnhancedGrid"></xp:dojoModule>
<xp:dojoModule name="dojox.grid.enhanced.plugins.DnD"></xp:dojoModule>
<xp:dojoModule name="dojox.grid.enhanced.plugins.NestedSorting"></xp:dojoModule>
<xp:dojoModule name="dojox.grid.enhanced.plugins.IndirectSelection"></xp:dojoModule>
<xp:dojoModule name="dojox.grid.enhanced.plugins.Filter"></xp:dojoModule>
<xp:styleSheet href="/.ibmxspres/dojoroot/dijit/themes/dijit.css"></xp:styleSheet>
<xp:styleSheet href="/.ibmxspres/dojoroot/dojox/grid/resources/Grid.css"></xp:styleSheet>
<xp:styleSheet href="/.ibmxspres/dojoroot/dojox/grid/resources/tundraGrid.css"></xp:styleSheet>
<xp:styleSheet href="/.ibmxspres/dojoroot/dojox/grid/enhanced/resources/EnhancedGrid.css"></xp:styleSheet>
<xp:styleSheet href="/.ibmxspres/dojoroot/dojox/grid/enhanced/resources/tundraEnhancedGrid.css"></xp:styleSheet>
</xp:this.resources>
<xe:restService id="restService1" pathInfo="xmlStore">
<xe:this.service>
<xe:customRestService contentType="text/xml">
<xe:this.doGet><![CDATA[#{javascript:
// initials xmlStore
var strXmlStore:String = "";
strXmlStore = "<?xml version='1.0' ?>" ;
strXmlStore = strXmlStore + "<joints>" ;
//Get the current application
var db = database;
//Access the People View
var pview:NotesView = db.getView("joints");
//Create Variables to hold the Documents and get the first document
var doc:NotesDocument;
var ndoc:NotesDocument;
doc = pview.getFirstDocument();
var nam:NotesName;
//Create a while loop to process the document in the View
while (doc != null) {
strXmlStore = strXmlStore + "<joint>";
strXmlStore = strXmlStore + "<name>";
strXmlStore = strXmlStore + doc.getItemValueString("Name");
strXmlStore = strXmlStore + "</name>";
strXmlStore = strXmlStore + "<city>";
strXmlStore = strXmlStore + doc.getItemValueString("City");
strXmlStore = strXmlStore + "</city>";
strXmlStore = strXmlStore + "<url>";
strXmlStore = strXmlStore + doc.getItemValueString("URL");
strXmlStore = strXmlStore + "</url>";
strXmlStore = strXmlStore + "<description>";
strXmlStore = strXmlStore + doc.getItemValueString("Description");
strXmlStore = strXmlStore + "</description>";
strXmlStore = strXmlStore + "</joint>";
//Get the next document in the view and store to the placeholder
ndoc = pview.getNextDocument(doc);
//recycle the doc object to preserve memory
doc.recycle();
//set the doc object equal to the placeholder
doc = ndoc;
}
//close the root tag
strXmlStore = strXmlStore + "</joints>";
return strXmlStore}]]></xe:this.doGet>
</xe:customRestService>
</xe:this.service>
</xe:restService>
<xp:panel style="text-align:center;font-family:Comic Sans MS;font-size:16pt"
disableTheme="true">
<xp:label
value="Dojo Enhanced Data Grid With XML Data Source thru Rest Service"
id="label2"></xp:label>
</xp:panel>
<xp:br />
<xp:panel id="gridNode" styleClass="DemoLeft" tagName="div"
style="height:30em;width:42em">
</xp:panel>
<xp:eventHandler event="onClientLoad" submit="false">
<xp:this.script><![CDATA[
var xmlStore = new dojox.data.XmlStore({ url: "Simple_XML.xsp/xmlStore" });
var grid = null;
dojo.addOnLoad(function(){
var layout = [{
defaultCell: { editable: false, type: dojox.grid.cells._Widget },
rows:[
{ field: "name", name: "Name", width: 20 },
{ field: "city", name: "City", width: 20 },
{ field: "url", name: "Web Site", width: 20,formatter: formatHTML },
{ field: "description", name: "Description",width:80}
]
}];
function formatHTML(url, rowIndex){
if(url.firstChild != null || url !=""){
var linkVal = "<a target='_blank' href='"+url+"'>Web Site</a>";
return linkVal;
} else{
return "";
}
}
grid = new dojox.grid.EnhancedGrid({
query: { name: '*' },
store: xmlStore,
structure: layout,
autoHeight:25,
plugins:{nestedSorting: true, dnd: true,filter:true}
}, '#{id:gridNode}');
grid.startup();
});
]]></xp:this.script>
</xp:eventHandler>
</xp:view>
答案 1 :(得分:0)
Notes Client使用较旧版本的Firefox引擎。查看此文档进行比较:
https://iwonthemove.wordpress.com/2013/03/14/how-to-get-a-proper-javascript-debugger-in-xpinc/
(最新版本可能较新,但您了解了。此演示文稿:
https://www.slideshare.net/ddrschiw/ad108
描述XPiNC(Notes Client中的XPages)。幻灯片21显示了允许访问源的客户端工具栏。幻灯片22讨论了调试。
更新
您还希望查看Firebug指示灯,它将显示最终的JS错误。有关详情,请参见此帖子:https://www.mindoo.com/web/blog.nsf/dx/02.02.2012162412KLEL3Q.htm
/更新
希望有帮助。
顺便说一句。我不会使用GUI工具(Dojo网格)来查询不同的源。而是使用托管bean和1:1连接的Grid-Bean。