Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/35: Рейтинг темы: голосов - 35, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252

jsonRpcService/CSJS->SSJS->CSJS ошибка запроса

09.08.2016, 19:25. Показов 7317. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
кнопка и сервис в файле (админы - где вы, невозможно так код постить уже)
в либе код такой (изгалялся по-разному, но до него даже не доходит)

Код (Javascript):
function rpcSetViewScope(xName:string, xVal:string){
try{
viewScope.put("\""+xName+"\"",xVal);
return xVal;
} catch (e) {
return SSJS Error: + e.toString();
}
}

ошибка:
Caused by: java.lang.ClassCastException: com.ibm.jscript.std.FunctionObject incompatible with com.ibm.jscript.std.ObjectObject
at com.ibm.jscript.json.JsonJavaScriptFacto ry.getProperty(JsonJavaScriptFactory.jav a:87)
это ответ сервера клиенту (браузеру) на POST (кот. по кнопке)

Код (XML):

<xe:jsonRpcService id="rpcScope" pathInfo="rpcScope"
serviceName="rpcScope">
<xe:thys.methods>
<xe:remoteMethod name="setViewScope"
script="rpcSetViewScope">
<xe:thys.arguments>
<xe:remoteMethodArg name="xName" type="string"></xe:remoteMethodArg>
<xe:remoteMethodArg name="xVal" type="string"></xe:remoteMethodArg>
</xe:thys.arguments>
</xe:remoteMethod>
</xe:thys.methods>
</xe:jsonRpcService>

<xp:button value="XHR" id="button1" onclick="xhr();">

<xp:eventHandler event="onclick" submit="false">
<xp:thys.script><![CDATA[try{
rpcScope.setViewScope("test","test").add Callback(function(xVal){
console.log("xVal:"+xVal);});
} catch (e) {
alert(e.toString());
}]]></xp:thys.script>
</xp:eventHandler></xp:button>
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.08.2016, 19:25
Ответы с готовыми решениями:

Работа со строками viewpanel на csjs
Как выделить цветом кликнутую мышой row в стандартном viewPanel? Что б как в стандартной вьюшке на классике. И взять конкретный...

Set/get scope var через csjs
Привет, Помогите понять что не так. Что нужно: спросить пользователя и записать его ответ в поле документа Что делал: 1)поле...

Сторонние js убивают работу csjs хпагесов
хотел порисовать схему для докуменооборота, взял библиотечку GoJS (сайт_GoJS библиотечка_go.js около 800кб). И не могу понять, толи я...

23
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
09.08.2016, 20:08
прошу прощения, разобрался...
там же JS - надо было ф-цию нрмально описывать (как для JS)
в script= у сервиса
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
10.08.2016, 13:12
наступил еще на грабли...:
- вызов ф-ции, посчему-то работает только для Static value (в динамике не
- не могу передать массив (ни keys=[]; ни =new Array();... )

Код (Javascript):
try{
var keys=new Array();
keys.push("one");
keys.push("two");
keys.push("three");
rpcScope.setViewScope("keys",keys).addCa llback(function(xVal){
try{
console.log("xVal:"+xVal);
}catch (e){
alert(e.toString());
}
});
} catch (e) {
alert(e.toString());
}
посылает


Caused by: java.lang.ClassCastException: com.ibm.jscript.types.JavaAccessObject incompatible with com.ibm.jscript.std.ArrayObject
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
10.08.2016, 15:37
не знаю - с чем это связанно - не нашел "в ваших тырнетах"
передавать можно объекты, массивы (JS) - нет
т.е. можно передать

Код (Javascript):
try{
var keys={};
keys[1]="val1";
keys[2]="val2";
rpcScope.setViewScope("keys",keys).addCa llback(function(xVal){
try{
console.log("xVal:"+xVal);
}catch (e){
alert(e.toString());
}
});
} catch (e) {
alert(e.toString());
}
на выходе будет


xVal:[object Object]
непонятным остается - почему поиски на тему JSON RPC list array - ничего по теме не нашлось...
не верю - что никто не хотел предать просто массив
0
0 / 0 / 0
Регистрация: 20.07.2014
Сообщений: 93
11.08.2016, 09:26
сервис правильно описали? Параметр нужно описать как массив
Приложил пример, у меня работает
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
11.08.2016, 09:57
Цитата Сообщение от romych2004
сервис правильно описали? Параметр нужно описать как массив
Приложил пример, у меня работает
спасибо, с сервисом все правильно, НО в ф-ции, вызываемой, есть присвоение в viewScope (вот он не принимает массива через put, др. вариант не тестил, но думаю - то же), вот в ней рантайм и заворачивается
уже тестил, отписаться не успел
неприятность отладки в том, что жалуется на запрос (при таком сочетании)
0
0 / 0 / 0
Регистрация: 20.07.2014
Сообщений: 93
11.08.2016, 13:55
Code
1
viewScope[keys]=arr;
Никаких ошибок не выдал, все присвоил
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
11.08.2016, 14:06
Цитата Сообщение от romych2004

Code
1
viewScope[keys]=arr;
Никаких ошибок не выдал, все присвоил


Код (Javascript):
function rpcSetViewScope(xName:string, xVal){
//return rpcGetChartData();
try{
var tmp=[];
for (var val in xVal){
tmp.push(xVal[val]);
print("value:"+xVal[val]);
}
// viewScope.put(xName,tmp);
return viewScope.get(xName);
} catch (e) {
return SSJS Error: + e.toString();
}
}

рскоментируем viewScope.put(xName,tmp); получим ошибку
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
11.08.2016, 14:08
в данном случае xVal из CSJS выше
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
11.08.2016, 14:12
сервис

Код (XML):
<xe:jsonRpcService id="jsonRpcService1" pathInfo="rpcScope"
serviceName="rpcScope">
<xe:thys.methods>
<xe:remoteMethod name="setViewScope"
script="return rpcSetViewScope(xName,xVal);">
<xe:thys.arguments>
<xe:remoteMethodArg name="xName" type="string"></xe:remoteMethodArg>
<xe:remoteMethodArg name="xVal" type="list"></xe:remoteMethodArg>
</xe:thys.arguments>
</xe:remoteMethod>
</xe:thys.methods>
</xe:jsonRpcService>
0
0 / 0 / 0
Регистрация: 20.07.2014
Сообщений: 93
11.08.2016, 14:28
Ясно
У вас ошибка в том, что Вы возвращаете массив. Возвращать нужно либо строку либо ничего
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
11.08.2016, 14:59
Цитата Сообщение от romych2004
Ясно
У вас ошибка в том, что Вы возвращаете массив. Возвращать нужно либо строку либо ничего
не совсем так
или мы др-др не понимаем
массив спокойно возвращается, но только не из viewScope (указанным способом)
вот так

Код (Javascript):
return tmp;//viewScope[xName];//viewScope.get(xName);
спокойно возвращает
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
11.08.2016, 15:14
др. словами:

запихнуть/вывести ассоциативный массив (аки map) - нет проблем
с массивом (простым) - проблема
вот так

Код (Javascript):
viewScope[xName]=xVal;
return viewScope[xName];//viewScope.get(xName);

споконо отработает, если на входе (xVal) - map
0
0 / 0 / 0
Регистрация: 20.07.2014
Сообщений: 93
11.08.2016, 15:32
И правда, там даже методы toString() по-разному отрабатывают. Один со скобками, другой без..
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
17.08.2016, 14:47
дополню, сюда, итератор объектов...
почему - да патамочта в SSJS не будет работать более комфортный вариант

Код (Javascript):
Object.keys(myArray).length
, кот. есть в CSJS (движок браузера посвежее будет ;) , чем rhino у домины)
иногда "нужно" получить элементы объекта но не в порядке размещения, ассоциативный массив JS, в отличии от LS не будет соблюдать порядок внесения элементов (вот ведь "странно" ;), а "мы" так привыкли в LS)
ассоциировать объекты, в таком случае, можно с номером (это коряво, но хоть что-то, если "надо" передавать именно ассоциативный массив), пример для SSJS:

Код (Javascript):
function rpcGetChartData(map){
Object.size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
//....
var keyV:java.util.Vector=historyV(@Today()) ;
for(var i=0; i<Object.size(map);i++){
keyV.addElement(map[i]);
}

где var map={};map[1]=...
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
25.08.2016, 12:44
очередные моя "плакать"...
сперва, как и в теме - возврат undefined - дефолтного рапера нет!


Caused by: com.ibm.commons.util.io.json.JsonExcepti on: Unknown literal of class com.ibm.jscript.types.FBSUndefined
т.е. возвратить из SSJS undefined (я возвращал внутри объекта с массивом) не получится
это какбэ странно
теперь про даты - как их сравнивать, а хз - потому как штатно они, при сравнении приводятся к стрингу
т.е.

Код (Javascript):
var dt:NotesDateTime, dt1:NotesDatetime;
...
while (dt<=dt1){...}
спросите - а чего я ожидал - приведения хотя бы к long (например - в ms)
мало того, в приведенном типе toJavaDate, я не нашел методов before и after, в подсказке, но они есть ;)
вопщем - цирк с конями
и это к теме - на чем лучше писать бэкэнд (SSJS или java) - для меня ответ очевиден
0
0 / 0 / 0
Регистрация: 20.07.2014
Сообщений: 93
28.08.2016, 16:03
Цитата Сообщение от lmike
очередные моя "плакать"...
сперва, как и в теме - возврат undefined - дефолтного рапера нет!т.е. возвратить из SSJS undefined (я возвращал внутри объекта с массивом) не получится
это какбэ странно
теперь про даты - как их сравнивать, а хз - потому как штатно они, при сравнении приводятся к стрингу
т.е.

Код (Javascript):
var dt:NotesDateTime, dt1:NotesDatetime;
...
while (dt<=dt1){...}
спросите - а чего я ожидал - приведения хотя бы к long (например - в ms)
мало того, в приведенном типе toJavaDate, я не нашел методов before и after, в подсказке, но они есть ;)
вопщем - цирк с конями
и это к теме - на чем лучше писать бэкэнд (SSJS или java) - для меня ответ очевиден
NotesDateTime.timeDifference()?
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
28.08.2016, 16:25
Цитата Сообщение от romych2004
NotesDateTime.timeDifference()?
не вижу отличия от

Код (Javascript):
dt.toJavaDate().before(dt1)
и странно что именно этот вариант не подсвечивается в коде(в том и неудовольствие)
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
10.10.2016, 19:08
тема будет всплывать ибо много "особенностей"
все они касаются вывода значений после вызова из CSJS к SSJS
вот очередной экзерциз...

Код (Javascript):
var tmp=eval("#{javascript:return rpcSummaryMnth(viewScope.get(curyear), viewScope.get(curmonth), true)}");
хотеть - массив.
в SSJS:

Код (Javascript):
var key:String=context.getUser().getCommonNa me()+"|"+year+@Right("00"+month,2);
var entry:NotesViewEntry=entryByKey(vname, key);
var v:java.util.Vector=entry.getColumnValues ();
//forecast summary by month
//return 2 years or 1
print("key:"+key);
var tmp=$CONV.toArray(full?v.subList(2,25):v .subList(2,13));
получение массива из ч-л: https://openntf.org/XSnippets.... o-an-array
засада будет при конвертации (хотя там "вроде" JS массив ;) ) для возврата клиенту.
кастыль:

Код (Javascript):
var arr=new Array();
arr.push(0)
for(var i=0; i<tmp.length; i++){
//to escape trouble with return to CSJS (json convert)
arr.push(tmp[i]);
}
return arr;//$CONV.toArray(full?v.subList(2,25):v.sub List(2,13));
закоменченный возврат - выдаст ошибку конвертации (выдаст его в клиент! ответом на запрос)
0
0 / 0 / 0
Регистрация: 20.07.2014
Сообщений: 93
11.10.2016, 21:27
Во-первых, что бросилось в глаза - это eval, зачем он тут нужен? Ты итак выводишь текст
Во-вторых, если передать в функцию toArray лист(а передается именно лист, а не вектор), то она вернет [лист](см. исходный код функции). А не сконверченный в массив
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.10.2016, 21:27
Помогаю со студенческими работами здесь

Rich text получить значение csjs
Здравствуйте. Есть на Xpage рт-поле Код (HTML5): &lt;xp:inputRichText id=&quot;text&quot; value=&quot;#{document1.text}&quot; ...

Ошибка запроса System.Data.OleDb.OleDbException: "Ошибка синтаксиса (запятая) в выражении запроса
Добрый день, коллеги! Утро субботы не задалось В коде формирую запрос в базу. Текст запроса следующий: strTabName =...

Ssjs И Activexobject
При выполнении следующего SSJS: var objWord = new ActiveXObject(&quot;Word.Application&quot;) сервер выдает ошибку: 20.05.2014 15:14:48 HTTP...

Обновление Полей В Ssjs
Всем привет. добрался и я к Xpage. работаю над первым проектом и солкнулся с траблом как обновить несколько полей. искал инфу и все...

SSJS а что у нас с датами
а вот с датами у &quot;нас&quot; некоторый конфуз Код (Javascript): var keys = ; keys.push(context.getUser().getCommonName()); var dt =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru