04 Nisan 2018

SAP XSD Nillable veya xsi:nil=”true” Belirleme

ile Yunus KALDIRIM

Bu konu xml tarafına belirli bir alanın nill olarak belirlenmesi ile ilgilidir. (Bazı noktalarda ingilizce terimler özellikle kullanılmıştır.)

Symptom:

– Can you provide hints to a xsl to map the xsi:nil=”true” for certain parameters of type dateTime to the target in a soap message environment

Çözüm:

“Consumer proxy generate” yapıldıktan sonra se80 üzerinde ilgili nesne nillable olarak set edilmiş oluyor.

Yalnız  kodlamada  nil olarak bir alanı nasıl belirleyebileceğimize dair internette tam bir bilgi bulunamıyor. Aşağıda örnek çözümü görebilirsiniz.

1- Generate edilen proxy class içinde controller yer alıyor. Bunun içinde yer alan prxctrltab tablosunun doldurulması gerekiyor. Value için alanın value range içinde alabileceği değerler görünmektedir. 2 değeri nill = true

Field alanına da structure içindeki alan adı yazılmalıdır.

  DATA lt_prxctrltab TYPE prxctrltab.
  DATA ls_prxctrltab TYPE prxctrl.

ls_prxctrltabfield ‘TALEP_COZUM_ZAMANI’.
ls_prxctrltabvalue ‘2’.

2- Sistemin kullandığı protokol belirlenmekte.

  DATA lr_payload TYPE REF TO if_wsprotocol_payload .

TRY.
        lr_payload ?= lr_service->get_protocolprotocol_name if_wsprotocol=>payload .
      CATCH cx_ai_system_fault.  
    ENDTRY.

3- Extended xml handling aktifleştiriliyor.

   TRY.
        lr_payload->set_extended_xml_handling(
          EXPORTING
            extended_xml_handling =  abap_true
        ).
      CATCH cx_ai_system_fault.  
    ENDTRY.

4-Ardından servisin methodu çağrılmalı

TRY.
        lr_service->add_record(
          EXPORTING
            add_record_request  ls_isemri_in
          IMPORTING
            add_record_response ls_isemri_out ).
      CATCH cx_ai_system_fault .
        lv_fault abap_true.

    ENDTRY.