2013-10-11 13 views
1

En utilisant wso2, DSS version 3.01, j'essaie d'avoir un paramètre d'entrée qui pourrait être un paramètre optionnel. Un utilisateur peut dire, donnez-moi toutes les informations pour ce code spécifique, ou si un utilisateur ne spécifie aucun code, je veux donner toutes les lignes de données. Pouvez-vous aider?Utilisation du paramètre d'entrée comme entrée optionnelle

+0

Est-ce que vous voulez que l'utilisateur spécifie un critère pour une requête? – cmd

+0

oui. J'ai utilisé l'entrée comme paramètre. Je ne suis pas sûr defaultvalue peut être utilisé comme ci-dessous de l'utilisateur @poohdedoo puisque je veux afficher tous les codes et pas seulement un. Un code peut être spécifié par un utilisateur. Le sql générique est fondamentalement ce que j'ai comme ci-dessous par poohdedoo. – user2872396

Répondre

0

Bien vous pouvez rendre les paramètres d'entrée facultatifs en donnant des valeurs par défaut aux paramètres d'entrée. Par exemple

<query id="MyQ" useConfig="myDS"> 
    <sql>select cust_id,name from customer where cust_id = ?</sql> 
    <result element="Entries" rowName="Entry"> 
    <element column="cust_id" name="cust_id" xsdType="string"/> 
    <element column="name" name="name" xsdType="string"/> 
    </result> 
    <param defaultValue="1" name="cust_id" sqlType="INTEGER"/> 
</query> 

Ici, si vous ne mentionnez pas les paramètres d'entrée, le paramètre d'entrée sera pris comme un. Ou bien vous devez créer deux requêtes et les gérer par programme

+0

Il semble que j'ai besoin de créer 2 requêtes? Comment je fais ça? J'ai le paramètre et la ressource suivants. « <-requête appeler href = "échantillon"> ' – user2872396

+0

Vous devez créer deux requêtes avec le paramètre d'entrée Cd et une autre requête sans paramètre d'entrée qui prend tout, puis mapper chaque requête pour différer loyer opperations – poohdedoo

+0

Ok. Je peux créer 2 requêtes. Comment mappez-vous ces 2 requêtes à une opération différente? Je suis nouveau à DSS. J'apprécierais votre exemple. Merci. – user2872396

0

ok soo par exemple

<query id="employeesByNumberSQL" useConfig="default"> 
    <sql>select * from Employees where employeeNumber = ?</sql> 
    <result element="employees" rowName="employee"> 
    <element column="lastName" name="last-name" xsdType="string"/> 
    <element column="firstName" name="first-name" xsdType="string"/> 
    <element column="email" name="email" xsdType="string"/> 
    <element column="salary" name="salary" xsdType="double"/> 
    </result> 
    <param name="employeeNumber" ordinal="1" paramType="SCALAR" sqlType="INTEGER" type="IN"/> 

select * from employés

Vous avez deux requêtes employeesByNumberSQL, employeesByNumberSQL1 ces deux sont mis en correspondance togetemployeesByNumber et getemployeesByNumber2

+0

Vous dites avoir 2 opérations (une pour chaque requête) et 2 méthodes GET de ressources, une pour chaque. Est-ce ce que vous dites? Parce que ce que je voudrais, c'est avoir une ressource GET avec un CD d'entrée. Il faudrait un cd si un utilisateur fournissait, et sinon, lister tout en utilisant la ressource ' ' – user2872396

1

Au lieu de créer une requête pour chaque paramètre optionnel, vous pouvez également effectuer les opérations suivantes:

<query id="selectEmployees" useConfig="default"> 
    <sql>select * from Employees where (:employeeNumber is null or employeeNumber = :employeeNumber)</sql> 
    <result element="employees" rowName="employee"> 
     <element column="lastName" name="last-name" xsdType="string"/> 
     <element column="firstName" name="first-name" xsdType="string"/> 
     <element column="email" name="email" xsdType="string"/> 
     <element column="salary" name="salary" xsdType="double"/> 
    </result> 
    <param defaultValue="#{NULL}" name="employeeNumber" ordinal="1" paramType="SCALAR" sqlType="INTEGER" type="IN"/> 
</query> 
<operation name="getEmployees"> 
    <call-query href="selectEmployees"> 
     <with-param name="employeeNumber" query-param="employeeNumber"/> 
    </call-query> 
</operation> 

vous pouvez maintenant appelez 'getEmployees' avec 'employeeNumber' et obtenez un employé spécifique,
ou vous pouvez appeler 'getEmployees' sans 'employeeNumber' et obtenir tous les employés.
(L'appel sans 'employeeNumber' est en omettant la balise 'employeeNumber' ou en utilisant 'xsi: nil = "true"'.)
De toute évidence, vous ne pouvez pas interroger la valeur 'null' de cette façon.

+0

Impressionnant ... Fonctionne comme un charme !!!! –

Questions connexes