Как использовать сетку данных Dojo с XML в клиенте Notes

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

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

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

NotesIn9 92: Использование Dojo Enhanced Data Grid в XPages, Пол Калхун http://www.notesin9.com/2012/12/03/notesin9-092-using-the-dojo-enhanced-data-grid-in-xpages/ < / а>

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

Вот ссылка на техасское барбекю из Notes в 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


person Dan F    schedule 28.06.2018    source источник
comment
Есть кнопка отладки, которая показывает источник и возможные ошибки. Ты их проверил?   -  person stwissel    schedule 29.06.2018
comment
Я просмотрел исходный код страницы, но там нет ничего, что указывало бы на ошибку. Судя по всему, он исходит из управления Додзё. А другая кнопка - это просто конфигурация браузера, и я там тоже ничего не увидел. Но спасибо за проявленный интерес.   -  person Dan F    schedule 29.06.2018
comment
Что говорит firebug?   -  person stwissel    schedule 02.07.2018
comment
Firebug просто указал на Dojo Control, который выдавал ошибку, но не дал мне понять, где искать. Итак, я попытался использовать JSON restService. Было близко, но ни одна из моих колонок не сортировалась. Итак, я решил создать XML restService и вернуться к исходному формату, и, наконец, это сработало.   -  person Dan F    schedule 03.07.2018
comment
Рад, что все получилось!   -  person stwissel    schedule 03.07.2018


Ответы (2)


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

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

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

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

Вот Xpage, если мой окончательный результат: (Вам нужно будет указать URL-адрес хранилища данных на вашу собственную X-страницу)

<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>
person Dan F    schedule 03.07.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). Слайд 21 показывает панель инструментов клиента, которая позволяет получить доступ к источнику. На слайде 22 рассказывается об отладке.

Обновить

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

/ Обновить

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

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

person stwissel    schedule 29.06.2018
comment
Спасибо за все предложения. Я изучу их и расскажу, как у меня дела. - person Dan F; 02.07.2018
comment
Еще раз спасибо @stwissel, мне удалось заставить отладку работать, но все же ошибка указывает только на Dojo. Мне удалось восстановить все это с помощью службы отдыха и JSON, но я обнаружил: (1) сортировка не работает и (2) сетка считывает только часть вывода JSON, а затем повторяется. Кажется, что он берет только первые 20 строк, а затем повторяет их. Возможно, вы расскажете мне больше о вашем Manged bean и сетке соединений 1: 1. Имеет ли сетка все те же функции, что и у Dojo Enhanced Grid? Мне нужна сортировка и фильтрация столбцов. - person Dan F; 03.07.2018