2014-06-20 21 views
8

क्या एबीएपी सिंटैक्स में एक टर्नरी या सशर्त ऑपरेटर उपलब्ध है? मैं एक नहीं मिला है तो यह सोचते हैं कि जवाब नहीं है लेकिन वहाँ तो एक विकल्प है कि मैं आम "गूंगा" IF बयान है कि मैं नियमित रूप से उपयोग करने के स्पष्ट करने के लिए उपयोग कर सकते हैं?टर्नरी ऑपरेटर (विकल्प)

उदाहरण के लिए, एक विधि है कि वैकल्पिक संदेश मानकों के साथ संदेश लॉग पर विचार करें। इसलिए जैसे मूल्य की जाँच करने के आयातित पैरामीटर या डिफ़ॉल्ट मैं का उपयोग कर के बीच तय करने के लिए: के रूप में नीचे दिए गए कोड ब्लॉक में देखा

IF iv_class IS INITIAL. 
    lv_message_class = 'DEFAULT'. 
ELSE. 
    lv_message_class = iv_class. 
ENDIF. 
IF iv_number IS INITIAL. 
    lv_message_number = '000'. 
ELSE. 
    lv_message_number = iv_number. 
ENDIF. 
IF iv_type IS INITIAL. 
    lv_message_type = 'E'. 
ELSE. 
    lv_message_type = iv_type. 
ENDIF. 

एक त्रिगुट ऑपरेटर एक लाइन के लिए इन पांच लाइन कथनों में से प्रत्येक को कम करेगा। जब ऑपरेटर का उपयोग ऑनलाइन किया जाता है तो यह अस्थायी परिवर्तनीय अनावश्यक उपयोग भी कर सकता है।

lv_message_class = iv_class IS INITIAL ? 'DEFAULT' : iv_class. 
lv_message_number = iv_number IS INITIAL ? '000'  : iv_number . 
lv_message_type = iv_type IS INITIAL ? 'E'  : iv_type . 

क्या एबीएपी में इस प्रकार की प्रोग्रामिंग शैली का अनुमान लगाने का कोई तरीका है या क्या मैं अव्यवस्था से फंस गया हूं?

उत्तर

19

रिलीज 7.40 एबीएपी सुधारों का एक पूरा समूह लाता है जो मुझे दिलचस्प ढेर मिल रहा है। एक चर 'bool' कहा जाता है की

COND dtype|#(WHEN log_exp1 THEN result1 
      [ WHEN log_exp2 THEN result2 ] 
      ... 
      [ ELSE resultn ]) ... 

उदाहरण डेटा घोषणा और एक पंक्ति में एक सशर्त मूल्य असाइनमेंट: त्रिगुट शैली घोषणा (कम से कम कुछ है कि यह जैसा दिखता है) उनमें से एक

सिंटेक्स है। ओल्ड स्कूल एबीएपी यह 10 लाइनों की तरह ले जाएगा।

DATA(bool) = COND #(WHEN i * i > number THEN abap_true ELSE abap_false). 

और जानकारी: http://scn.sap.com/community/abap/blog/2013/07/22/abap-news-for-release-740

+0

7.4 में स्थानांतरित होने के बाद मैं पुष्टि कर सकता हूं कि यह पूरी तरह से काम करता है, भले ही वाक्यविन्यास हाइलाइट अमान्य लाल में कथन के हिस्सों को चिह्नित करेगा। एक नोट के रूप में, यह नए चर घोषित करने के लिए प्रतिबंधित नहीं है, कोई भी मूल्य असाइनमेंट 'COND' कथन का उपयोग कर सकता है। – Lilienthal

2

नहीं है, ABAP में कोई ऑपरेटर निर्माण a ? b : c अन्य भाषाओं से भी जाना जाता है के समान है। अपने ठोस उदाहरण में, हालांकि, आप मूलभूत मूल्यों अपने विधि मानकों iv_class आदि विधि के हस्ताक्षर में के लिए की घोषणा कर सकता है।

1

चर आप स्पष्ट रूप से डिफ़ॉल्ट मान सेट या कर सकते हैं की घोषणा करते हुए नीचे के रूप में भी ऐसा ही।

lv_message_class = 'DEFAULT'. 
lv_message_number = '000'. 
lv_message_type = 'E'. 

IF iv_class IS NOT INITIAL. 
    lv_message_class = iv_class. 
ENDIF. 
IF iv_number IS NOT INITIAL. 
    lv_message_number = iv_number. 
ENDIF. 
IF iv_type IS NOT INITIAL. 
    lv_message_type = iv_type. 
ENDIF. 
संबंधित मुद्दे