11 Kasım 2019 Pazartesi

UiPath ve RPA Sunumlarım


RPA Sunumu



UiPath Sunumu



Orcestrator Sunumu

26 Ağustos 2018 Pazar

Kaş Tecrübelerim - Küçük Kaş Rehberi

Yazının tümünü okumanız gerekmesin diye, bazı bilgiler tekrarlı. Başka bir yeri referans göstermediği sürece ihtiyacınız olan kısmı okumanız yeterlidir.
Ayrıca verilen tüm bilgiler Ağustos 2018 içindir. Verilen bilgileri doğrulayarak hareket etmeniz en doğrusu, tek Saklıkent aracını kaçırmak istemezsiniz.
 Tüm yorumlar subjektiftir, benim için müzikli tekne işkence iken sizin için sessizlik ölüm gibi olabilir.


15 günlük Kaş tatilim sırasında edindiğim tecrübeleri sizler ile paylaşmak istiyorum. Tatilim sırasında TripAdvisor, Zomato gibi uygulamaları sıkça kullandım, birkaç blog yazısı da çokça yardımcı oldu.

Ancak ziyaretçiler için yeterli kaynak olmadığını düşünüyorum, çorbada tuzumuz bulunsun :) Umarım yardımcı olur.

Kaş'a Ulaşım


Öncelikle, Kaş'a nasıl gideriz? Ulaşımda karayolu kullanılabileceği gibi 2 farklı havalimanı üzerinden de Kaş'a ulaşmak mümkün. Hem Dalaman hem de Antalya Havalimanı Kaş'a ulaşım açısından elverişli.

Uçak bileti fiyatlarını biraz incelerseniz Dalaman biletlerinin biraz daha pahalı olduğunu göreceksiniz. Bu fiyat farkı kesinlikle verilmeye değermiş. Zira Dalaman’dan Kaş'a yolculuk 3 saat sürerken Antalya’dan 4 saat sürmekte. Bu 1 saatlik fark ucuz bilet almaya değer gibi görünse de transfer imkanları ve yolun yapısı düşünüldüğünde kesinlikle Dalaman Havalimanı doğru tercih olacaktır. 

Birçok firma çeşitli fiyatlardan Dalaman'a transfer imkanı sunarken (Paylaşımlı ve Özel olarak -  Paylaşımlı transfer fiyatları gözlemlediğim kadarı ile 50 TL’den başlıyor), Antalya Havalimanı için yalnızca taksi veya Özel Transfer imkanları mevcut, ki bu oldukça pahalı.

Eğer Antalya Havalimanı için fiyat açısından uygun bir yolculuk isterseniz, Batı Antalya firmasının saat başı kaldırdığı otobüsleri kullanabilirsiniz. Ancak bu seferler Havalimanı aktarması için düşünülmediğinden, köy minibüsünden hallice. Ayrıca rota üzerindeki tüm kasaba ve ilçeler tek tek yolcu toplamayı da göze almanız gerek. Bir diğer kötü yanı ise bu otobüsler Antalya otogarından hareket etmekte, yani Havalimanı-Otogar aktarmasını da göze almalısınız.

Bu aktarmayı Havalimanı çıkışındaki Havaş’lar ile yapabilirsiniz. Havaş sizi otogar girişinde bırakacaktır. Dönüş yolunda girişe yürümek çok zahmetli olacağı için Otogar-Havalimanı aktarmasında taksi kullandım. 20 KM'lik bu yol için 70 TL alıyorlar, ki bu çok ama çok acıtıyor. Kaş - Dalaman Transferleri bile 50 TL'den başlıyordu.

Kaş Otogar - Antalya araçları soldaki siyah yazılar


Plajlar


Kaş'a geldik. Yüzmek istiyoruz. Peki plajlar neler, neredeler, nasıllar? Plajlarda hiç fotoğraf çekmedim ama bana göre plajı en iyi anlatan görüntüyü bulup ekleyeceğim.

Küçük Çakıl Plajı


Gelmeden önce en çok duyduğunuz plaj büyük ihtimalle Küçük çakıl olacaktır. Bu plaj şehir merkezine makul yürüş mesafesindeki tek plaj, neredeyse merkezde.

Aslında ortada bir plajdan bahsetmek zor! Zira İki kayalık arasındaki 10 metrelik çakıl küçük bir alanı plaj olarak adlandırmak yanlış olur. Bu alanı plaj olarak nitelemek için bulunan çözüm ise oldukça basit. Alanın iki tarafına 2 ayrı platform kurmak ve Bu platformları iki ayrı işletmeye vermek.

