• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Проблема Веб-сервис WSDL и JS. Библиотека программ на стороне клиента с SOAP или REST запросами

Ficoos

Lotus Team
15.03.2016
142
5
BIT
187
Доброго дня, форумчане!
"Нашел" новую проблему:
На кнопке (на стороне клиента) на странице есть несколько переменных, которые присваивают себе значение из функций, находящиеся в библиотеке программ на стороне клиента.


Код:

var mid = getFIO(nam, fam)

результат возвращается и вставляется в поле.
Следующий код берет, например, семейное положение:


Код:

var sp = getSp(IDsUser)

и следующей строкой присваиваем значение переменной "sp" полю на странице. Но значение, почему-то = undefined, хотя алертом в функции выдало нужный результат.
Даже с тфймаутом в 2, 3, 5 секунд - результат - undefined!
Функции библиотеки - это SOAP или REST запросы, некоторые к WSDL службе БД, а некоторые - обработчики математические. Есть еще и последующие переменные, которые обращаются к функциям на стороне клиента и делают запросы, но без выше перечисленных переменных - нет смысла их тут описывать.
Вопрос: Что я не так делаю???
 
Последнее редактирование:

garrick

Lotus Team
26.10.2009
1 354
151
BIT
230
Всё неправильно! В первую очередь вопросы задаёшь неправильно. Ни фига же непонятно.
 

Ficoos

Lotus Team
15.03.2016
142
5
BIT
187
А чего непонатного я написал?
Есть база в лотусе. В ней есть xpage элементы. Есть страница xpage, на которой есть несколько полей редактируемых и кнопка, при нажатии на которую срабатывает программа, записанная на событии "onClick" на стороне клиента.
В базе есть профильный документ с полями, в которых записаны настройки: Путь к WSDL сервису; Текст, команды или названия вункций веб сервиса, к которым надо обращаться в каких-то случаях; Путь к стороннему веб сервису со списком соманд или функций, по которым ожидается ответ. От ответов предыдущих функций принимается решение на ту или иную операцию.
1) На кнопке первая строка кода этой кнопки передает параметры подпрограмме (функции) в библиотеку сценариев JS на стороне клиента. Эта функция делает какие-то вычисления и возвращает результат (return result) строке
программы кнопки, которая вызвала эту функцию.
2) Следующая строка программы кнопки этот результат заносит в поле на открытой странице.
3) Следующая строка программы передает параметры (Название поля профильного документа) другой функции в библиотеку сценариев JS на стороне клиента. Эта функция обращается к веб сервису текущей базы базы Lodus Domino. которая возвращает значение поля, название которого передано параметром. Перед возвратом значения функции есть alert(result), что бы во время тестирования убедиться, что результат есть.
4) Следующая строка программы кнопки этот результат заносит в поле на открытой странице. (Вот тут засада!!! Возвращаемое значение функции (3)) значение = undefined), хотя алерт функции в библиотеке выдал результат не пустой, не NaN, не null, а конкретно текст. Пробовал задержки "setTimeout" на 2,3, 5 секунд, Но результат не тот.)
Вот здесь и вопрос: Почему undefined??? Что не так сделал?
Код:
var leo    = XSP.getElementById("#{id:leoText}");
var jlo = XSP.getFieldValue(leo);
var lep    = XSP.getElementById("#{id:lepText}");
var jpa = XSP.getFieldValue(lep);
//1)
var ttr = globAut(jlo,jpa);
if(ttr != '' & ttr != 'error'){
    var xx = getPw('PWServer');
}else{
    ttr = 'error'
}
//2)
XSP.getElementById("#{id:cancelCode}").value = ttr;
if(ttr != 'error'){
//3)
    var xx = getPw('PWServer');// Сама функция getPw возвращает текст
}
//4)
XSP.getElementById("#{id:tokenCode}").value = xx;//xx здесь уже undefined
 
Последнее редактирование:

savl

Lotus Team
28.10.2011
2 611
313
BIT
329
а сам веб-сервис не выдаёт ошибки?
может что в логах есть?
 

Ficoos

Lotus Team
15.03.2016
142
5
BIT
187
а сам веб-сервис не выдаёт ошибки?
может что в логах есть?
Нет. Веб сервис работает отлично, тем более, что изначально все проверялост программой SOAP UI. В вункции "getPw" поставил строку "alert(result)" и диалоговое окно показывает не undefined.
У меня есть подозрение, что программа кнопки не дожидается ответа, даже с setTimeout и вставляет в поле значение переменной xx, которой ничего не присвоено (Равнозначно: var xx)
 
Последнее редактирование:

NetWood

Lotus Team
17.04.2008
558
94
BIT
101
3) Следующая строка программы передает параметры (Название поля профильного документа) другой функции в библиотеку сценариев JS на стороне клиента. Эта функция обращается к веб сервису текущей базы базы Lodus Domino.
Профиль док на вебе это зло. Он люто кешируется задачей http. Не используйте их. Может в этом причина.
 

Ficoos

Lotus Team
15.03.2016
142
5
BIT
187
Профиль док на вебе это зло. Он люто кешируется задачей http. Не используйте их. Может в этом причина.
А есть разница между прямым обращением к полю профильного документа типа:
var pdoc = database.getprofiledocument("Profile", "")
var item = pdoc.getitemvalue("Title")
Здесь кэшируется?

и
А Здесь?:
var http = new XMLHttpRequest();
var body = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:DefaultNamespace"> \
<soapenv:Header/> \
<soapenv:Body> \
<urn:TMP>Title</urn:TMP> \
</soapenv:Body> \
</soapenv:Envelope>'
http.open('POST', "https://localhost:port/Folder/dbname.nsf/wsl?WSDL", true);
http.setRequestHeader('Content-Type', 'text/xml; charset=utf-8');
http.onload = function() {
var res = new String(http.responseText)

return res
}
http.send(body);

И как профильный документ кэшируется при обращении программы к вебсервису?

Ребята! Давайте по существу вопроса!!!
 

garrick

Lotus Team
26.10.2009
1 354
151
BIT
230
У тебя "var xx" объявлено внутри if{} т.е. переменная существует только внутри скобок, при выходе за них такой переменной нет.
 

Ficoos

Lotus Team
15.03.2016
142
5
BIT
187
У тебя "var xx" объявлено внутри if{} т.е. переменная существует только внутри скобок, при выходе за них такой переменной нет.
Не работает! Даже если оставить только 2 строки в программе кнопки:
Код:
var xx = getPw('Title');
XSP.getElementById("#{id:tCode}").value = xx;
Все равно полю "tCode" присваивается "undefined".
Проверял опытным путем.
Даже пробовал:
Код:
[CODE]var xx = getPw('Title');
setTimeout(XSP.getElementById("#{id:tCode}").value = xx, 3000);
 
Последнее редактирование:

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 958
610
BIT
296
Не работает! Даже если оставить только 2 строки в программе кнопки:
Код:
var xx = getPw('Title');
XSP.getElementById("#{id:tCode}").value = xx;
Все равно полю "tCode" присваивается "undefined".
Проверял опытным путем.
Даже пробовал:
Код:
[CODE]var xx = getPw('Title');
setTimeout(XSP.getElementById("#{id:tCode}").value = xx, 3000);
не вникал - что надо получить
вот простая хэпага
XML:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" dojoForm="true"
    dojoParseOnLoad="true" dojoTheme="true">

    <xp:label value="tCode" id="tCode"
        style="width:113.0px;height:21.0px">
    </xp:label>
    <xp:br></xp:br>
    <xp:button id="button1" value="test-value">
        <xp:eventHandler event="onclick" submit="false">

            <xp:this.script><![CDATA[
        var el = XSP.getElementById('#{id:tCode}');
        //XSP.getElementById('#{id:inputText1}');

        // Check your javascript console in your browser
        console.log("**********" + el);
        alert(el.textContent);
el.textContent='test';
]]></xp:this.script>
        </xp:eventHandler>
    </xp:button>

</xp:view>
на лэйбе поменяется текст, после нажатия кнопки
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 958
610
BIT
296
для справки
1718985994608.png
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 958
610
BIT
296
почитать про XSP
 

Вложения

  • XPages Portable Command Guide (XSP).pdf
    81,3 КБ · Просмотры: 11

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 958
610
BIT
296
отлаживать хэпагу можно в локальном браузере (только права надо на страницу сделать Public)
1718991433852.png

1718991509278.png

1718991380049.png
 
Мы в соцсетях:

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