Список форумов КЛУБ FileMaker.RU КЛУБ FileMaker.RU

 
new forum: www.fmforum.ru
FileMaker DevCon Rus 2017.IV коенференция российских разработчиков на платформе FileMaker.
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

FileMaker и 54-ФЗ
На страницу Пред.  1, 2, 3, 4  След.
 
Начать новую тему   Ответить на тему    Список форумов КЛУБ FileMaker.RU -> Практика FM
Предыдущая тема :: Следующая тема  
Автор Сообщение
Andrey Volkov



Зарегистрирован: 26.10.2009
Сообщения: 1609
Откуда: Ярославль

СообщениеДобавлено: Вс Апр 16, 2017 9:31 am    Заголовок сообщения: Ответить с цитатой

Цитата:
Вернее из браузера работает и FM получает ответ в скрипт

на всякий случай напомню. для тестирования в винде нужно использовать IE в качестве браузера
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
vadim



Зарегистрирован: 14.12.2007
Сообщения: 134

СообщениеДобавлено: Пн Апр 17, 2017 12:08 pm    Заголовок сообщения: Ответить с цитатой

Andrey Volkov писал(а):

на всякий случай напомню. для тестирования в винде нужно использовать IE в качестве браузера

Винда только на сервере KKM, остальное OSX

Источник проблемы найден. В ответе сервера KKM присутствует кириллица она блокирует передачу данных из WebViever в скипт FileMaker.
Буду искать способ экранирования.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
vadim



Зарегистрирован: 14.12.2007
Сообщения: 134

СообщениеДобавлено: Пн Апр 17, 2017 12:28 pm    Заголовок сообщения: Ответить с цитатой

Это работает с кириллицей
Код:

data:text/html,<!DOCTYPE html>
 <html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 </head>
 <body>
 <div id="response"></div>
 <script type="text/javascript">
  function SendXHRRequest(options, callback) {
     var xhr = new XMLHttpRequest();
     var response = 0;
 
 
     var url = options.protocol + '://' + options.host;
      if (options.port) {
         url += ':' + options.port;
     }
      if (options.path) {
         url += options.path;
   
  }
     xhr.onload = function() {
 
         if (callback) {
             console.log('Parsing response from server');
 
             try {
 
                 response = JSON.parse(this.responseText);
 
             } catch (error) {
 
                 console.error('Could not parse response as JSON object');
 
              response = {
                     'ok': false,
                     'error': 'JSONPARSE',
                     'message': 'Could not parse response as JSON object'
                 };
             }
 
                         return callback(response);
         }
     };
 
     xhr.onerror = function (error) {
 
         if (callback) {
 
             response = {
                 'ok': false,
                 'error': error.errno,
                 'message': error.message
             };
 
                         return callback(response);
         }
     }
 
     try {
          xhr.open(options.method, url, true);
         //xhr.timeout = 2000;
          if (options.auth) {
             xhr.setRequestHeader('Authorization', 'Basic ' + btoa(options.auth));
         }
         
         if (options.method == 'POST' && options.body) {
 
             xhr.setRequestHeader('Content-type', 'application/json; charset=UTF-8');
             xhr.send(JSON.stringify(options.body));
 
         } else {
             xhr.send();
         }
 
         var timeout = setTimeout( function() {
 
             if (response == 0) {
 
                 xhr.abort();
 
                 console.error('Connection timeout');
 
                 if (callback) {
 
                     response = {
                         'ok': false,
                         'error': "TIMEOUT",
                         'message': "Connection timeout"
                     };
 
                                         return callback(response);
                 }
             }
 
         }, 10000);
 
     } catch (error) {
 
         if (callback) {
 
             response = {
                 'ok': false,
                 'error': error.errno,
                 'message': error.message
             };
 
             console.error(error.message);
 
             return callback(response);
         }
     }
 }
 
  function List(NumDevice) {
    var body = {
        Command: "List",
       NumDevice:0,
       InnKkm: "",
        Active: true,
       OnOff: true,
        OFD_Error: null,
         FN_MemOverflowl: null,
        FN_IsFiscal: null,
   };
       var options = {
       auth: 'User:',
       protocol: 'http',
       host: '192.168.0.34',
       port: 5893,
       method: 'POST',
       body: body,
        path: '/Execute/sync'
    };     
       
   // Вызов команды
     SendXHRRequest(options, function(response) {
 
       document.getElementById("response").innerHTML = JSON.stringify(response);
         
          var tofm =  encodeURIComponent (JSON.stringify(response));

          var url = "fmp://$/KKM.fmp12?script=HTML_Response&param="  +  tofm;
         
          var body = document.getElementsByTagName('body')[0];
          var a = document.createElement('a'); 
           a.href = 'fmp://$/KKM.fmp12?script=HTML_Response&param=' +  tofm;
           a.style.display = 'none'; 
           body.appendChild(a); 
           a.click();
           a.parentNode.removeChild(a);
           console.log(response);
 
      if (response.ok == false) {
 
       }
   });
}
 
List(0);
</script>
</body>
</html>

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
vadim



Зарегистрирован: 14.12.2007
Сообщения: 134

СообщениеДобавлено: Пн Апр 17, 2017 6:33 pm    Заголовок сообщения: Ответить с цитатой

Последние известия.
Функция передачи данных из JS в FileMaker работает нестабильно Sad
Примерно 10% вызовов не срабатывают.
Вызываю скрипт, вижу что обновился WebViever а вызова скрипта получения результата не происходит.
Даже не знаю куда копать.
Код:

          var tofm = encodeURIComponent (JSON.stringify(response));
          var url = "fmp://$/KKM.fmp12?script=HTML_Response&param="  + tofm;
          var body = document.getElementsByTagName('body')[0];
          var a = document.createElement('a'); 
           a.href = 'fmp://$/KKM.fmp12?script=HTML_Response&param='+ tofm;
           a.style.display = 'none'; 
           body.appendChild(a); 
           a.click();
           a.parentNode.removeChild(a);


Чего в супе не хватает?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Arcady



Зарегистрирован: 24.02.2006
Сообщения: 704

СообщениеДобавлено: Вт Апр 18, 2017 2:06 am    Заголовок сообщения: Ответить с цитатой

а зачем такая сложная конструкция - добавлять элемент, потом генерить событие...?

Я всегда использую что-то вроде этого, ни разу способ не подвел:

Код:
var url = "fmp://$/KKM.fmp12?script=HTML_Response&param="  + tofm;
window.location =url;


Только обращаю внимание:
- на Windows размер передаваемого параметра ограничен. Если не ошибаюсь, то не более 256 символов весь путь.
- fmp протокол вызывает самый последний FileMaker из запущенных. Если у вас одновременно запущено несколько разных версий FM, то могут быть сбои.
_________________
Аркадий Перла.
ТриАПринт. Разработка решений для FileMaker
http://www.3a-print.ru
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
vadim



Зарегистрирован: 14.12.2007
Сообщения: 134

СообщениеДобавлено: Вт Апр 18, 2017 10:25 am    Заголовок сообщения: Ответить с цитатой

Спасибо Аркадий.
Попробовал ваш вариант, такой же процент не срабатываний, как и в варианте Николая.

Crying or Very sad
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Andrey Volkov



Зарегистрирован: 26.10.2009
Сообщения: 1609
Откуда: Ярославль

СообщениеДобавлено: Вт Апр 18, 2017 7:24 pm    Заголовок сообщения: Ответить с цитатой

смотря что считать не срабатыванием

попробуйте сделать так, чтобы
до запуска скрипта файлмейкера выводился алерт

alert(1);

понаблюдайте
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
vadim



Зарегистрирован: 14.12.2007
Сообщения: 134

СообщениеДобавлено: Ср Апр 19, 2017 10:28 am    Заголовок сообщения: Ответить с цитатой

Andrey Volkov писал(а):
смотря что считать не срабатыванием

попробуйте сделать так, чтобы
до запуска скрипта файлмейкера выводился алерт

alert(1);

понаблюдайте


Ответ от сервера ККМ в окне WebViever появляется стабильно, чем не алерт?
Сначала я думал что отсутствие результата - блокировка записи, хотя использовал глобальное поле.


Потом первым шагом в скрипте FM поставил Beep.
Наблюдал, вывод:

Иногда не происходит запуск (или вызов) скрипта.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Arcady



Зарегистрирован: 24.02.2006
Сообщения: 704

СообщениеДобавлено: Ср Апр 19, 2017 6:21 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
Ответ от сервера ККМ в окне WebViever появляется стабильно, чем не алерт?

Нет, это не очень показательно. Лучше прямо перед
Цитата:
window.location =url;


поставьте алерт. Тогда возможно вы увидите, что иногда он не вызывается и значит в каких то случаях у вас js отваливается.
Также вопрос, а как вы собственно перезапускаете вебвьюер?
_________________
Аркадий Перла.
ТриАПринт. Разработка решений для FileMaker
http://www.3a-print.ru
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Andrey Volkov



Зарегистрирован: 26.10.2009
Сообщения: 1609
Откуда: Ярославль

СообщениеДобавлено: Ср Апр 19, 2017 8:00 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
вопрос, а как вы собственно перезапускаете вебвьюер?


Аркадий, толсто Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
vadim



Зарегистрирован: 14.12.2007
Сообщения: 134

СообщениеДобавлено: Чт Апр 20, 2017 11:42 am    Заголовок сообщения: Ответить с цитатой

Спасибо за интерес к проблеме.
Arcady писал(а):
Цитата:
Ответ от сервера ККМ в окне WebViever появляется стабильно, чем не алерт?

Нет, это не очень показательно. Лучше прямо перед
Цитата:
window.location =url;


поставьте алерт. Тогда возможно вы увидите, что иногда он не вызывается и значит в каких то случаях у вас js отваливается.
Также вопрос, а как вы собственно перезапускаете вебвьюер?


Alert так Alert.
Получилось так:
Код:

// Вызов команды
     SendXHRRequest(options, function(response) {
 
       document.getElementById("response").innerHTML = JSON.stringify(response);
         var tofm = encodeURIComponent (JSON.stringify(response));
          var url = "fmp://$/KKM.fmp12?script=HTML_Response&param="  + tofm;
          alert(1);
          window.location =url;
          console.log(response);
 
      if (response.ok == false) {
 
       }
   });



Только после этого скрипт FM не запустился ни разу.
Появляется окно Alert, жму OK и тишина...
Убрал alert, вернулся к прежней статистике срабатываний.

Сначала собираю в переменную $HTML страничку.
Потом.
Перезапускаю вебвьювер:
Set Web Viever [Object Name: "web"; URL; $HTML]
Пробовал перед этим сбрасывать Web Viever (Reset) не помогло.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
vadim



Зарегистрирован: 14.12.2007
Сообщения: 134

СообщениеДобавлено: Чт Апр 20, 2017 12:12 pm    Заголовок сообщения: Ответить с цитатой

Нашел проблему.
JS отрабатывает стабильно, беда с FileMaker.
Итак скрипт FM собирает в переменной HTML код, подсовывает ее в Web Viever и заходит в цикл в ожидании появления данных в глобальной переменной, (пауза 0,1 сек -проверил переменную и так 100 раз), которые туда должен запихнуть другой скрипт который был вызван JS.
Так вот FileMaker иногда не запускает скрипт по fmp: протоколу, когда сам находится в режиме выполнения скрипта.
Нужно собрать другую конструкцию и все должно быть ок.
Спасибо за внимание! Very Happy
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Andrey Volkov



Зарегистрирован: 26.10.2009
Сообщения: 1609
Откуда: Ярославль

СообщениеДобавлено: Чт Апр 20, 2017 5:25 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
скрипт FM собирает в переменной HTML код, подсовывает ее в Web Viever и заходит в цикл в ожидании появления данных в глобальной переменной, (пауза 0,1 сек -проверил переменную и так 100 раз),


а зачем это нужно?

или это были остатки старой технологии обмена данными?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
vadim



Зарегистрирован: 14.12.2007
Сообщения: 134

СообщениеДобавлено: Чт Апр 20, 2017 5:55 pm    Заголовок сообщения: Ответить с цитатой

Andrey Volkov писал(а):


или это были остатки старой технологии обмена данными?


Именно!

Раньше так выдергивал данные из Web Viever.
Сформировал Url, запихнул в Web Viever и жду ответа.
Получил ответ -хорошо, не получил - таймаут.
Один скрипт-всё наглядно.

Вот и напоролся.
Embarassed
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Arcady



Зарегистрирован: 24.02.2006
Сообщения: 704

СообщениеДобавлено: Чт Апр 20, 2017 7:33 pm    Заголовок сообщения: Ответить с цитатой

нее так делать не надо.
вам нужно иметь один скрипт который инициализирует вебвьюер
и второй скрипт, который вызывается из js и обрабатывает полученные данные в качестве параметра.
_________________
Аркадий Перла.
ТриАПринт. Разработка решений для FileMaker
http://www.3a-print.ru
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов КЛУБ FileMaker.RU -> Практика FM Часовой пояс: GMT + 3
На страницу Пред.  1, 2, 3, 4  След.
Страница 3 из 4

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB