2012-02-02 43 views
5

मैं एक भाषा निर्माण या एक फ़ंक्शन मॉड्यूल की तलाश में हूं जो MOVE-CORRESPONDING IGNORING INITIALS जैसा होगा। बस मुझे कुछ ऐसा चाहिए जो MOVE-CORRESPONDING source TO dest जैसा काम करता है लेकिन source में शुरुआती सभी फ़ील्ड को अनदेखा करता है।क्या एबीएपी में मूव-कॉरस्पोन्डिंग इग्निंग इंटिअल्स की तरह कुछ है?

क्या ऐसा कुछ ऐसा है?

उत्तर

3

मैंने अपना खुद का कोड तैयार किया है जिसे मैं साझा करना चाहता हूं। यह सही नहीं है, यह जटिल संरचनाओं के साथ काम नहीं करेगा। हालांकि मुझे फ्लैट संरचनाओं पर काम करने के बजाय अभी कुछ और चाहिए नहीं है।

CLASS lcl_utilities DEFINITION FINAL CREATE PRIVATE. 
    PUBLIC SECTION. 
    CLASS-METHODS: 
     move_corresponding_ignore_init 
     IMPORTING 
      i_str_source TYPE any 
     CHANGING 
      c_str_dest TYPE any. 
ENDCLASS. 

CLASS lcl_utilities IMPLEMENTATION. 
    METHOD move_corresponding_ignore_init. 
    DATA: 
     l_rcl_abap_structdescr TYPE REF TO cl_abap_structdescr. 

    l_rcl_abap_structdescr ?= cl_abap_typedescr=>describe_by_data(i_str_source). 
    LOOP AT l_rcl_abap_structdescr->components ASSIGNING FIELD-SYMBOL(<fs_str_component>). 
     ASSIGN COMPONENT <fs_str_component>-name OF STRUCTURE c_str_dest TO FIELD-SYMBOL(<fs_dest_field>). 
     IF sy-subrc = 0. 
     ASSIGN COMPONENT <fs_str_component>-name OF STRUCTURE i_str_source TO FIELD-SYMBOL(<fs_source_field>). 
     ASSERT sy-subrc = 0. 
     IF <fs_source_field> IS NOT INITIAL. 
      <fs_dest_field> = <fs_source_field>. 
     ENDIF. 
     ENDIF. 
    ENDLOOP. 
    ENDMETHOD.     "move_corresponding_ignore_init 
ENDCLASS. 

... और एक छोटे से मैक्रो को इसे भाषा निर्माण की तरह कम उपयोग करने के लिए।

DEFINE move_corresponding_ignore_init. 
    lcl_utilities=>move_corresponding_ignore_init(
    exporting 
     i_str_source = &1 
    changing 
     c_str_dest = &2 
). 
END-OF-DEFINITION. 
+1

यदि आप बिना जांच किए जा रहे हैं, तो आप पूरी तरह से l_rcl_abap_typedescr को छोड़ सकते हैं। – vwegert

+0

@vwegert: आप सही हैं। मैंने पहले ही कोडिंग में सुधार किया है। – Jagger

1

मनमाने ढंग से संरचनाओं के लिए कोई भाषा निर्माण नहीं है। चरित्र फ़ील्ड के लिए, आप ओवरले का उपयोग कर सकते हैं ... के साथ, लेकिन यदि आप संरचनाओं के साथ ऐसा करने का प्रयास करते हैं, तो यह वास्तव में गन्दा कोड और परिवर्तनीय-लंबाई सामग्री के साथ असुरक्षित परेशानी का कारण बनता है। ऐसा करने के लिए सबसे अच्छा शर्त आरटीटीआई (Runtime Type Identification) का उपयोग करना होगा, लेकिन प्रारंभिक मानों की जांच करते समय सावधान रहें।

+0

संकेत के लिए धन्यवाद लेकिन यह वह नहीं है जिसे मैं ढूंढ रहा हूं। मैंने अपना खुद का कोड तैयार किया है जो इतना जटिल नहीं है, मुझे विश्वास है। – Jagger

+0

@ जेगर: आरटीटीआई का उपयोग करना आपके द्वारा प्रदान किए गए कोड में बिल्कुल किया गया है, तो यह क्यों नहीं होगा जो आप खोज रहे हैं? – vwegert

+0

क्षमा करें, शायद मेरा जवाब थोड़ा गलतफहमी थी। मैं 'ओवरले के साथ' ले रहा था। आपके उत्तर का दूसरा भाग वास्तव में मेरे कोड में उपयोग किया जाता है। – Jagger