31 Ocak 2016 Pazar

Bir ABAP program silindiğinde nasıl geri alırız?

Bir ABAP program silindiğinde nasıl geri alırız?

Bazen yazdığımız programlar silinir nasılsa :)
Peki geri getirmenin en kolay yolu nedir?

se38 den aynı isimli yeni bir program yaratılır. 
ABAP editöründen Utilities > Versions > Version Management 'den en sondaki halini 'Retrieve' yapın. 
Bütün kodun geri geldiğini göreceksiniz. Tek gereken Save and Activate. 
Ayrıca Text elementler için de aynı şeyi yapabilirsiniz. 


8 Aralık 2014 Pazartesi

ABAP Test Cockpit – Create Code Inspector Variant

ABAP Test Cockpit (ATC)  kısaca ATC kullanmını anlattıktan sonra yeni variant nasıl olu.turulur ona bakalım.

Bunun için SCI t-code unu kullanmanız gerekiyor.


Check variant kısmına isim yazılarak Create butonuna basılır. Ismin yazılacağı alanın başındaki buton varyantin “Global” mi “Local” userlar için tanımlandığını gösterir, üzerine tıklayarak değiştirebilirsiniz.



İstenen kontroller aşağıdaki gibi işaretlenir.



Ok işaretleri parameter aşağıdaki gibi parameter girmeniz gerektiğini gösteriyor.


Kaydedilir, şimdi kullanılmaya hazır. 

5 Aralık 2014 Cuma

ABAP Test Cockpit - ATC -

ABAP Test Cockpit (ATC)  kısaca ATC olarak bilinen tool, geliştirme esnasında otomatik olarak yaptırılan yazım testi için kullanılır. SAP nin standart kurallarını kullanabileeği gibi sizin referans vereceğiniz kuralları da denetler.

ATC yi çalıştırmak için, program se38 ile açılır, sonra Program=>Check=>ABAP Test Cockpit seçilir. 


Eğer kontrol için bizim belirlediğimiz kuralları da ekleyeceksek, ABAP Test Cockpit With seçilir. Options kısmından 


Execute Checks butonuna tıklanırsa, artık tanımlama dışı görülen hatalar listelenir. 

Listelenen satırlar üzerinde çift tıklanırsa belirlenen hatanın nedeni ve programdaki satırı gelir. Altı çizgili linkin üzerine tıklanırsa programdaki satır üzerine gelinip belirtilen hata istendiği şekilde düzeltilebilir.

Eğer istenen değişiklik yapılmak istenmiyor, komut cümlesini başka türlü yazamıyorsanız,  satırın sonuna   “#EC  eklenir. Bu işaretleme ATC nin bu hatayı görmemesini sağlar.  
İstenen değişiklik yapılır ve program tekrar activate edilirse, hatanın listeden kalktığı görülür.


Sıklıkla karşılaşılan hatalar ve çözümleri

Extended Program Check-> Text Element Missing in a Character String

WRITE 'Sum :', lv_sum.

WRITE text-002, lv_sum.

Unsecure use of FOR ALL ENTRIES            -> Possible use of ... without prior content check
SELECT FROM vbap INTO TABLE lt_vbap
           
FOR ALL ENTRIES IN lt_vbak
           
WHERE vbeln EQ lt_vbak-vbeln.

IF lt_vbak[] IS NOT INITIAL.
    
SELECT FROM vbap INTO TABLE lt_vbap
             
FOR ALL ENTRIES IN lt_vbak
             
WHERE vbeln EQ lt_vbak-vbeln.
ENDIF.
Bütün hatalar temizlendiğinde, aşağıdaki gibi bir ekranla karşlılır.



3 Aralık 2014 Çarşamba

SAPScript Nedir - What is Sapscript

SE71, bir isim yazıp  Create butonuna basılırsa aşağıdaki gibi bir ekran ile sapscript yaratma işine başlanmış olur:


