Как использовать Dojo Data Grid с XML в клиенте Notes - PullRequest
0 голосов
/ 28 июня 2018

Мой клиент хочет иметь возможность поиска по нескольким базам данных, а затем иметь возможность фильтровать и сортировать данные. Я надеялся использовать Dojo Enhanced Datagrid с использованием XML-ввода. Таким образом, я мог бы скомпилировать все результаты в бэкэнде и затем представить их в Grid в целом.

Я пробовал несколько примеров, и все они, похоже, работают в браузере, но не в Notes Client. К сожалению, это клиентское приложение Notes.

Я использовал приложение Texas BBQ в качестве теста только потому, что все данные включены в приложение. Я нашел это на:

NotesIn9 92: Пол Кэлхуна (Paul Calhoun): использование расширенной сетки данных Dojo в XPages http://www.notesin9.com/2012/12/03/notesin9-092-using-the-dojo-enhanced-data-grid-in-xpages/

Мне удалось получить «Расширенную сетку данных Dojo с источником данных XML» для загрузки элемента управления Dojo, но я просто получаю «Извините, произошла ошибка» там, где должны быть данные.

Вот ссылка на техасское барбекю из «Заметок в 9». 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 голосов
/ 03 июля 2018

Мне удалось отследить проблему вплоть до фактического вызова хранилища данных. Если вы используете пример с барбекю, Пол использует отдельную страницу X для формирования ввода XML и вызывает его в качестве ссылки URL в своем коде:

var strURL = "/DanF/TexasBBQ_DGO.nsf/BBQXML_NC.xsp"
var xmlStore = new dojox.data.XmlStore({ url: strURL });

Это не будет работать внутри Notes-клиента!

Мое решение состояло в том, чтобы использовать XML restService на той же странице для создания ввода. Это сделало страницу более автономной, и клиент Notes смог создать страницу за один раз.

Вот Xpage, если мой окончательный результат: (Вам нужно будет указать 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>
0 голосов
/ 29 июня 2018

Клиент Notes использует более старую версию движка Firefox. Проверьте эту документацию для сравнения:

https://iwonthemove.wordpress.com/2013/03/14/how-to-get-a-proper-javascript-debugger-in-xpinc/

(Последние версии могут быть новее, но вы поняли идею. Эта презентация:

https://www.slideshare.net/ddrschiw/ad108

описывает XPiNC (XPages в Notes Client). Слайд 21 показывает клиентскую панель инструментов, которая обеспечивает доступ к источнику. Слайд 22 рассказывает об отладке.

Обновление

Вы также хотите посмотреть на индикатор Firebug, он покажет вам возможные ошибки JS. Смотрите этот пост для деталей: https://www.mindoo.com/web/blog.nsf/dx/02.02.2012162412KLEL3Q.htm

/ Update

Надеюсь, это поможет.

Btw. Я бы не использовал инструмент с графическим интерфейсом (Dojo Grid) для запроса различных источников. Скорее используйте управляемый компонент и сетку соединения 1: 1 - компонент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...