2008-10-10 5 views
0

Comment résoudre un problème non-concordance des noms, si les noms côté client sont des mots clés ou des mots réservés dans la langue côté serveur que vous utilisez?Comment réparer un noms de paramètres Mismatch - DOJO et PL/SQL

La boîte à outils JavaScript DOJO a une classe QueryReadStore que vous pouvez sous-classe pour soumettre des requêtes REST modelés au serveur. J'utilise ceci conjointement avec le FilteringSelect Dijit.

je peux sous-classe QueryReadStore et spécifier les paramètres et les arguments se passer au serveur. Mais quelque part en cours de route, un paramètre "start" et "count" sont passés du client au serveur. Je suis allé dans l'API et j'ai découvert que le QueryReadStore.js envoyait ces noms de paramètres. J'utilise Fiddler pour confirmer ce qui est réellement envoyé et ramené. La réponse du serveur me dit que j'ai une discordance de noms de paramètres, à cause des paramètres "start" et "count". Le problème est que je ne peux pas utiliser "start" et "count" dans PL/SQL.

Une solution de contournement ou un conseil d'implémentation correct serait apprécié ... merci.

// J'ai essayé de mettre l'extrait de code ici, mais comme il est en grande partie HTML, cela ne fonctionne pas si bien.

Répondre

1

Bien qu'il se sent comme la mauvaise chose à faire, parce que je suis le piratage à un bien testé, trousse à outils JavaScript bien écrit, voici comment je fixe le problème:

Je suis allé dans le dojox QueryReadStore.js et a remplacé les références "start" et "count" avec des noms de paramètres acceptables (pour le langage côté serveur).

J'aurais aimé traité la question via mon PL/SQL (mais je ne sais pas comment obtenir des mots autour réservés) ou code côté client (subclassing n'a pas fait l'affaire) .. sans entrer dans les internes de la bibliothèque. Mais cela fonctionne, et je peux passer à autre chose.

0

Contrairement à retirer de l'API, comme vous l'avez mentionné, vous pouvez réellement créer une sous-classe avec votre propre chercher et supprimer début/compte des paramètres (théoriquement). Jetez un oeil à cette adresse pour obtenir des conseils:

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

début et compte sont en fait très utile, car ils vous permettent de passer params pour la requête que vous pouvez utiliser pour filtrer les ensembles de données massifs, et il aide à gérer pagination côté client. Je voudrais essayer de sous-classe à la place, intercepter et supprimer.

0

Est-ce votre pl/sql programme accessible via une URL et mod_plsql? Si tel est le cas, vous pouvez alors utiliser le "passage de paramètre flexible" et affecter les variables à un tableau de paires nom/valeur.

Définir vos spécifications de package comme ça ...

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; 

Puis le corps:

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; 

Ensuite, vous pouvez appeler à l'aide pkg_name.api

http://server/dad/!pkg_name.api?start=3&count=3 
Questions connexes