Как исправить несоответствие имен параметров - DOJO и PL / SQL - PullRequest
0 голосов
/ 10 октября 2008

Как устранить проблему несоответствия имен, если имена на стороне клиента являются ключевыми словами или зарезервированными словами на используемом вами языке на стороне сервера?

В наборе инструментов DOJO JavaScript есть класс QueryReadStore, который вы можете создать на подклассе для отправки шаблонных запросов REST на сервер. Я использую это вместе с FilteringSelect Dijit.

Я могу создать подкласс QueryReadStore и указать параметры и аргументы, передаваемые на сервер. Но где-то по пути параметры «start» и «count» передаются от клиента к серверу. Я вошел в API и обнаружил, что QueryReadStore.js отправляет имена этих параметров.

Я использую Fiddler для подтверждения того, что на самом деле отправляется и возвращается. Ответ сервера говорит мне, что у меня несоответствие имен параметров из-за параметров "start" и "count". Проблема в том, что я не могу использовать «start» и «count» в PL / SQL.

Обходной путь или правильный совет по внедрению приветствуются ... спасибо.

// Я попытался поместить здесь фрагмент кода, но, поскольку это в основном HTML, это не сработало.

Ответы [ 3 ]

1 голос
/ 11 октября 2008

Хотя это кажется неправильным, потому что я взламываю на хорошо протестированный, хорошо написанный инструментарий JavaScript, но я решил эту проблему:

Я вошел в DOJOX QueryReadStore.js и заменил ссылки "start" и "count" на допустимые (для серверного языка) имена параметров.

Я бы хотел решить эту проблему через мой PL / SQL (но я не знаю, как обойти зарезервированные слова) или код на стороне клиента (подклассы не выполняли трюк) ... не попадая во внутренности библиотеки. Но это работает, и я могу двигаться дальше.

0 голосов
/ 17 января 2009

Доступ к вашей программе pl / sql осуществляется через URL и mod_plsql? Если это так, то вы можете использовать «гибкую передачу параметров», и переменные будут присвоены массиву пар имя / значение.

Определите спецификацию вашего пакета следующим образом ...

create or replace package pkg_name
    TYPE plsqltable
   IS
      TABLE OF VARCHAR2 (32000)
         INDEX BY BINARY_INTEGER;

   empty   plsqltable;
 PROCEDURE api (name_array IN plsqltable DEFAULT empty ,
                         value_array IN plsqltable DEFAULT empty
   );
END pkg_name;

Тогда тело:

    CREATE OR REPLACE PACKAGE BODY pkg_name AS
    l_count_value number;
    l_start_value number;
    PROCEDURE proc_name (name_array IN plsqltable DEFAULT empty,
                   value_array IN plsqltable DEFAULT empty) is
    ------------
    FUNCTION get_value (p_name IN VARCHAR) RETURN VARCHAR2 IS 
    BEGIN
    FOR i IN 1..name_array.COUNT LOOP
        IF UPPER(name_array(i)) = UPPER(p_name) THEN
           RETURN value_array(i);
        END IF;
    END LOOP;
    RETURN NULL;
    END get_value;
    ----------------------
    begin
    l_count_value := get_value('count');
    l_start_value := get_value('start');
    end api;
    end pkg_name;

Затем вы можете вызвать pkg_name.api, используя

http://server/dad/!pkg_name.api?start=3&count=3
0 голосов
/ 11 октября 2008

В отличие от удаления его из API, как вы упомянули, вы можете создать подкласс со своей собственной выборкой и удалить параметры start / count (теоретически). Посмотрите на этот URL для руководства:

http://www.sitepen.com/blog/2008/06/25/web-service-data-store/

Start и count на самом деле очень полезны, потому что они позволяют передавать параметры для запроса, которые можно использовать для фильтрации больших массивов данных, и это помогает управлять подкачкой на стороне клиента. Вместо этого я бы попытался создать подкласс, перехватить и удалить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...