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

Ficoos

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


Код:

var mid = getFIO(nam, fam)

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


Код:

var sp = getSp(IDsUser)

и следующей строкой присваиваем значение переменной "sp" полю на странице. Но значение, почему-то = undefined, хотя алертом в функции выдало нужный результат.
Даже с тфймаутом в 2, 3, 5 секунд - результат - undefined!
Функции библиотеки - это SOAP или REST запросы, некоторые к WSDL службе БД, а некоторые - обработчики математические. Есть еще и последующие переменные, которые обращаются к функциям на стороне клиента и делают запросы, но без выше перечисленных переменных - нет смысла их тут описывать.
Вопрос: Что я не так делаю???
 
Последнее редактирование:
Всё неправильно! В первую очередь вопросы задаёшь неправильно. Ни фига же непонятно.
 
А чего непонатного я написал?
Есть база в лотусе. В ней есть 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
 
Последнее редактирование:
а сам веб-сервис не выдаёт ошибки?
может что в логах есть?
 
а сам веб-сервис не выдаёт ошибки?
может что в логах есть?
Нет. Веб сервис работает отлично, тем более, что изначально все проверялост программой SOAP UI. В вункции "getPw" поставил строку "alert(result)" и диалоговое окно показывает не undefined.
У меня есть подозрение, что программа кнопки не дожидается ответа, даже с setTimeout и вставляет в поле значение переменной xx, которой ничего не присвоено (Равнозначно: var xx)
 
Последнее редактирование:
3) Следующая строка программы передает параметры (Название поля профильного документа) другой функции в библиотеку сценариев JS на стороне клиента. Эта функция обращается к веб сервису текущей базы базы Lodus Domino.
Профиль док на вебе это зло. Он люто кешируется задачей http. Не используйте их. Может в этом причина.
 
Профиль док на вебе это зло. Он люто кешируется задачей 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);

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

Ребята! Давайте по существу вопроса!!!
 
У тебя "var xx" объявлено внутри if{} т.е. переменная существует только внутри скобок, при выходе за них такой переменной нет.
 
У тебя "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);
 
Последнее редактирование:
Не работает! Даже если оставить только 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>
на лэйбе поменяется текст, после нажатия кнопки
 
Не работает! Даже если оставить только 2 строки в программе кнопки:
Код:
var xx = getPw('Title');
XSP.getElementById("#{id:tCode}").value = xx;
Все равно полю "tCode" присваивается "undefined".
А если
JavaScript:
var xx = getPw('Title');
XSP.getElementById("#{id:tCode}").value = "XXX";

Что будет?
 
Если пусто, то ошибка в определении элемента tCode, если "XXX", то проблема в getPw
getPw = это подпрограмма библиотеки на стороне клиента. В конце подпрограммы есть оператор "alert (getPw)" - выдает нужный результат обработки.
А вот уже в строке:
JavaScript:
XSP.getElementById("#{id:tCode}").value = "XXX"
результат переменной уже становится "undefined". Как такое может быть?
 
getPw = это подпрограмма библиотеки на стороне клиента. В конце подпрограммы есть оператор "alert (getPw)" - выдает нужный результат обработки.
А вот уже в строке:
JavaScript:
XSP.getElementById("#{id:tCode}").value = "XXX"
результат переменной уже становится "undefined". Как такое может быть?
Какой переменной? тут элементу с ID tCode присваивается значение XXX? Оно появляется у этого элемента после выполнения этого кода? Или мы вообще о чём? Давай показывай всю свою секретную страницу, а не кусками по одной строке. Вопрос нормально задать не можешь.
 
Какой переменной? тут элементу с ID tCode присваивается значение XXX? Оно появляется у этого элемента после выполнения этого кода? Или мы вообще о чём? Давай показывай всю свою секретную страницу, а не кусками по одной строке. Вопрос нормально задать не можешь.
Все описано в постах выше. Километры кода сюда не буду ложить.
 
Мы в соцсетях:

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