(Halk) Plajı kültürünü sevenler için tam bir fiyasko. İlk gün bu ünlü “plajı” gördüğümde Kaş'ı terk etmeyi düşünmedim değil.

Bir işletmeye ait, platform şeklinde dizayn edilmiş, müzikli, “beach” (nasıl tarif etsem bilemedim ama siz anladınız diye umuyorum) tarzı mekanları sevenler için aslında gayet uygun. Neden bu kadar ünlü olduğunu anlamak zor değil.

Platformlardan merdiven aracılığıyla denize girilen plajda yüzme bilmeyenler için makul bir nokta mevcut değil. Ayrıca soğuk su kaynağından çıkan su nedeniyle oldukça ama oldukça serin sulara sahip.

Kaynak: www.illedevilla.com


Büyük Çakıl Plajı


Küçük Çakıl “Plaj”dan araç ile 5 dakikalık mesafede bulunan Büyük Çakıl plajı, kardeş plajı olan Küçük Çakıl aksine gayet geniş bir alana sahip, gerçek bir plaj. Bu plajda da birden çok işletme mevcut ve şezlonglar işletmeler arasında oldukça karışık bir şekilde paylaştırılmış.

Yemek-İçecek tüketimi yapıldığı takdirde şelong-şemsiye ücreti almayan işletmeler mevcut. Bu imkanı sağlayan benim hatırladığım kadarıyla tek plajdı. (Emin değilim, işletmeler ile pek işim olmuyor.)

İşletmeleri bir kenara bırakırsak, denizi yüzmeye elverişli olacak kadar dalgalı diyebiliriz. Yine bu plajda da bir soğuk su kaynağı mevcut ancak ufak akıntılara denk gelinmediği sürece pek hissedilmiyor. Her çakıl plajda gerekli olduğu gibi burada da deniz ayakkabısı oldukça işinize yarayacaktır.

Merkeze yakın olması ve görece güzel bir deneyim bırakması açısından Büyük Çakılı ziyaret etmenizi tavsiye ederim. Ancak aracınız yoksa minibüs imkanı bulunmamakta. Taksi ile merkezden takriben 20 TL civarına ulaşabilirsiniz.

Not: Bir yerlerde minibüs var diye okudum ama ben bulamamıştım.

Kaynak: gezilmesigerekenyerler.com


İnceboğaz Plajı


Yukarıda bahsettiğim iki plaj Kaş’ın doğusundan yer alırken İnceboğaz Kaş’ın batısından yer alan ve  üzerinde birçok plaj barındıran yarımadada yer almakta. Bu yarımadanın orta kısmındaki dar alanın sağında ve solunda yer alan 2 alan(arasından yalnızca bir yol geçiyor.) İnceboğaz plaj olarak isimlendirilmektedir. (Belediye-Halk plajı olarak isimlendirilmektedir.) Bu plaja ulaşım şehir merkezindeki caminin yanından kalkan minibüsler ile mümkün.

Plajın açık denize bakan tarafı dalgalı, iri çakıllı ve çabucak derinleşirken, plajın yarımada tarafından korunan açık denize kapalı tarafı ise oldukça berrak, sığ ve sakin bir suya sahip. Yüzme bilenler sol tarafı severken, bilmeyenler sağ taraftan oldukça memnun kalacaktır.

Diğerlerinde olduğu gibi yer bulamadım ama bu plaj bayram süresince bir şekilde en sakin kalan yer oldu. Tavsiye ederim.

1 Duş, 2 Kabin mevcut.

Her iki taraf plaj - Sol taraf açık deniz

Ancak resimler biraz eski, artık böyle gözükmüyor.


Hidayet Plajı


Hidayet Koyu veya Hidayet Plajı olarak isimlendirmek yerine Akvaryum koyu olarak isimlendirmek yeridir. Kum veya çakıl bir plajı bulunmayan bu koyda, denize kayalıkların arasından girilmekte. Özel bir işletmenin kayaların üzerine kurduğu platformlarda hem güneşlenmek hem de denize girmek mümkün. Yüzme bilmeyenler için makul bir alan tanıyan bu plaj, bilmeyenleri memnun edecektir ama bilenleri emin olun daha çok memnun edecektir zira bu koy dalış ekiplerinin bile uğrak adresi.

