如何在Notes客户端中使用带有XML的Dojo数据网格

时间:2018-06-28 09:19:37

标签: xml xpages lotus-notes lotus-domino dojox.grid.datagrid

我的客户希望能够在多个数据库中进行搜索,然后能够对数据进行过滤和排序。我希望通过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客户端结果页面的图像:

Notes Client Results Page

2 个答案:

答案 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。