2010-03-23 12 views
6

मुझे एक डीएसएलआर फ़ाइल के "कब" खंड पर एक विधि निष्पादित करने की आवश्यकता है और मुझे यकीन नहीं है कि यह संभव है या नहीं। उदाहरण:डोलॉल्स नियम: मैं "कब" अनुभाग पर एक विधि का उपयोग कैसे कर सकता हूं?

rule "WNPRules_10" 
    when 
    $reminder:Reminder(source == "HMI") 
    $user:User(isInAgeRange("30-100")==true) 
    Reminder(clickPercentual >= 10) 
    User(haveAtLeastOptIns("1,2,3,4") == true) 
    then 
    $reminder.setPriority(1);update($reminder); 
end 

(ध्यान दें: isInAgeRange() और haveAtLeastOptIns() उपयोगकर्ता तरीके हैं)

मैं eval साथ करने की कोशिश की() और कोई त्रुटि दिखाई दिया, लेकिन यह फ्लॉप निष्पादित। इस तरह:

rule "WNPRules_10" 
when 
    $reminder:Reminder(source == "HMI") 
    $user:User(eval($user.isInAgeRange("30-100")==true)) 
    Reminder(clickPercentual >= 10) 
    User(eval($user.haveAtLeastOptIns("1,2,3,4") == true)) 
then 
    $reminder.setPriority(1);update($reminder); 
end 

मैं इस समस्या को कैसे हल कर सकता हूं?

उत्तर

7

आपका दूसरा प्रयास काफी उलझन में दिखता है - भी - क्या आपके पास उपयोगकर्ता पैटर्न हैं - क्या आप चाहते हैं कि वे उपयोगकर्ता के समान उदाहरण देखें? या वे अलग-अलग उदाहरण हो सकते हैं (या वे अलग होना चाहिए?) - जो आपके इरादे के आधार पर कुछ मामलों में चीजों को थोड़ा सा बदल देगा।

सरल पुनर्लेखन मैं के बारे में सोच सकते हैं के संदर्भ में:

rule "WNPRules_10" 
    when 
    $reminder:Reminder(source == "HMI") 
    $user:User() 
    eval($user.isInAgeRange("30-100") && $user.haveAtLeastOptIns("1,2,3,4")) 
    Reminder(clickPercentual >= 10) 
    then 
    $reminder.setPriority(1);update($reminder); 
    end 

नोट eval() शीर्ष स्तर तत्व के प्रयोग - यह भी केवल एक उपयोगकर्ता पैटर्न का उपयोग करता है - और फिर इसे करने के लिए बाधाओं को लागू होता है। (भविष्य के संस्करण इनलाइन evals में eval लिखने के बिना काम करेगा!)।

+0

यह काम करता है! धन्यवाद! – manoelhc

संबंधित मुद्दे