İnceboğaz Plajına ulaşım için kullanılan minibüs hattı Hidayet Plajına ulaşım için de kullanılabiliyor. İki plajın arası araç ile 5 dakikalık bir mesafe. Hidayet Plajı benim en beğendiğim plajlardan birisi oldu, ziyaret kesinlikle tavsiye ederim. 

4 Duş, 4 Kabin mevcut.

Kaynak: www.hidayetkoyu.com

Akçagerme Koyu (Plajı)


Bir turizm meslek lisesi tarafından işletilen bu plaj, şehir merkezinin batısından yer almakta. Ulaşım için hem Kalkan-Kaputaş minibüsleri hemde Gökseki minibüsleri kullanılabilir. Şehir merkezinden ulaşım yaklaşık 10 dakika zaman almakta.

Bir Şezlong ve bir Şemsiye yalnızca 10 TL. Büyük Çakıl plajından daha geniş bir alana sahip olan bu plajda, denizin ortasında 2 adet plastik yüzen platform bulunmakta. Suyu oldukça sakin ve sıcak olan bu plaj yine yüzme bilmeyenler için oldukça makul bir alan tanıyor. Ayrıca çocuklu aileler için çocuk havuzu ve küçük bir su parkı da mevcut. İlk gittiğimde çok beğensem de Hidayet Plajını gördükten sonra o kadar da çekici gelmemeye başladı :)

Çokça Duş, 4 Kabin mevcut.

Kaynak: cinarlarapart.com


Kaputaş Plajı


Gelelim Kaş ve Kalkan yöresindeki yerli ve yabancı turistler için en popüler plaja. Kaştan minibüs ile yarım saate ulaştığınız bu plaja inmek için 200 küsur basamağı göze almanız gerekmekte. Küçük Çakıl plajından sonra benim için en büyük hayal kırıklığı sanırım Kaputaş oldu. Yukarıdan baktığınızda çok ama çok güzel bir görüntüsü olan plaj, oldukça kalabalık ve her daim dalgalı olması ile yüzmeye pek elverişli değil.

Kaynak: change.org

Patara Plajı


Zamanında Türk filmlerindeki çöl sahnelerinin çekilebileceği kadar geniş ve güzel bir kum sahile sahip olan bu plaj kesinlikle görülmeye değer, ancak yüzmeye değil. Zira çok dalgalı ve dip akıntısının olduğu bu plajda yüzmek oldukça tehlikeli. Cankurtaranların neredeyse sürekli geçtiği anonsları dikkate almak gerek. Benim ziyaretim sırasında bir vatandaş boğulmak üzere iken cankurtaran botu ile kurtarıldı ve akıbetini henüz bilmiyorum.

Ziyaret ettiğinizde zaten göreceksiniz, insanlar genellikle güneşlenmeye ve emniyet şeridi arkasında dalgalar ile oynamaya geliyorlar. Müze kartınızın olmadığı durumda Plaj ve Antik kent için ziyaret durumunuza göre ayrı ayrı ödeme yapmanız gerekiyor. Müzekart ile her ikisi içinde ücretsiz geçiş mümkün, ancak Şelong ve Şemsiye her iki durumda da ücrete tabii.

Patara plajına ulaşım Kaş otogardan kalktan Kaputaş-Kalkan minibüsleri ile mümkün. Minibüs sizi Patara plajına kadar getirmeyebiliyor, bu durumda Patara kavşağında indirip servise binmenizi rica edecekledir.

Plajdaki Servis Saatleri Çizelgesi
Çokça Duş, 4 Kabin mevcut.

Kaynak: Plajtr.com

Limanağzı Plajı


4 işletmeye sahip bu plaja, tekne servisleri ile ulaşım mümkün. 9’da başlayan servisler 19’da sona eriyor ve doldukça kalkıyor. Gidiş dönüş ücreti ise 20 lira.

Bayram yoğunluğu nedeni ile saat 1 civarı gitmeye çalıştığımda sonraki servisin saat 4’te olduğu, plajlarda yer olmadığı ve sabahtan dolduğu söylendi. Şayet gitmek istiyorsanız yoğun sezonda sabahtan gitmenizi ve ukala görevli için bir sakinleştirici almanızı öneririm.

Gezilecek Yerler