"Pages" sekmesinden aşağıdaki gibi Edit-> "Create Element" diyerek yeni bir page yaratılır. 




Ok den sonra aşağıdaki gibi ilk Page oluşturulmuş olur. İstenirse bu şekilde Page sayıları artırılabilir.Sayfaların sırasını belirlerken "Next Page" kısmı kullanılır.






"Page Windows"  tıklandığında otomatik olarak MAIN penceresinin yaratılmış olduğu görülebilir.
Şimdi istenen şekilde windows değişiklik yapmak için (F9) "Text Elements" e basılır.



Aşağıdaki gibi çok user-friend olmayan  bir editor açılır. Bu editor anlaşılır şekle çevirmek için, GOTO-> Change Editor.



Aşağıdaki gibi format kısımlarının olduğu, satırların ayrı ayrı gösterildiği üzerinda rahat değişiklik yapacağınız bir editor açılır.

Şimdi daha herşeye hakim olabilirsiniz. Sadece satırların başına satırın ne olduğunu gösteren ifadeleri yazmanız yeterli olacaktır. Aşağıda satırları ne şekilde kullanacağını gösterecek belirteçlerin bir listesi var.  Örneğin, sap kod satırı yazmak için  "/:" kullanıyoruz:    /:          SET TIME MASK = 'HH:MM'
Veya Comment yazmak için "/*" kullanılır.  /* This line is for header. 
*
Default Paragraph

Continuous Text
=
Extended Line
(
Raw Line
/
Line Feed
/=
Line Feed and Extended Line
/(
Line Feed and Raw Line
/:
Command Line
/*
Comment Line
/E
Text Element



Ayrıca aşağıdaki gibi tanımladığınız, fontları, veya paragrafları burada kullanabilirsiniz.


AS
Default paragraph
C
Centered
IL
Item line
IT
Item title
TI
LayoutSet title in INFO window
UL
Paragraph for separator

Örnek : UL        &uline(67)&
             IT         Ges,,Linie,,Flugdatum,,Abflug,,Preis,,Währung

Paragraf Değerlerinin değiştirilmesi için aşağıdaki butonlar yardımıyla istenen kısımlarda istenen değişiklikler yapılır. Sonra Sapscritp içinde row başına yazınca verilen alanların tanımlanan şekillerdeki gibi değiştiği görülür.





 Sapscript in tanımlamaları bu kadar. Bir örnek incelemek istenirse  S_EXAMPLE_1  scripti kullanılabilir.
Şimdi bu sapscripti kontrol edecek programı yazmaya geldi.
Yazılacak programda, Sapscripti kullanmak için  aşağıdaki  functionlar kullanılır.
Open_form => İlk olarak kullanılır. Form ve yazıcının atanması için kullanılır.
Start_form => Yazma kısmından önce kullanılır. Sapscript  başlatılır.
Write_form => Loop içinde veya ekrana tek tek yazılacak alanlar için kullanılır.
End_form => Geçerli sayfanın yazılmasını sonlandırır. Tekrar çalıştırmak için Start_form kulanmak gerekir.
Close_form => Bundan sonra form bitirilmiş olur ve tekar başlatılamaz. 

Örnek program :
REPORT  zexample_sapscript.

TABLESscustomsbookspfli.

SELECT-OPTIONSs_id FOR scustom-id DEFAULT TO 1,
                s_fli 
FOR sbook-carrid DEFAULT 'LH' TO 'LH'.

DATA customers LIKE scustom OCCURS 100
     
WITH HEADER LINE.
DATA bookings  LIKE sbook   OCCURS 1000
     
WITH HEADER LINE.
DATA connections LIKE spfli OCCURS 1000
     
WITH HEADER LINE.
DATABEGIN OF sums OCCURS 10,
        forcuram  
LIKE sbook-forcuram,
        forcurkey 
LIKE sbook-forcurkey,
      
END OF sums.

* Get data
SELECT FROM  scustom INTO TABLE customers
       
WHERE id IN s_id
       
ORDER BY PRIMARY KEY.
SELECT FROM  sbook   INTO TABLE bookings
       
WHERE customid IN s_id AND carrid IN s_fli
       
ORDER BY PRIMARY KEY.
SELECT FROM  spfli   INTO TABLE connections
       
FOR ALL ENTRIES IN bookings
       
WHERE carrid bookings-carrid
       
AND   connid bookings-connid
       
ORDER BY PRIMARY KEY.

* Open print job
CALL FUNCTION 'OPEN_FORM'
  
EXPORTING
    device   
'PRINTER'
    
form     'S_EXAMPLE_1'
    
dialog   'X'
  
EXCEPTIONS
    canceled 
1
    device   
2
    
form     3
    options  
4
    unclosed 
5
    
OTHERS   6.
IF sy-subrc <> 0.
  
WRITE 'Error in open_form'(001).
  
EXIT.
ENDIF.

* Print form for all customers
LOOP AT customers.
* Set customer address
  scustom 
customers.
* Open form of respective customer
  
CALL FUNCTION 'START_FORM'
    
EXCEPTIONS
      
OTHERS 1.
  
IF sy-subrc <> 0.
    
WRITE 'Error in start_form'(002).
    
EXIT.
  
ENDIF.

* Display column headings of main window
  
CALL FUNCTION 'WRITE_FORM'
    
EXPORTING
      element  
'HEADING'
      
function 'SET'
      
type     'TOP'
      
window   'MAIN'
    
EXCEPTIONS
      
OTHERS   1.
  
IF sy-subrc <> 0.
    
WRITE 'Error in write_form printing top element of main'(003).
    
EXIT.
  
ENDIF.
* Customer bookings
  
CLEAR sumsREFRESH sums.
  
LOOP AT bookings
       
WHERE customid customers-id.
    sbook 
bookings.
*   Get departure time
    
READ TABLE connections WITH KEY carrid bookings-carrid
                                    connid 
bookings-connid.
    
IF sy-subrc 0.
      spfli 
connections.
    
ELSE.
      
CLEAR spfli.
    
ENDIF.
*   Print position
    
CALL FUNCTION 'WRITE_FORM'
      
EXPORTING
        element  
'BOOKING'
        
function 'SET'
        
type     'BODY'
        
window   'MAIN'
      
EXCEPTIONS
        
OTHERS   1.
    
IF sy-subrc <> 0.
      
WRITE 'Error in write_form printing body of main'(004).
      
EXIT.
    
ENDIF.
*   Add current position to corresponding entry in table sums
    
MOVE-CORRESPONDING sbook TO sums.
    
COLLECT sums.
  
ENDLOOP.          " at bookings

* Print sum
  
LOOP AT sums.
    
MOVE-CORRESPONDING sums TO sbook.
    
CALL FUNCTION 'WRITE_FORM'
      
EXPORTING
        element  
'SUM'
        
function 'SET'
        
type     'BODY'
        
window   'MAIN'
      
EXCEPTIONS
        
OTHERS   1.
    
IF sy-subrc <> 0.
      
WRITE 'Error in write_form printing sum of invoice'(005).
      
EXIT.
    
ENDIF.
  
ENDLOOP.         " at sums

* Close customer form
  
CALL FUNCTION 'END_FORM'
    
EXCEPTIONS
      
OTHERS 1.
  
IF sy-subrc <> 0.
    
WRITE 'Error in end_form'(006).
    
EXIT.
  
ENDIF.
ENDLOOP.          " at customers

* close print job
CALL FUNCTION 'CLOSE_FORM'
  
EXCEPTIONS
    
OTHERS 1.
IF sy-subrc <> 0.
  
WRITE 'Error in close_form'(007).
  
EXIT.
ENDIF.