2015-06-02 9 views
5

मैं cl_abap_typedescr=>describe_by_name विधि को कॉल कर रहा हूं। यह संभवतः TYPE_NOT_FOUND अपवाद फेंक सकता है। मैं फॉर्म सी # आ रहा हूं और सी # में ऐसी त्रुटि पकड़ना काफी आसान होगा। लेकिन एबीएपी में मैं अपवाद पकड़ने में सक्षम नहीं हूं।कुछ अपवादों को पकड़ नहीं सकते

यह इस तथ्य से शुरू होता है कि मैं अपने कोड में TYPE_NOT_FOUND अपवाद ऑब्जेक्ट का उपयोग नहीं कर सकता। यह सिर्फ अस्तित्व में नहीं है। यह इस तथ्य के साथ जारी है कि CX_ROOT को पकड़ने से कोई भी मदद नहीं करेगा।

TRY . 
    descr_ref0 ?= cl_abap_typedescr=>describe_by_name('iabc1'). 
CATCH cx_root. 
    BREAK-POINT. 
ENDTRY. 

उत्तर

6

मुझे लगता है कि आपको टाइप-कास्टिंग की आवश्यकता है, इसलिए इसके लिए एक अतिरिक्त कदम प्रदान किया गया है।

इस वाक्य रचना नई वाक्य रचना के रूप में के रूप में सुंदर नहीं है, लेकिन यह एक ही रास्ता मैं अपने उदाहरण संकलित करने के लिए मिल सकता है:

data descr_ref1 type ref to cl_abap_typedescr. 

    call method cl_abap_typedescr=>describe_by_name(
    exporting p_name   = 'abc1' 
    receiving p_descr_ref = descr_ref1 
    exceptions type_not_found = 1). 

    if sy-subrc <> 0. 
    break-point. 
    else. 
    descr_ref0 ?= descr_ref1. 
    endif. 

संपादित करें:

आप बता सकते हैं अपवाद के प्रकार है

enter image description here

या वैकल्पिक रूप से आप संपादक में "पैटर्न" आदेश का उपयोग सही SYNT प्राप्त करने के लिए कर सकते हैं: विधि को देखकर इस्तेमाल किया कुल्हाड़ी।

+0

ठीक है, मैं बहुत उत्साहित हूं। मैं उम्मीद कर रहा था कि मैं इसके आसपास हो सकता हूं लेकिन धन्यवाद ... धन्यवाद :) –

+0

@thefiloe जाहिर है जब आप अपनी खुद की विधियां लिखते हैं, तो आप हमेशा कक्षा-आधारित अपवादों का उपयोग करेंगे; लेकिन पिछड़े संगतता की वजह से, पुराने सामान एसएपी मानक में घूमते रहेंगे। – Esti

4

TYPE_NOT_FOUNDnot a class-based exception है: यह सिर्फ मेरी कोशिश पकड़ खंड और दुर्घटनाओं पर ध्यान नहीं देता। आपको old syntax का उपयोग करने और प्रत्येक अपवाद के लिए गैर-शून्य मान असाइन करने की आवश्यकता होगी, फिर SY-SUBRC जांचें कि क्या यह मान फिर से दिखाई देता है।

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