ABAP 4’te Sistem Değişkenleri

Sistem değişkenleri, programlarda bilgi verici olarak kullanılır ve değerleri sistem tarafından otomatik olarak girilir. Diğer değişkenler gibi kullanıcı tarafından değerler atanabilir ancak bu yöntem uygun değildir. Çoğu zaman çalışma zamanı hatalarına sebep olur.

WRITE :/ sy-repid ‘adlı program’, sy-datum ‘tarihinde’, sy-uzeit’ zamanında, sy-uname ‘kullanıcısı tarafından’ sy-tcode ‘islem koduyla  calistirilmistir.’ 

sy-index ve sy-tabix değişkenleri döngülerde sayaç olarak yararlanılır.

SAP ve Mimarisi

SAP 1972 yılında 5 eski IBM çalışanının Almanya’da kurduğu  Avrupa’nın en büyük yazılım şirketidir. Orjinal adı System Anwendugen Produkte (System Applications and Product) ve SAP olarak bilinen şirketin ürünleri, son dönemde Türkiye’de yaygınlaşmasıyla birlikte 120 ülkeye hizmet ediyor. Bugün Türkiye’de Sabancı Holding, Ülker Grubu, dünyada Microsoft, IBM gibi büyük firmalar tarafından tercih ediliyor. Diğer yandan iş ilanlarında ‘SAP bilen eleman aranıyor.’ deyimi yoğun bir biçimde kullanılıyor. Peki tam olarak SAP nedir, bir şirket mi, yazılım mı?

Okumaya devam et “SAP ve Mimarisi”

C# : Kodun Çalışma Süresini Hesaplama

C#, içinde barındırdığı bir çok hazır metotla yazılan kodu tek satıra indirmeyi sağlıyor. Bu durum bir kodun çalışma süresini hesaplamak için de geçerli.

Bir kodun çalışma süresini hesaplamak çoğu zaman önemlidir. Fonksiyonların ve değişken sayısının süreye nasıl etki ettiğini satır satır gözlemlemek için ideal.

using System.Diagnostics;
...
StopWatch sw = new StopWatch();

sw.Start(); // Hangi satırdan önce koyarsak o satırdan sonrası için işlemeye başlar.
...
Console.WriteLine(sw.Elapsed.ToString());

C# : Metin İçinde Metin Arama – 1

Belirli bir metin içinde kelime ya da karakter arama, şifreleme algoritmalarında,uzun metinlerde kelime bulmak ya da belli bir konuma gelmek için sıklıkla kullanılır. Programla yapılmak istenen kullanıcıdan alınan kelimenin, verilen metinde ya da okunan dosyadaki metinde kaç adet olduğunu bulmaktır.

Kullanıcıdan alınan ve dosyadan okunan metin arasında kelime aramanın mantığı aynıdır. Burada yararlanılan IndexOf() metodu bize istenen kelimenin olup olmadığını döndürür. Eğer yoksa -1 değeri döndürecektir. sayac değişkeni bulunduğu takdirde 1 arttırılarak kaç kelimenin kaç adet olduğunu gösterecektir.

int konum = sifre.IndexOf(sifre);
while (konum != -1)
{
konum = kelime.IndexOf(sifre, konum + 1);
sayac++;
}

Eğer dosyadan okutmak isteniyorsa ek olarak dosyanın yerini belirtecek ve okuma yapacak StreamReader nesnesine ihtiyaç vardır. Aşağıdaki satırlarla str adlı bir nesne oluşturularak C dizinindeki metin adlı belgeye ulaşıldı. ReadLine() metodu ile oku adlı string değişkenine atandı.

string oku;
StreamReader str = new StreamReader("c:\\metin.txt");
Console.WriteLine("Aranmak istenen kelime?");
kelime = Console.ReadLine();
oku = str.ReadLine();

Programın tüm kodları ise şöyle;

