25 Eylül 2008 Perşembe

.NET : This row already belongs to another table

.NET'te , elimizdeki iki DATATABLE içinde loop yapıp, birinin değerlerini diğerine atmak istediğimizde;
This row already belongs to another table
gibi bir hata vermektir. Yani;
C#
foreach
(DataRow row in dt1.Rows){
if(......){
dt2.Rows.Add(row);
}
}

VB.net
for each row as datarow in dt1.rows
if .... then
dt2.rows.add(row)
endif.
next.
İşlemini yapamamaktayız. Sebebi ise ADD metodunu kullandığımızda, dt1 in referanslarıyla dt2 ye ekleme yapmaya çalışmasıdır.
Burada kullanacağımız metod, datatable nesnesinin IMPORTROW metodudur.

Örnek;

C#
DataTable dt1 = ds.Tables[0];
DataTable dt2 = new DataTable();

dt2 = dt1.Clone(); "sütünların aynı olması için clone şart
foreach(DataRow row in dt1.Rows){
if(......){
dt2.ImportRow(row);
}
}
VB.NET
dim dt1 as datatable = ds.tables(0)
dim dt2 as new datatable

dt2 = dt1.clone
for each row as datarow in dt1.rows
if ..... then
dt2.ImportRow(row)
endif
next


iyi çalışmalar & attığınız şutlara paslara dikkat edin :).

23 Eylül 2008 Salı

ABAP : En hizli BADI bulma yontemi

Bir transaction içindeki BADI'leri bulmak için yapacağınız işlem sırasıyla;
SE37 ye gidin,

Fonksiyon adına SXV_GET_CLIF_BY_NAME yazıp içine girin.
Kodun içine bir break-point koyun.
Yeni bir pencere açarak transaction kodunuzu yazın.
Yazıp ENTER tuşuna bastığınızda otomatik olarka break-point'e düşecektir
Burada ki , EXIT_NAME BADI'nin adını verecektir.
Yapacağınız her işlemde buraya düşer ve o transactiondaki işlemlere ait
BADI'leri kolaylıkla bulabilirsiniz.

Kolay gelsin & attığınız paslara şutlara dikkat edin.

20 Eylül 2008 Cumartesi

.NET : Zula

İş ve okuldan arta kalan zamanda kodladığım ve paylaşıma yönelik olan ZULA isimli projemi yakında yayına geçiriyorum. Program genel olarak paylaşmaya yönelik olup döküman , kod ya da diğer hertürlü veri paylaşımına uygundur. Bitmesine birkaç satır kodluk zaman kaldı :=).
Tüm işler arkada kullanılan bir webservis ile yürümektedir direk veritabanı ulaşımı olmadığı için hem hızlı hem güvenli olmaktadır. Program aynı zamanda güncel sürümünü internet aracılığıyla kontrol edip, yeni bir sürüm var ise otomatik olarak onu indirmekte ve açılırken en güncel sürümüyle açılmasını sağlamaktadır. Ayrıca yakın bir zamanda, SAP'a direk bağlanıp istediğinz bir programı tüm strucure,include ve diğer Z li ögelerle birlikte indiren bir Report Downloader ve hiç kod yazmadan rapor üretebileceğiniz bir ABAP Generator yayınlıyacağım.
Bir kaç ekran görüntüsünü göstermek gerekirse;


7 Eylül 2008 Pazar

.NET : Unable to find manifest signing certificate in the certificate store.

Bilgisayarımıza format attıktan sonra veya başka biryerden projemizi kendimize kopyaladığımızda, .NET te yazdığımız windows projelerimizi açıp, build etmek istersek;
"Unable to find manifest signing certificate in the certificate store. "
gibi bir hatayla karşılaşabiliriz.
Bu hata yüzünden projemiz build edilmeyecektir.
Düzeltmek için tek yapmamız gereken, Solution Explorer'dan projemize sağ tıklayıp
oradan Properties sekmesine tıklarız. Açılan pencereden Signing sekmesine gelip
"Create Test Certificate" butonuna tıklarsak, sorunun çözüldüğünü görürüz.

İyi çalışmalar :=)

SQL : Management Studio Kurulumu Sorunu

SQL 2005 Developer Edition ya da SQL 2005 Enterprise Edition kurarken,
eğer daha öncesinde bir SQL 2005 Express Edition kurulu ise (elle kurduysak
veya Visual Studio kurulumundan gelen bir SQL 2005 Express Edition varsa)
SQL 2005 Developer Edition veya diğerini kurarken, her nekadar Database Service'leri
kurulsada Management Studio'nun kurulmadığını, kurulumu sadece Management Studio'yu kurmak için
tekrar başlattığımızda ise karşımıza;
"The SQL Server 2005 Express Tools are installed. To continue, remove the SQL Server 2005 Express Tools"
gibi bir hatayı verdiğini ve Management Studio kurulmadığını görürüz.
Bunu aşmak için , Visual Studio 2008 i tekrar kaldırsanız veya SQL'i tamamen kaldırsanız ve tekrar kurmaya çalışsanız
yine aynı sorunla karşılacaksınız. Regedit ile oynarak bu sorun çözülse de ;
Bunu aşmak için "Microsft Windows Installer CleanUp Utility" adında bir tool geliştirmiş.

İlgili tool ; http://support.microsoft.com/kb/290301/en-us adresinden indirilebilir.

İndirdikten sonra tek yapmanız gereken, "SQL 2005 Express Edition Tools" sekmesine tıklayıp "Remove" tuşuna basmak.

Tekrar SQL 2005 Developer Edition kurduğumuzda, Management Studio'nun da kurulduğunu göreceğiz.

İyi çalışmalar :=)

5 Eylül 2008 Cuma

ABAP : TRY ENDTRY kullanimi

Hata yakalama, yazdığımız programın büyüklüğüne göre çok önemli olan bir konudur (aslında her zaman önemlidir ama bakmayın üşeniyoruz :) ). Özellikle ABAP için user-exitleri yazarken veya herhangi bir programımızda hata çıktığında programımızın patlamadan , hataya rağmen çalışmasını istiyorsak TRY ENDTRY bizim için vazgeçilmez bir yapıdır.

Örneğin, sıfıra bölmelerden kaynaklanan hatalarda veya bir Z'li tablomuzun bir satırını güncellerken oluşabilecek problemlerde programın bir şekilde çalışmasını ve ekrana RUN TIME ERROR hatasını getirmesini istemiyorsak
aşşağıdaki yapıyı kullanabiliriz.
Özellikle user-exit yazarken, SAP standart programının patlamasını engelleriz.

REPORT ZTEST_001.

*Örneğin aşşağıda sıfıra bölmeden kaynaklanan bir hata var fakat program
*Run Time Error vermeden çalışmaya devam edecektir.
*Burada ki CX_ROOT , tüm hataları tutabilen genel bir sınıftır.

data: lv_i type i.
data OREF type ref to CX_ROOT.

TRY
lv_i = 10 / 0.
CATCH CX_ROOT into OREF. "burada OREF'in içi CX_SY_ZERODIVIDE olarak dolacaktır.
write 'hata'.

ENDTRY.
write: / 'program devam ediyor'.

3 Eylül 2008 Çarşamba

ABAP : OO ALV'de yapilan degisiklikleri yakalama

Herhangi bir screende kullanacağımız OO ALV'nin düzenlenebilir sütunlarında herhangi bir değişiklik yaptığımızda , yakalamak için kullanacağımız basit bir metod mevcut.

    CALL METHOD cl_alv_dilim->check_changed_data.

Burada ki cl_alv_dilim , bizim 

Data: 
 cl_alv_dilim TYPE REF TO cl_gui_alv_grid.

şeklinde tanımladığımız GRID'in adı. Dikkat etmemiz gereken, bu metodun çalışması için bir screendeki  container için sadece bir ALV eşleştirmek , aksi halde bu metod çalışmayacaktır. Yani bir screendeki bir container için, if koşuluyla birden fazla ALV atarsak bu metod çalışmaz.

Yukarıda ki metod çalıştırıldığında, Internal Table içinin değiştiğini göreceğiz.