Hep yüzmek değil, birazda gezmek gerek. Antik kent ziyaretlerinde güneş gözlüğü, şapka, bolca su ve güneş kremi bulundurmayı ihmal etmeyin. :)

Kral Mezarı - Antiphellos (Kaş) Antik Kenti


Her ikisi de Kaş Merkez içerisinde yer alıyor. Kral Mezarı zaten Uzun Çarşı olarak adlandırılan (kısacık sokak) yerin hemen ucunda. Antik kent ise Yarımada yolu üzerinde yer alıyor. (Kent demek yanlış bence, zira yalnızca tiyatro ayakta kalmış.)

Buraları ziyaret etmeden önce güzelce araştırmakta fayda var. Çevrelerinde açıklayıcı bilgi bulmak zor. Bu kadar yakın olmalarından ötürü görmeden gitmek eşeklik olur.

Myra - St. Nikolaos Kilisesi  


Noel Baba'nın doğduğu yer olmasa da yaşadığı ve kilisesinin olduğu yer Demre. Otogardan Meydana yürüyerek 5 dakikada ulaşabilirsiniz. Ayrıca Myra Antik Kenti yine Demre'de yer alıyor. Myra için bir otobüs-minibüs bulamadım. Yürümeye elverişli bir yol değil, taksi kullanmanız gerekecektir. Geliş gidiş için 30 TL verdim.

Biraz tarih-tarihi şeylere ilgi duyuyorsanız sizi memnun edecek bir gezi olur. Demre'ye aşağıda bahsettiğim otobüs hattı ile kolaylıkla ulaşabilirsiniz.

Xanthos Antik Kenti


Xanthos, UNESCO Dünya Kültür Mirası listesinde yer alan ve Likya medeniyetine başkentlik yapmış bir şehir. Yukarıda bahsettiğim Antik Kentlerden çok daha büyük ve etkileyici. Tarihe ilgi duymayanları bile hikayesi ile etkiyeceğine ve kendisine çekeceğine eminim.

Ulaşım için Kaş-Kınık hattını kullanabilirsiniz. Gidişte araç sizi Antik kentin içine kadar götürüyor. Dönüş için otogara 10 dakika yürümeniz gerek.

Patara Antik Kenti


Yukarıda plajlar kısmında anlattığım için ulaşım ve giriş detaylarına girmeyeceğim. Maalesef zamanı ayarlayamadığım için ziyaret edemedim. Ancak uzaktan gözlemlediğim kadarıyla, en az Xanthos kadar büyük olduğu ve bir o kadar görülmeye değer olduğunu söyleyebilirim.

Saklıkent


Lafı uzatmaya gerek yok, tam bir doğa harikası. 2 saatlik yolcuğu fazlası ile hak ediyor, mutlaka ziyaret ediniz ve gidebildiğiniz kadar ileri gidiniz.

Şort, deniz ayakkabısı (olmadı parmak arası terlik) ve bolca sabır gerekiyor. O soğuk sulardan geçerken ve ufak tefek kayalara tırmanırken lazım olacak :)

Günde bir adet Kaş-Kınık aracı Saklıkent'e gidiyor ve geri getiyor. Başka bir alternatif bulamadık. Detayları aşağıdaki bulabilirsiniz.

Kekova - Batık Şehir Tekne Turu


Kaş giden herkesin yapması gerektiğini düşündüğüm bir tur. Hem şehir içinde hemde merkezdeki limanda sayısız acente, çok sayıda tekne turu düzenliyor. Kekova-Batık Şehir bunlardan birisi

Acenteden acenteye bu turun kapsamı, ziyaret edilen koylar, rota, süre, yiyecek - içecek, ücret ve rehberlik farklılık gösteriyor. 

Xanthos Travel'ı tercih etmiştim ve memnun kaldığımı söyleyebilirim. Öncelikle 9:30'da Kaş merkezden alıp 40 dakika uzaklıktaki Üçağız'a götürülüyorsunuz. Orada tekne turu başlıyor. İlk olarak koy girişinde bir yüzme molası veriliyor. (Teknede can yeleği, makarna mevcut) Daha sonra rehber anlatımı eşliğinde Batık şehir baştan başa geçiliyor-görülüyor. Daha sonra çeşitli koylarda yine yüzme araları veriliyor. Bir koyda yabani keçiler besleniyor. Son olarak Simena (Kaleköy) ziyaret ediliyor ve dönüş yolcuğu başlıyor. Takriben 6:30 civarı Kaş'a varmıştık. 