int secim;
String sifre,kelime;
int sayac = 0;
Console.WriteLine("Metin girmek icin 1'e, dosyadan okutmak icin 2'ye basiniz:");
secim = Convert.ToInt32(Console.ReadLine());
switch (secim)
{
case 1:
Console.WriteLine("Sifreyi giriniz:");
sifre = Console.ReadLine();
Console.WriteLine("Aranmak istenen kelime?");
kelime = Console.ReadLine();
int konum1 = kelime.IndexOf(sifre);
while (konum1 != -1)
{
konum1 = kelime.IndexOf(sifre, konum1 + 1);
sayac++;
}
break;
case 2:
string oku;
StreamReader str = new StreamReader("c:\\metin.txt");
Console.WriteLine("Aranmak istenen kelime?");
kelime = Console.ReadLine();
oku = str.ReadLine();
int konum2 = oku.IndexOf(kelime);
while (konum2 != -1)
{
konum2 = oku.IndexOf(sifre, konum2 + 1);
sayac++;
}
break;
}
Console.WriteLine("Metin icerisinde"+sayac+"tane bulunmustur.");
Console.ReadLine();
}

Web Servisleri Nedir?

Web servisleri, kısaca web üzerinden belirli servisler veren küçük programlardır. Kullanıcılar bu web servislerinden yararlanmak için belli standartlara uymak durumundadır. Örneğin web servislerine erişim HTTP protokolü ile olur. Web üzerinde veri geçişleri bir çok firewall’a takılsa da HTTP verilerinin aktarıldığı 80 numaralı porttan gelen verilere tüm firewall’ler izin verir. Bu herkesin HTTP protokolünü kullanarak web servisine ulaşmasını sağlar.  HTTP üzerinden bir erişim isteği oluştuğunda SOAP (Simple Object Access Protocol) denilen protokol devreye girerek XML çıktıları üretir. XML çıktılarının üretilmesinin sebebi; XML’in standart bir veri paylaşım aracı olması ve kullanıcının kullandığı teknolojiyi ayırt etmemesidir. Yani JAVA kullanan bir istemci C# ile yazılmış bir web servisini kullanabilir.
XML’i daha yakından bakarsak;
W3C‘ye göre HTML gibi bir işaretleme dilidir ancak onun yerini almak için geliştilmemiştir. HTML’den en önemli farkı önceden belirtilmiş etiketler yoktur. Kullanıcı kendisi belirtmek durumundadır. Ayrıca veriyi tanımlamak için Document Type Definiton ya da XMLSchema kullanmak gerekir.
Web servisleri bir çok avantajından dolayı oldukça popülerdir. Gelecek yıllarda kullanımının daha da artacağı düşünülmektedir. Çünkü veri tanımlaması için kullandığı XML, oldukça esnek bir dildir ve yazıldığı ortamdan bağımsız çalışır. Tabii ki web üzerinden verilen hizmete her yerden erişim olanağı ve web’in yaygın kullanımı da avantajdır.

C#: PictureBox ile Birden Çok Resim Görüntüleme

PictureBox ile resim görüntülemek kolay bir işlem. Ancak bunu birden çok resim için istiyorsak bunun bir kaç yolu var. En iyi yolu resimleri exe içine gömmek, çünkü bu diğer ortamlarda da programı sorunsuz çalıştırır.

Projeye eklemek istenilen resimler PictureBox nesnesinin özelliklerinden Image ile eklenebilir. Import ile istenen klasörden resim seçilebilir.

Kod kısmında ise resimleri tutacak bir listeye ihtiyaç var.,

List < Image > images = new List < Image > ();
images.Add(Properties.Resources.baseball_bat);
images.Add(Properties.Resources.bracelet);
images.Add(Properties.Resources.bride);
images.Add(Properties.Resources.cemetery);
images.Add(Properties.Resources.compass);
images.Add(Properties.Resources.earthquake);
images.Add(Properties.Resources.french_fries);

