2017-09-14 6 views
0

J'ai des données dans le cache, c'est-à-dire dans le magasin d'objets. J'ai besoin d'obtenir les données du cache et d'appliquer la condition de filtre dessus.Comment passer le dynamic fieldName dans la condition de filtre de dataweave mule

Ici l'exigence est, je dois exposer api pour obtenir les données basées sur filedName et filedValue qui viendront dynamiquement dans la demande.

demande d'échantillon:

https://localhost:8082/api/customer/filter?fieldName=customerId&fieldValue=101810 

Je code de retour pour filtrer les données en dataweave mais il ne fonctionne pas. pouvez-vous s'il vous plaît aider à ce

%dw 1.0 
%output application/json 
--- 
payload.rows filter (("$.content." ++ flowVars.fieldName ++ ".content") as :string == flowVars.fieldValue as :string) map ((row , indexOfRow) -> { 
    customerId: row.content.customerId.content as :string when row.content.customerId.content != null otherwise null, 
    customerName: row.content.customerName.content as :string when row.content.customerName.content != null otherwise null, 
    customerAddress:row.content.customerAddress.content as :string when row.content.customerAddress.content != null otherwise null 
}) 

et je reçois ci-dessous erreur

Exception while executing: 
payload.rows filter (("$.content." ++ flowVars.fieldName ++ ".content") as :string == flowVars.fieldValue as :string) map ((row , indexOfRow) -> { 
        ^
Type mismatch for '++' operator 
    found :object, :string 
    required :string, :string. 

pouvez-vous s'il vous plaît aider sur ce

+0

s'il vous plaît code postal qui est utilisé pour la mise en fieldName et fieldValue dans ObjectStore ou flowVars – AnupamBhusari

+0

nous les obtenir comme params de requête qui viendra de la demande comme celui-ci fieldName = customerId & fieldValue = 101810 – Gopi

+0

en haut cartographie, nous aurons fieldName comme customerId ou CustomerName ou CustomerAddress pour filtrer les données et filedVaule est la valeur correspondante de ce champ.pouvez-vous s'il vous plaît aider à ce – Gopi

Répondre

1

Le problème est avec le code utilisé pour sélecteur il devrait être comme $.content[flowVars.fieldName].content . Code complet sera

%dw 1.0 
%output application/json 
--- 
payload.rows filter (($.content[flowVars.fieldName].content) as :string == flowVars.fieldValue as :string) map ((row , indexOfRow) -> { 
    customerId: row.content.customerId.content as :string when row.content.customerId.content != null otherwise null, 
    customerName: row.content.customerName.content as :string when row.content.customerName.content != null otherwise null, 
    customerAddress:row.content.customerAddress.content as :string when row.content.customerAddress.content != null otherwise null 
}) 

Cela a bien fonctionné avec l'entrée fournie par vous.

Espérons cette aide.

+0

Il fonctionne fine.Thanks @anupambhusari. Où pouvons-nous trouver de la documentation sur ce sujet? pouvez-vous s'il vous plaît me fournir le lien – Gopi

+0

S'il vous plaît se référer [Dataweave Selector] (https://docs.mulesoft.com/mule-user-guide/v/3.8/dataweave-selectors#alternative-syntax). – AnupamBhusari