Yemekler ve ikram ücretsiz ancak içecekler ücretliydi. Tekne çok şükür ki müzik yoktu

Simena (Kaleköy)


Tekne turunun bir parçasıydı ancak ayrı bir başlık altında konuşmak gerek. Çok ama çok güzel bir yer. Keşke müstakil olarak ziyaret etme fırsatım olsaydı, 45 dakika yetmedi bana. Ziyaret ettiğinizde zirvedeki kaleyi mutlaka gezin ve manzaranın keyfini çıkarın. Müzekart ile ücretsiz giriş sağlayabilirsiniz. 

El yapımı dondurma satan çok sayıda işletme mevcut ve hepsi geçerken müşteri çekmek için tadımlık dondurma ikram ediyorlar. Deneyip karar verebilirsiniz. Ben "The I Am Here Cafe"yi tercih etmiştim. Çok güzel bir manzaraları var, dondurmaları çok lezzetli ve çok ama çok iyi birer esnaflar. (TripAdvisor, EkşiSözlük) Limonlu dordurma seçerken dikkat! Limonlu-Naneli yazıyormuş :)

Ulaşım İmkanları


Açıkçası aracı olmayanlar için Kaş tatili pek mutlu geçmeyebilir. Zira birçok minibüs hattı oldukça sıkıntılı ve kaçtığınız şehirdeki yoğunluğu size yaşatıyor. Ancak konforlu olmasa da istediğiniz bir çok noktaya ulaşım için hatlar mevcut. Gittiğim yerlere göre kullandığım hatlar şöyle;

Yarımada - Merkez


Bu hattın başlangıç noktası Merkez Caminin hemen yanı, tam olarak burası. Adından anlaşılacağı üzere yarımadaya gidiyor. Bu hattı kullanarak İnceboğaz ve Hidayet plajlarına gidebilirsiniz. Yol kısa ve araçlar büyük şehirlerdeki dolmuşlar gibi çalıştığı için ayakta gitmenin mahsuru yok.


Soldaki kısım - Yarımada - Merkez


Kaş - Gökseki


Yarımada minibüsü ise aynı noktadan hareket ediyor ve Devlet Hastanesi ardından Gökseki istikametine devam ediyor. Bu hattı kullanarak Akçagermeye ulaşabilirsiniz. Yine aynı şekilde ayakta atlayabilirsiniz hemen :)

Ortadaki kısım - Kaş - Gökseki


Kaş - Kınık


Diğerlerine göre birkaç varyasyonu olan bu hat Kaş Otogardan hareket ediyor. Sırası ile Akçagerme, Kaputaş, Kalkan, Patara, Saklıkent olarak devam edip Kınık Otogarda son buluyor. 

Kaputaş'a bile gidecek olsanız oturmaya bakın. Yol ürkütücü derece virajlı, kesinlikle o halde çekilmez. Zaten tutunacak yer olmaması rağmen ayakta yolcu alınıyor ve sıkışık olabiliyor.

Saklıkent'e gitmek isterseniz tek atış hakkınız var. Ne demek bu? Günde yalnızca bir Kınık aracı Saklıkent'e gidiyor, Saklıkent Kınık'ın ilerisinde bir yerde. Size tavsiyem gidiş-dönüş ücretini peşin vermeniz.


Her aracın içinde yer alan çizelge

Otogarda yer alan çizelge - Saklıkent seferi tepede

Yukarıdaki görüntünün sağ üste detayı


Kaş - Demre


Bu hat bir otobüs hattı ve "Demre'ye neden gidelim?" diye sorarsanız, Myra ve St. Nikolaos Kilisesi için cevabını alırsınız, yani Noel Baba. Kaş otogardan hareket ediyor.

Kaş Otogar - Demre Kalkış saatleri kırmızı yazı

Demre Otogar - Kaş Saatleri turuncu


Taksiler


Aracın olmadığı durumda minibüslerle idare edilse de, sefer aralıklarının 30-60 dk olması dönüşte taksi kullanmaya itiyor. Pazarlık ve taksimetre yok, önceden belirlenmiş fiyatlara göre ödeme yapıyorsunuz. Ama en azından karşılaştığım tüm taksiciler iyiydi, bir İstanbul klasiği yaşamadım :)

Büyük - Küçük Çakıl'a yakın olan taksi durağının fiyatları

Merkezdeki taksi durağının fiyatları

Yemek İçmek


Çeşitli uygulama ve blog yazılarında zaten güzel, popüler ve dolayısıyla görece pahalı mekanları bulabilirsiniz. Ben size ekonomik, lezzetli ve doyurucu mekanları çok kısaca anlatayım.

Kekik Restoran


Tantuni ve ciğer yemek istiyorsanız, hem çok lezzetli hem de uygun fiyatları ile sizi bekliyor. Çalışanlarını çok sevmiştim. Selam olsun.

Atatürk Bulvarındaki Restoranlar


Bulvar üzerinde 4-5 adet ucuz restoran mevcut. Hepsinin menüsü neredeyse aynı; ev yemekleri, lahmacun, kebaplar, salatalar, mezeler vb... Nereyse hepsi sürekli dolu ve yoğun ancak lezzet ve hizmet farkları var. 

Yeşil restoran bence en iyisi, hem lezzetli hem de çalışanları insan gibi. Bir sonraki tercihim Öz Nazilli olur, ancak sipariş alan adam 2 kez gitmemenizi garanti ediyor. 2000 restoranına gitmemenizi tavsiye ederim ben yediğim şeylerden hiç tat almadım açıkçası. 


26.08.2018 Murat Süzük İstanbul

22 Nisan 2018 Pazar

BAPI Structure and xStructure Dynamically Filling (Crossing Out)


As many of you already know, BAPIs often use dual structure.

Data is collected in the first structure, and verified in the second structure. This verification is done by crossing out. This means that the field will be updated / created.

Example;

1
2
3
4
5
6
mystrucute-myfield = 0.005.
mystrucutex-myfield = 'X'.
mystrucute-yourfield = 'Ali'.
mystrucutex-yourfield = 'X'.
mystrucute-ourfield = '0085066996'.
mystrucutex-ourfield = ''.   //Won't update.

Receiving and verifying data can take hundreds of line. The data, from the database, is manually matched one by one BAPI structure, and xStructure is crossed out one by one.

Example BAPI (Just a part)

Mapping functions provided by SAP can be used to fill BAPI structures similar to database tables.

These functions work with external-> internal or internal-> external logic.

For example; bapi_marc -> marc or marc-> bapi_marc. In this way you can easily fill a whole structure.

For example;

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Select Single *
 From mard
 Into ls_mard
 Where matnr = lv_matnr
   And lgort = lv_lgort.

Check sy-subrc Is Initial.

Call Function 'MAP2E_MARD_TO_BAPI_MARD'
 Exporting
  mard      = ls_mard
 Changing
  bapi_mard = ls_bapi_mard.


These functions may not always be pre-generated in the system, but can be generated using the BDBS transaction code.

However, SAP doesnt provides a function for dynamic crossing out. We can do this ourselves. My solution is as follows;

Local Interface:
Importing: iv_stname Type ddobjname
Changing: cv_structure ve cv_structurex


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
DATA lt_fields TYPE STANDARD TABLE OF x031l WITH HEADER LINE.

FIELD-SYMBOLS: <st> TYPE ANY.
FIELD-SYMBOLS: <stx> TYPE ANY.
FIELD-SYMBOLS: <line> TYPE x031l.

CALL FUNCTION 'DDIF_NAMETAB_GET'
  EXPORTING
    tabname = iv_stname
  TABLES
    x031l_tab = lt_fields
  EXCEPTIONS
    not_found = 1
    OTHERS = 2.

CHECK sy-subrc = 0.

LOOP AT lt_fields ASSIGNING <line>.
  ASSIGN COMPONENT <line>-fieldname OF 
  STRUCTURE cv_structurex TO <stx>.
  CHECK <stx> IS ASSIGNED.
  ASSIGN COMPONENT <line>-fieldname OF 
  STRUCTURE cv_structure TO <st>.
  CHECK <st> IS ASSIGNED.
  IF <st> IS INITIAL.
    CLEAR <stx>.
  ELSE.
    <stx> = 'X'.
  ENDIF.
ENDLOOP.

ENDFUNCTION.

An example for function call;

1
2
3
4
5
6
CALL FUNCTION 'Z_XXXXXXXXXXXX'
  EXPORTING
    iv_stname = 'BAPI_MARD'
  CHANGING
    cv_structure = ls_bapi_mard
    cv_structurex = ls_bapi_mardx.

If xStructure has a key field, which means its type is not char1, remember to fill it. I have not added this feature, dont know why :)

