• 🚨 Ещё можно успеть на курс «OSINT: технология боевой разведки» от Академии Кодебай

    🔍 Изучите методы разведки с использованием открытых источников (OSINT) для проведения успешных атак.
    🛠️ Освойте ключевые инструменты, такие как Maltego, TheHarvester и другие.
    🧪 Пройдите практические лабораторные работы, имитирующие реальную разведку.
    🧠 Развивайте навыки, которые помогут вам стать экспертом в области информационной безопасности.

    Запись открыта до 23 мая Подробнее о курсе ...

Документ из джисона

M

motogarri

Всем привет.
Когда мы открываем документ в xpage по url такого вида:

сервер возвращает HTML всей страницы.

В случае работа rest service + datagrid возвращается только json. Пытаюсь понять, как открыть документ по тому же принципу и никак не нахожу решения. Рест сервис нельзя использовать как датасорц, непонятно как в самом сервисе запросить один документ по униду, как этот унид передать из грида в след. икспейдж с формой документа по даблклику.
Ну, как получить унид понятно, непонятно что с ним делать потом
JavaScript:
var grid = arguments[0].grid;
var index = arguments[0].rowIndex;
var item = grid.getItem(index);
var unid = item.attributes["@unid"];


Пните плиз в нужную сторону. Как это делается?
 
Пытаюсь понять, как открыть документ по тому же принципу
получить json как отдаёт дата провайдер? или какой json тебе надо?

если просто по обращению к Х-странице получить ответ типа жсон то
JavaScript:
<xp:this.afterRenderResponse>

var externalContext = facesContext.getExternalContext();
var writer = facesContext.getResponseWriter();
var response = externalContext.getResponse();
 
response.setContentType("application/json");
response.setHeader("Cache-Control", "no-cache");
               
writer.write( сюда строку жсона );

writer.endDocument();
 
var doc:NotesDocument = database.getDocumentByUNID(unid) (database - текущая, для данного xpage)

"как этот унид передать из грида в след. икспейдж" - напр. запомнить в Scope...
 
Чет я не понял что именно нужно :)
Чтобы из датагрида открывался документ?
Формируй ссылку типа и по клику на нее пользователь будет переходить. Чем такой вариант не подходит?

UPD: если Вы хотите получить JSON документа, то надо создать другой РЕСТ - xe:documentJsonService
 
Последнее редактирование модератором:
РЕСТ - xe:documentJsonService
Да, именно так. Нужно открывать документ из грида по двойному клику и сделать источником данных для полей, наверное рест. Только я не понял, как это сделать. Для xe:documentJsonService не нашёл ни одного примера, где бы он использовался для открытия документа.
 
Да, именно так. Нужно открывать документ из грида по двойному клику и сделать источником данных для полей, наверное рест. Только я не понял, как это сделать. Для xe:documentJsonService не нашёл ни одного примера, где бы он использовался для открытия документа.
Зачем вам рест? Юзайте обычный дата сорс, мне кажется проще будет. Или необходим именно рест?
 
Ну, пока так и делаю. Мне просто не нравится, что браузер тянет с сервера всю html страницу и это видно в нетворках консоли, не нравится километровая адресная строка. В идеале построить сингл пейдж приложение, максимально защищенное, насколько это возможно в браузере. На первый взгляд казалось, что рест-сервис это как раз тот вариант. Не хватает опыта оценить.
 
Ну, пока так и делаю. Мне просто не нравится, что браузер тянет с сервера всю html страницу и это видно в нетворках консоли, не нравится километровая адресная строка. В идеале построить сингл пейдж приложение, максимально защищенное, насколько это возможно в браузере. На первый взгляд казалось, что рест-сервис это как раз тот вариант. Не хватает опыта оценить.
урл можно сделать практически любой. ну т.е. заменить параметры на свои
в таком случае смотрите рест, да.. там есть рест для документа, я думаю он должен подойти. Еще вариант - посмотрите xcontrols, там разработчики как раз апдейтят документы через параметры, на сколько я помню
 
Что-то не выходит у меня открыть документ с помощью реста. Сервис возвращает нормальный json. Помещаю его в store, и пытаюсь отобразить в гриде. Вычитал, что в гриде один документ не покажешь, только коллекцию. А как тогда быть? Нужно открывать документы для просмотра, редактирования...

Вот что пока получилось:
XML:
<xe:restService id="restService1" pathInfo="rs">
  <xe:this.service>
    <xe:documentJsonService contentType="application/json" documentUnid="2C2D6686CA61AC7C43258048005394DE" var="doc">
      <xe:this.items>
        <xe:restDocumentItem itemName="LastName" name="s_last_name"></xe:restDocumentItem>
        <xe:restDocumentItem itemName="FirstName" name="s_first_name"></xe:restDocumentItem>
      </xe:this.items>
   </xe:documentJsonService>
  </xe:this.service>
</xe:restService>
JavaScript:
var store = new dojox.data.JsonRestStore({target: "myPage.xsp/rs"});
var layout = [
   {name:"1", field: "s_last_name" , datatype:"string"},
   {name:"2", field: "s_first_name", datatype:"string"},
];          
var grid = new dojox.grid.DataGrid({
   id: "grid",
   store: store,
   structure: layout,
});                   
grid.placeAt("gridDiv");
grid.startup();

Получается отображать поля документа, перебирая айтемы json-а, но это не слишком удобно и непонятно как быть в случае создания и редактирования документов.
JavaScript:
dojo.xhr.get({
    url:"myPage.xsp/rs",
    handleAs:"json",
    load: function(data){
    var content;
    for(var i in data){
        if(i == "s_last_name"){
            content =+ "<div>Счёт: " + data[i] + "</div>"
        } 
    }
    dojo.byId("div_result").innerHTML = content;
    }
});

Может кто-то сталкивался?
 
Ну ничего страшного в обмене html нет, ну тянет вместо 20кб - 70кб.. ничего криминального, как мне кажется :)
Для SPA советую посмотреть контрол dynamicContent, я его использую.
Урл можно сделать любым.. типа page.xsp?id=noteId, а в датасорсе указывать айди документа как param.id

Full update я никогда не делают
 
Ну ничего страшного в обмене html нет, ну тянет вместо 20кб - 70кб.. ничего криминального, как мне кажется
Так и работает. Просто пытаюсь все подвести под одну концепцию. Как-то странно это, xe:documentJsonService есть, а контрола (по типу грида) для работы с одним документом нет. Или я не нашел просто. Store нормально забирает json из сервиса, а что потом с этим store делать, непонятно.
 
Так и работает. Просто пытаюсь все подвести под одну концепцию. Как-то странно это, xe:documentJsonService есть, а контрола (по типу грида) для работы с одним документом нет. Или я не нашел просто. Store нормально забирает json из сервиса, а что потом с этим store делать, непонятно.
Не совсем понимаю какой именно контрол Вам нужен. Данный сервис предоставляет Вам АПИ для чтения документа и для записи документа из клиентского джаваскрипта. Делается это ajax-ом. Можно конечно и в store запихнуть :) Но особого смысла не вижу
 
а контрола (по типу грида) для работы с одним документом нет
зависит от того - что хотите (задачи)
гриды в хэпагах мну не понра - много особенностей и мало возможностей (мне нужных, под задачу, не нашел)
для небольшой выборки заюзал gridx
еще понра - можно не весь док апдейтить ("руками" запрос отправлять), а только поле (PATCH на сервере надо настроить)
к стору вменяемый доступ...
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!

Курс AD