2015-10-14 5 views
1

Я установил службу REST RLL как «xe: viewJsonService» и подключил ее к представлению домино. В настоящее время представление содержит 63 записи. Документы, стоящие за этими записями, имеют ограничения на доступ к чтению.viewJsonService возвращает слишком много записей в dataGrid

Json, возвращенный службой, потребляется сеткой данных Dojo (взята из библиотек ExtLib).

Доступ к странице осуществляется с помощью тестового пользователя, имеющего доступ для чтения только к одной из 64 записей. Пользователь однако видит таблицу данных, содержащую один элемент данных, за 63 пустых записей, например:

enter image description here

Глядя на необработанных данных Json я вижу, что услуга действительно возвращает только одну запись, но он знает, что есть 63 братьев и сестер:

[ 
    { 
     "@entryid":"1-6C5763E4A122F1D3C1257EC700355386", 
     "@unid":"6C5763E4A122F1D3C1257EC700355386", 
     "@noteid":"3FD2E", 
     "@position":"1", 
     "@read":true, 
     "@siblings":63, 
     "@form":"fInvoice", 
     "colIconStatus":"imgInvExported.gif", 
     "colIconLock":"blank.gif", 
     "invInvoiceDate":"2015-09-21T09:44:27Z", 
     "invJobInvNumbers":"111\/5152\/52567\/ 001", 
     "invSupplierNameShort":"My Test Company GmbH", 
     "invAmount":121.5 
    } 
] 

Технически говоря, это правильно, поскольку служба имеет доступ ко всем 64 записей. Проблема в том, что в сетке данных создается пространство для 64 записей вместо одного.

Вопрос: как я могу сообщить сетке данных правильный объем данных для отображения? Или мне нужно управлять службой REST?

EDIT: продолжая свой поиск возможного решения в то же время нашел несколько других связанных с этим вопросов this one Эрик McCormick (в том числе очень хороший подход Стефан Wissel), или this one Стивом Zavocki. Так что мой вопрос будет дубликат, на самом деле ... (извините за это)

ответ

1

Лотар,

Я испытал это раньше, как вы указали. Я считаю, что ответ заключается в использовании свойства «keys» для фильтрации недопустимых записей.

Я не уверен, как структурировано ваше приложение, но если пользователь может видеть только определенные записи в представлении, я бы рассмотрел классификацию пользователя, а затем использовал ключи, чтобы показать им только строки, в которых они есть доступ.

Вы спросили, можете ли вы изменить сетку додзе, чтобы исключить записи. Я думаю, что ответа нет. Ваши параметры должны фильтроваться через службу REST или через представление Notes.

Это связанное сообщение в блоге, которое я написал о проблемах, которые у меня были. http://notesspeak.blogspot.com/2013/07/creating-updatable-rest-service-for-use.html


EDIT2 Дополнительные вещи, чтобы попробовать

1) Вы видите комментарий на моем блоге? Я сам не пробовал. Кредит отправляется в блог-комментарий «Goo Goo».

«Я использую этот код в onstyleRow случае сетки, чтобы решить пустой вопрос строки»

, который с помощью viewJsonService:

var row = arguments[0]; 
var rowItem = djxDataGrid1.getItem(row.index); 
var rowCount = Object.keys(restService1._index).length - 1; //-1 for omit the onUpdate event 
if(row.index >= rowCount){ 
row.customStyles += 'display:none;'; 
} 

2) То, что я лично сделал, чтобы исправить этот вопрос является в этом ответе SO: How to configure an xe:viewFileItemService on an XPage to filter the data in a categorized view?

Учитывая, что вы сказали о своей структуре зрения, я не уверен, что это применит к вам.

+0

На самом деле я пробовал «ключи», как в «getAllEntriesByKey», но результат был тот же. Какая помощь - это подход с одной категорией, который я использую в 99% моих взглядов, но не в этом. Я просто собирался изменить эту точку зрения, когда я возбуждал какое-то непонятное свойство (см. Мой собственный ответ, который unfortunatelxy приводит к другому вопросу ...) –

+0