PictureBox ya da bir buton yardımıyla resimlere göz atmak isteniyorsa aşağıdaki if yapısı kullanılabilir. Eğer sirano son resmin sayısını gösteriyorsa başa dönmesi sağlanır. Böylece sonsuz bir döngü sağlanmış olur.

int sirano=0;  if (sirano == images.Count - 1)  sirano = 0;  else   sirano++;

C#: İstisna(Exception) Yönetimi

İstisna yönetimi, program yazımı açısından önemli bir noktadır. Programcı her ne kadar kodlarını dikkatli yazsa da çalışma zamanında oluşabilecek hataları göz önünde bulundurmalıdır. Derleme zamanında oluşan hatalar genellikle yazım hatalarıdır. Bunların tespiti ve düzeltilmesi kolaydır. Ancak programı kullanacak kullanıcının yapacağı bir hata sözkonusu olabilir. Bu tip durumlar için alınan tedbir işlemlerinin tümüne istisna yönetimi denir.
.NET platformunda türetilen her şey Object temel sınıfından türetilir. Doğal olarak istisnalar da sınıflardan türetilmektedir. Tüm istisnai sınıflar Exception sınıfından türetilir. Oluşturulan her istisna için farklı bir sınıf mevcuttur. Bu istisnalar da içinde kendine özgü yöntemler barındırır. System.Exception sınıfında türetilmiş bazı standart istisnalar vardır. Örneğin kullanıcı kaynaklı riskli hatalardan sıfıra bölme hatası için DivideByZeroException istisnası derleyicide varsayılan olarak bulunmaktadır.
İstisna yazımında 3 temel ifade kullanılır.
ifade
{
} şeklinde yazılır.
1. Try
Yapılması istenen işlemler try bloğuna yazılır. Catch ya da Finally ile kullanılması gerekir.
2. Catch
Try bloğu içindeki kodlarda bir hata oluşmuşsa burada yazılan kodlar çalıştırılır. Örneğin uyarı mesajları yazılmış olabilir. Hata olmazsa catch bloğu çalışmaz.
2. Finally
Bazen hata oluşması durumunda çalışacak kodlar yazılmamış olabilir. Bu durumda programın aksamaması için bu blok kullanılır. Ayrıca finally her koşulda çalışan bir bloktur. Örneğin bir işlem yapıp sonuca ulaştıktan sonra metin kutularını silmek için kullanılabilir.
 
Örneğin 3 sınav notunun girişinde yaşanabilecek olası hatalar  kullanıcının 100’den büyük sayı girmesi ya da istenen tipte giriş yapmamasıdır. Bunu engellemek için istisna olayını kullanırsak şöyle bir kod çıkacaktır.
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int n1, n2, n3;
            int ort;
            try
            {
                n1 = int.Parse(textBox1.Text);
                n2 = int.Parse(textBox2.Text);
                n3 = int.Parse(textBox3.Text);
                ort = (n1 + n2 + n3) / 3;
                if (n1 < 100 && n2 < 100 && n3 < 100)

                  textBox4.Text = ort.ToString();

              //  else
                  //  MessageBox.Show(“100den kucuk sayi girin”);
            }
            catch
            {
                MessageBox.Show(“Lutfen 0-100 arası sayı girin”);

            }
            finally
            {
                textBox3.Text = (” “);
                textBox2.Text = (” “);
                textBox1.Text = (” “);
            }

            }
 Burada ek olarak if else bloğunun da kullanılabileceği gösterilmiştir. Kullanıcının 3 nottan herhangi birini 100’den büyük girmesi durumunda uyarı mesajı gelecektir. Aslında bu tip işlemlerle hata riskini kontrol edebiliyorsak istisna kullanmamayı tercih etmeliyiz. Çünkü fazla istisna kullanımı, olası performans kayıplarını da beraberinde getirir.