With these two functions, you can fill and validate hundreds of lines much faster!

BAPI Structure Dinamik Doldurma ve xStructure Dinamik İşaretleme


Bir çoğunuzun önceden de bildiği gibi BAPI'ler çoğu zaman ikili yapı kullanırlar.
İlk yapıda veri alınırken, ikinci yapıda alınan veri doğrulanır. Bu doğrulama işlemi çarpılayarak yapılır. Bu işlem o alanın güncelleneceği/yaratılacağı anlamına gelir.

Örneğin;

1
2
3
4
5
6
mystrucute-myfield = 0.005.
mystrucutex-myfield = 'X'.
mystrucute-yourfield = 'Ali'.
mystrucutex-yourfield = 'X'.
mystrucute-ourfield = '0085066996'.
mystrucutex-ourfield = ''.   //Ilk iki alan guncellenirken bu alan guncellemeyecek.

Veri alma ve doğrulama işlemi yüzlerce satırı bulabilir. Veritabanından alınan veriler tek tek BAPI structure ile eşlenir bunun yanında xStructure tek tek işaretlenir.

Örnek BAPI (Sadece bir kısmı)

Database tablolarına çok benzeyen BAPI structure'larını doldurmak için SAP'nin sunduğu Mapping fonksiyonları kullanılabilir.

Bu fonksiyonlar external->internal veya internal->external mantığı ile çalışır.

Örneğin; bapi_marc -> marc veya marc->bapi_marc şeklinde. Bu şekilde koca structure'ı kolaylıkla tamamlayabilirsiniz. Örneğin;

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Select Single *
 From mard
 Into ls_mard
 Where matnr = lv_matnr
   And lgort = lv_lgort.

Check sy-subrc Is Initial.

Call Function 'MAP2E_MARD_TO_BAPI_MARD'
 Exporting
  mard      = ls_mard
 Changing
  bapi_mard = ls_bapi_mard.


Bu fonksiyonlar sistemde her zaman oluşturulmuş halde bulunamayabilirBDBS işlem kodundan kolaylık üretilebilir.

Ancak SAP dinamik işaretleme için bir fonksiyon sağlamıyor. Bunu kendimiz yapabiliriz. Benim çözümüm aşağıdaki gibi.

Local Interface:
Importing: iv_stname Type ddobjname
Changing: cv_structure ve cv_structurex


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
DATA lt_fields TYPE STANDARD TABLE OF x031l WITH HEADER LINE.

FIELD-SYMBOLS: <st> TYPE ANY.
FIELD-SYMBOLS: <stx> TYPE ANY.
FIELD-SYMBOLS: <line> TYPE x031l.

CALL FUNCTION 'DDIF_NAMETAB_GET'
  EXPORTING
    tabname = iv_stname
  TABLES
    x031l_tab = lt_fields
  EXCEPTIONS
    not_found = 1
    OTHERS = 2.

CHECK sy-subrc = 0.

LOOP AT lt_fields ASSIGNING <line>.
  ASSIGN COMPONENT <line>-fieldname OF 
  STRUCTURE cv_structurex TO <stx>.
  CHECK <stx> IS ASSIGNED.
  ASSIGN COMPONENT <line>-fieldname OF 
  STRUCTURE cv_structure TO <st>.
  CHECK <st> IS ASSIGNED.
  IF <st> IS INITIAL.
    CLEAR <stx>.
  ELSE.
    <stx> = 'X'.
  ENDIF.
ENDLOOP.

ENDFUNCTION.

Örnek fonksiyon call ise;

1
2
3
4
5
6
CALL FUNCTION 'Z_XXXXXXXXXXXX'
  EXPORTING
    iv_stname = 'BAPI_MARD'
  CHANGING
    cv_structure = ls_bapi_mard
    cv_structurex = ls_bapi_mardx.

Eğer xStructure'da tipi char1 olmayan, anahtar alan var ise bunu doldurmayı unutmayın. Bu özelliği eklememiştim :)

Bu iki fonksiyonu kullanarak yüzlerce satır sürece doldurma ve doğrulama işlemini çok daha hızlı yapabilirsiniz :)

25 Kasım 2017 Cumartesi

Dynamic Dropdown List Values in ALV

I created an OO ALV which has a dropdown list column, for new custom screen. But the dropdown lists should be filled dynamically not statically. So I did a little research on the internet and no result :) Some people even says, it does not seem possible. I made and want to share :)

I used demo tables SFLIGHT and SBOOK. The program lists flights and customers for the each flight but in dropdown list. Look at the screenshots you will get it what i try to explain.

Dinamik Dropdown List 1

Dinamik Dropdown List 2

Dinamik Dropdown List 3


It is easier to unterstand code by runnig than by reading. Because of that reason, I wrote the sample code as copy, past and run code. Dont forget to create Screen 0100 and Container CONT0100.


  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
REPORT z_xxxx.
"Extended version of sflight table. results for the dropdown values and keyc for the differention of the values 
DATA: BEGIN OF gt_flights_extended OCCURS 0.
            INCLUDE STRUCTURE sflight.
            DATA:  result(15).
            DATA:   keyc TYPE int4,
      END OF gt_flights_extended.
*Container definitions
DATA: r_container100 TYPE REF TO cl_gui_custom_container,
      r_grid100      TYPE REF TO cl_gui_alv_grid.
*table for the dropdown data
DATA: gt_dropdown  TYPE lvc_t_drop,
      gs_dropdown  TYPE lvc_s_drop.
*variable as a counter. it helps to differentiate
DATA: gv_counter TYPE int4 VALUE 0.
*Catalog/layout 
DATA: gt_fieldcat  TYPE lvc_t_fcat WITH HEADER LINE,
      gs_layout    TYPE lvc_s_layo.

INITIALIZATION.

  PERFORM retrieve_data.
  PERFORM create_catalog.
  PERFORM show_alv_and_screen.

*&---------------------------------------------------------------------*
*&      Form  retrieve_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM retrieve_data.

  SELECT * FROM sflight INTO CORRESPONDING FIELDS OF gt_flights_extended UP TO 50 ROWS.
*use counter for each row
    gv_counter = gv_counter + 1.
    gt_flights_extended-keyc = gv_counter.
    APPEND gt_flights_extended.
*retrieve customer id for each row
    SELECT customid FROM sbook INTO (gs_dropdown-value) UP TO 10 ROWS
      WHERE carrid = gt_flights_extended-carrid AND connid = gt_flights_extended-connid AND  fldate = gt_flights_extended-fldate.
*use counter while saving customerid for coupling
      gs_dropdown-handle = gv_counter.
      APPEND gs_dropdown TO gt_dropdown.

    ENDSELECT.

  ENDSELECT.

ENDFORM.                    "retrieve_data

*&---------------------------------------------------------------------*
*&      Form  create_catalog
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM create_catalog.

  gt_fieldcat-fieldname  = 'CARRID'.
  gt_fieldcat-coltext = 'CARRID'.
  APPEND gt_fieldcat .

  gt_fieldcat-fieldname  = 'CONNID'.
  gt_fieldcat-coltext = 'CONNID'.
  APPEND gt_fieldcat .

  gt_fieldcat-fieldname  = 'FLDATE'.
  gt_fieldcat-coltext = 'DATE'.
  APPEND gt_fieldcat .
*Dropdown list tanımı böyle yapılmalı
  gt_fieldcat-fieldname  = 'RESULT'.
  gt_fieldcat-coltext = 'Results'.
  gt_fieldcat-checktable = '!'.
  gt_fieldcat-edit  = 'X'.
  gt_fieldcat-drdn_hndl = 1.
  gt_fieldcat-drdn_field = 'KEYC'.
  APPEND gt_fieldcat .

  gs_layout-zebra = 'X'.
  gs_layout-no_toolbar = 'X'.

ENDFORM.                    "create_catalog

FORM show_alv_and_screen.

 CREATE OBJECT r_container100
    EXPORTING
      container_name = 'CONT100'.

  CREATE OBJECT r_grid100
    EXPORTING
      i_parent = r_container100.
*we let it know we will use this table for dropdown list
  CALL METHOD r_grid100->set_drop_down_table
    EXPORTING
      it_drop_down = gt_dropdown.

  CALL METHOD r_grid100->set_ready_for_input
    EXPORTING
      i_ready_for_input = 1.

  CALL METHOD r_grid100->set_table_for_first_display
    EXPORTING
      i_structure_name = 'GT_FLIGHTS_EXTENDED'
      is_layout        = gs_layout
    CHANGING
      it_outtab        = gt_flights_extended[]
      it_fieldcatalog  = gt_fieldcat[].

  CALL SCREEN '0100'.

ENDFORM.