Я отредактировал свой ответ с помощью двух добавленных вещей, чтобы попробовать.Удачи –

2

Предостережение:, пожалуйста, прочитайте внизу этого ответа, поскольку вы можете столкнуться с неожиданными предложениями!

Наконец после того, как некоторые игры вокруг, я просто наткнулись на малоизвестное имущество, которое, кажется, помогает, по какой-либо причине (я буду делать это новый вопрос):
свойства globalValues, как представляется, для типов услуг xe:documentJsonService, xe:viewItemFileService, xe:viewJsonLegacyService, xe:viewJsonService и xe:viewXmlLegacyService. это свойство имеет три фиксированных параметра: Entries (= 0x0001), Top Level (= 0x0002) и Timestamp (= 0x0004). Только играя в Гулд старой игры «пробы и ошибки» Я обнаружил, что установка этого свойства 1 (= записи) изменяет/фильтрует полученные данные:

по умолчанию сырья JSON, возвращаемое xe:viewItemFileService выглядит следующим образом:

{ 
    "@timestamp":"2015-10-14T12:57:59Z", 
    "@toplevelentries":63, 
    "items": 
    [ 
     { 
      ... 
     } 
    ] 
} 

Установка globalValues в «1» удаляет @timestamp и @toplevelentries поля с выхода:

{ 
    "items": 
    [ 
     { 
      ... 
     } 
    ] 
} 

и, что более важно, это также удаляет пустые строки из моей сетки данных!

Есть только одна вещь, которая заставляет меня нервничать, и это то, что я не могу найти никаких объяснений в отношении этой собственности. Поэтому я действительно не знаю, есть ли какие-либо нежелательные побочные эффекты ...

Обновление: благодаря Кнуту Херрманну. Я сделал еще несколько тестов на этом (см. Комментарии ниже этого ответа). По моему мнению, на мой взгляд, более 13 000 документов; до тех пор, пока мой тестовый пользователь может читать только небольшое количество, все кажется, что все в порядке. Затем я добавил еще 200 документов в список с поддержкой чтения. Результат - это сетка данных, которая постоянно должна пересчитывать свою полосу прокрутки: чем дальше, тем меньше прокручивается ручка прокрутки. Как только я дойду до нижней границы, сетка переходит в berzerk и решает отображать только первые 13 (?!?) Строк, а также полосу прокрутки удаляется все вместе. Однако производительность не так плоха, как я ожидал.

Поэтому я должен согласиться с Кнутом, что это не такое хорошее решение для комбинации больших видов с большим подмножеством доступных записей!

+0

Как работает сетка данных, если у вас есть представление, например. 1000 записей? Поддерживает ли вертикальный слайдер работу? Это может быть сложно обработать для сетки данных, поскольку она больше не получает информацию о том, сколько записей в общей сложности и на какой позиции находится текущий REST chunk ... –

+0

, если честно, я не знаю; этот конкретный вид будет содержать не более 100 записей. В настоящее время он содержит 63 записи, и, будучи установленным для отображения сразу 25 записей, отображается вертикальная полоса прокрутки. Однако с другими взглядами у меня были такие же проблемы, прежде чем я решил переключиться на отдельные категории, и эти представления содержат более 10 000 записей. Полоса прокрутки работала над ними, хотя я не могу сказать, действительно ли было 10 000 пустых строк ... - хорошая идея попробовать эту опцию на реальном большом представлении. –

+0

@Knut: просто попробовал некатегоризированное представление, содержащее 13 100 записей, к которым может обратиться мой тестовый пользователь 7. Без globalValues ​​= "1" в сетке данных отображается 7 документов и огромное количество пустых строк; полоса прокрутки отлично работает, так как я могу прокрутить до самого конца и снова вернуться (нет, я не считал пустоту ...). Затем установите globalValues ​​в 1, перестроил источник страницы. Результат показывает мои 7 доступных записей и ничего больше. Производительность, похоже, в порядке, хотя сейчас на этом сервере не существует одновременных пользователей. - Далее я попробую читать-разрешая дополнительные документы для моего пользователя. –

Смежные вопросы