4 Aralık 2007

Intersystems Cache - Collections (list)

Collection bir elemana ait bir grup veriyi saklamak için kullanılır. Bu veriler herhangi bir tipte olabilir. Cachede iki çeşit collection vardır. Array ve list collectionlar.

List tipindeki collectionun tanımlaması ;

Property renkler As %String[collection=list]

Burada renkler adında string tipinde bir property tanımlanıyor. Ayrıca bunun list tipinde bir collection olarak tutulacağı belirtiliyor.

Classtaki bir elemanın renkler collectionuna veri eklemek için aşağıdaki komut kullanılır.

D ZOBJ.renkler.Insert("kırmızı")

Elemana ait collectiondaki bilgileri okumak için aşağıdaki döngü kullanılabilir.

F Z=1:1:ZOBJ.renkler.Count() W !,ZOBJ.renkler.GetAt(Z)

2 Ekim 2007

Javascript ve Json İle Veri İşleme

Json son günlerde oldukça popüler olmaya başlayan bir veri aktarma standardı. Aslında tüm gücünü javascriptten alıyor. Eğer javascript deneyiminiz varsa hiç yabancılık çekmeyeceksiniz. Fakat şimdiden söyleyeyim XML in yerini almasını beklemeyin ama çoğu işinizi kolaylaştıracağı kesin. Json hakkında daha detaylı Türkçe bilgi için tıklayınız.

// İşlemek istediğim veri.
var zogrenciler='[{numara:1,adi:"Ali",yas:function(){return 20;}},{numara:2,adi:"Ayse",yas:function(){return 19;}},{numara:3,adi:"Veli",yas:function(){return 20;}}]';

// Json veriyi parse ediyor.
var zjson = eval ("(" + zogrenciler + ")" );

var zhtml="";

// Jsondaki her bir elemandan geciyor.
for(var i = 0;i<zjson.length;i++){

// Her bir elemana ait bilgileri liste oluşturmak için kullanıyor.
zhtml+="<li>"+zjson[i].adi+" ("+zjson[i].numara+")("+zjson[i].yas()+" yasinda)";

}

// Çıktıyı oluşturuyor. self.document.getElementById("ogrenciler").innerHTML="<ul>"+ zhtml + "</ul>";

27 Eylül 2007

Intersytems Cache Soap Mesajlasma ve Null Sorunu

Cache ile soap mesaj iletisimi yapiyorsaniz ve gonderdiginiz mesajlarda null gonderilmesi gereken degerler varsa, default olarak bunlar gonderilmez. Ornegin gondermek istediginiz bilgiyi ZOBJ.ADI="" yada ZOBJ.ADI=$C(0) yada ZOBJ.ADI=$c(-1) olarak set etseniz bile olusturulan xml mesajinda bu saha yer almaz. Null degerlerin xml mesajinda yer almasi icin class tanimlamasina asagidaki parametrenin eklenmesi gerekir.

Parameter XMLIGNORENULL = 1;

27 Temmuz 2007

Intersystems Cache List Komutlari

Cache icinde bir grup string v.b. bilgiyi toplu halde tutabilmeye ve daha sonra bunlari kullanmaya yarayan bir takim komutlar vardir. Bunlar ;

$LISTBUILD : Grubu olusturur

S ZL=$LISTBUILD("ALI","VELI","AHMET","MEHMET")

ZL degiskeninde 1 den baslayip her eleman icin 1 artan bir sira numarasi ile grup olusturulur. Gruptaki bir elemana ulasmak icin ;

W !,$LIST(ZL,2) yada
W !,$LISTGET(ZL,2) kullanilabilir.
W !,$LG(ZL,2)

Bunlarin birbirinden farki $LIST de verilen numarali eleman grup icinde yoksa hata olusur. $LISTGET de hata olusmaz sonuc null doner.

Bir grupta kac tane eleman oldugunu bulmak icin ;

W !,$LISTLENGTH(ZL)
W !,$LL(ZL)

Gruptaki bir elemanin hangi numarada oldugunu bulmak icin ;

W !,$LISTFIND(ZZ,"ALI")
W !,$LF(ZZ,"ALI")

Grupta bir elemanin numaraya gore olup olmadigini bulmak icin ;

W !,$LISTDATA(ZZ,3)
W !,$LD(ZZ,3)
Burada 3. eleman varsa 1 doner, yoksa 0 doner.

Gruplar ic ice kullanilabilir ;

S ZZ=$LB($LB("SARI","LACIVERT"),$LB("SARI","KIRMIZI"))

Bir grubun tum elemanlarini ekrana yazdirmak icin ;

F Z=1:1:$LL(ZZ) W !,$LG(ZZ,Z)










Powered by ScribeFire.

25 Mayıs 2007

Java Applet de Browser Penceresi Acmak


public void PencereAc(String zadres) {
try {
getAppletContext().showDocument(new URL(zadres),"_blank");
} catch(Exception e) {
System.out.println(zadres+" acilamadi");
}
}

28 Nisan 2007

Intersystems Cache ile Ftp islemleri


Cache ftp işlemlerini gerçekleştirmek için dahili bir sınıfa sahiptir. Bu sınıf sayesinde ftp işlemleri kolayca gerçekleştirilir.

; Öncelikle bu sınıfa ait bir nesne oluşturuyorum
S ZFTP=##class(%Net.FtpSession).%New()

; time out suresini ayarliyorum
S ZFTP.Timeout=100

; baglantiyi sagliyorum
; parametreler : host,username,password,port (default 21)
S ZSTAT=ZFTP.Connect("192.60.60.60","ftpuser","ftppass",21)
I 'ZSTAT
S ZERR="Baglanamadi" Q

;Eger baglandiktan sonra dizin degistirmek istiyorsam
S ZSTAT=ZFTP.SetToParentDirectory() ; ana dizine gecer
S ZSTAT=ZFTP.SetDirectory("C:\FTPROOT\TEST") ; belirtilen dizine gecer
I 'ZSTAT S ZERR="Dizin degistirilemedi" Q

;Dizindeki dosyalarin listesini almak istiyorsam
; Burada ilk parametre olarak hangi dizindeki dosya listesi alinacagi verilmeli. Windows sorunsuz calisiyor ama , unix sistemlerinde bu gerekebiliyor. ZLIST array sinifina ait olarak hazir gelir. Onceden tanimlamaya gerek yok.
S ZSTAT=
ZFTP.NameList("",.ZLIST)
I 'ZSTAT S ZERR="Dosya listesi alinamadi" Q
S Z="" F S Z("FILE")=ZLIST.GetNext(.Z) Q:(Z="") W !,Z("FILE")

;Dizindeki dosya yada dosyalari kendi makinama cekmek icin
S ZSTREAM=##class(%Library.GlobalCharacterStream).%New()
S ZSTAT=ZFTP.Retrieve("karsidakidosyaadi.txt",ZSTREAM)
I 'ZSTAT S ZERR="Dosya acilamadi" Q
S ZFILE=##class(%Library.File).%New("C:\"_ZFILE)
D ZFILE.Open("WSN")
D ZFILE.CopyFrom(ZSTREAM)
D ZFILE.Close()
D ZSTREAM.%Close()

;Karsi taraftaki bir dosyayi silmek icin ;
D ZFTP.Delete("karsidakidosyaadi.txt")

;Oturumu kapatmak icin
D ZFTP.Logout()

Ftp icin kullanilan bu nesnenin tum metotlari boolean dondurur. Ben bu durumu ZSTAT degiskeni ile kontrol ediyorum ve hata mesajini kendim olusturuyorum. Fakat hatanin neden kaynaklandigini ogrenmek istiyorsam, ReturnMessage degerini kontrol edebilirim. Bu baglandigim hosttan donen mesaji verir. Hata mesajim su sekilde olabilirdi ;

S ZERR=ZFTP.ReturnMessage

Ftp icin onemli ozelliklerden biriside transfer tipidir. Iki farkli deger alabilir Ascii ve Binary. Text dosyalar transfer edilirken Ascii tipi onerilmektedir.
Mevcut transfer tipini ogrenmek icin ;

W ZFTP.Type

Ascii moda gecmek icin
S ZSTAT=ZFTP.Ascii
I 'ZSTAT S ZERR="Ascii moda gecilemedi"

Binary moda gecmek icin
S ZSTAT=ZFTP.Binary
I 'ZSTAT S ZERR="binary moda gecilemedi"

Oturum acildiktan sonra kullanici degistirilmek istenilebilir. Bu durumda
S ZSTAT=ZFTP.ChangeUser("yenikullanici","yenipass")

Ftp serverin durumunu ogrenmek icin ;
S ZSTAT=ZFTP.Status(.ZMSG)
I ZSTAT W ZMSG,!

Ftp server sistemi hakkinda bilgi almak icin;
S ZSTAT=ZFTP.System(.ZMSG)
I ZSTAT W ZMSG!,

24 Mart 2007

Cache Ile Basit Bir Ajax Uygulamasi

Bu uygulamada sayfada bir text kutusu ve ara dugmesi yer alacak, ara dendigi zaman kriterlere uygun sehirleri listeleyecek. Oncelikle SEHIRKODU ve SEHIRADI propertylerine sahip KOD.SEHIR adinda bir class olusturalim. Sonra soyle bir ekran tasarlayalim ;
Arama sonuclarini gosterebilmek icin sonuc adinda bir div yerlestirmemiz gerekiyor. Ara dugmesine tiklaninca calisacak fonksiyon asagida ;
 function ara(zval) {
var zsnc=#server(..ara(zval))#;
var zobj=self.document.getElementById("sonuc");
zobj.innerHTML=zsnc;
}
ve bu fonksiyonun baglantili oldugu server metodumuz ;

Sonuc ;

20 Mart 2007

Cachede Bir Sorgu Calistirmak

Önce sorgu sınıfımızı tanımlıyoruz ;
S RS=##class(%Library.ResultSet).%New()

Sorgumuzu hazırlıyoruz ;
D RS.Prepare("SELECT * FROM TEST.HASTALAR")

Sorgumuzu calıştırıyoruz. ;
D RS.Execute()

Sonuçları ekrana yazdırıyoruz ;
WHILE (RS.Next()) {
W !,RS.GetData(1)
}

Technorati Tags: , , ,

15 Mart 2007

Javascript ile Div'i yatay ve dikey ortalama

Öncelikle div elemanını alalım.
var zobj=self.document.getElementById(zid);

Görünür yapalım.(tabi eğer değilse. offsetHeight değerini alabilmek için gerekiyor.)
zobj.style.display="block";

Genişliğini ve yüksekliğini bulalım.
var zw = parseInt(zobj.style.width);
var zh = zobj.offsetHeight;

Pencerenin üst noktasının olması gereken yerini hesaplayalım.
var zt = ((screen.height/2)-(zh/2))/2;

Üst kısmını ayarlayalım.
zobj.style.top=zt+"px";

Sol tarafı ayarlayalım.
zobj.style.left=(screen.width-zw)/2;

10 Mart 2007

Cache Terminalde Namespace Degistirmek



Cache Terminalde bulundugunu namespacaden bir baskasina gecmek icin ;



USER> "DIGERNS"



yada lokal bior degisken yardimi ile ;



USER> S ZYENI="DIGERNS" ZN ZYENI





Technorati Tags:

8 Mart 2007

Cache ve Karakter Streamlar

Yeni bir nesne oluşturuyorum;
   S ZSTREAM=##CLASS(%Library.FileCharacterStream).%New()

İçeriğini okumak istediğim dosya adını giriyorum;
   S ZSTREAM.Filename="C:\deneme.txt"

While yardımı ile önce karakterleri bir lokal değişkene alıyorum, sonra ekrana yazdırıyorum;
   WHILE ('ZSTREAM.AtEnd) {
S ZSTR=ZSTREAM.ReadLine()
W !,ZSTR
}

İşim bitti nesneyi kapatıyorum.
   D ZSTREAM.%Close()

4 Mart 2007

Cache Property Erisim

Once Asagidaki Classi olusturuyorum.

Class TEST.HASTA Extends %Persistent [ ClassType = persistent, ProcedureBlock ]
{
Property ADI As %String;
Property SOYADI As %String;
}

terminalde ;
S ZOBJ=##class(TEST.HASTA).%New()
S $ZOBJPROPERTY(ZOBJ,"ADI")="TESTAD"
S $ZOBJPROPERTY(ZOBJ,"SOYADI")="TESTSOYAD"
;
W !,$ZOBJPROPERTY(ZOBJ,"ADI")
W !,$ZOBJPROPERTY(ZOBJ,"SOYADI")

1 Mart 2007

Java ile Bir Text Dosyanin Icerigini Okumak

Burada try-catch blogu kullanarak olasi hatalara karsi programi korumus oluyoruz. Eger dosya ile ilgili bir sorun cikarsa, konsola file not found yazacak. Ayrica import java.io.*; eklemeyi unutmayin.

public static void main(String[] args) throws IOException
{
FileInputStream zfile;
try {
zfile = new FileInputStream("c:\\deneme.txt");
} catch(FileNotFoundException e) {
System.out.println("File Not Found");
return;
}
while (zfile.available()>0) {
System.out.print((char) zfile.read());
}
zfile.close();
}

Java ile Konsoldan Bilgi Girdisi Saglamak

Javada bu isi yapmak icin bir komut yok, streamlari kullanarak bir yontemde siz gelistirebilirsiniz. Asagidaki kodun calismasi icin import java.io.*; satirinin eklenmesi gerekiyor.

public static void main(String[] args)
throws IOException
{
char zc;
BufferedReader zbr = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Giris Yapiniz (^-cikis) : ");
do {
zc=(char) zbr.read();
} while(zc!='^');
}
}

27 Şubat 2007

Java ile extends kullanımı

Extends bir sınıfın bütün elemanlarına nesne oluşturmadan direk erişim amacıyla kullanılıyor. Aşağıdaki örnekte Matematik sınıfı iki sayı arasında 4 işlem yapan metotlara sahip. Matematik2 sınıfı ise extends Matematik ile, Matematik sınıfının tüm metotlarını içine alıyor ve birde 3 sayı arasında toplam yapan metot tanımlıyor. Sonuç olarak Matematik sınıfının tüm metotlarını kullanmak için (tabiki erişim kontrolüne göre) Matematik2 sınıfında bir nesne oluşturmam yeterli.

public class MatematikTest extends Matematik {
// deneme icin kullanacagim main metodu
public static void main(String args[]) {
// deneme icin iki tane nesne bir Matematik digeri Matematik2
Matematik MatTest = new Matematik();
Matematik2 MatTest2 = new Matematik2();
// Bolme Yaptiriyorum 1. version
System.out.println(MatTest.Bolum(10,1));
// Toplama 1. version
System.out.println(MatTest2.Toplam(1,2));
// Toplama 2. version (Buraya dikkat!)
System.out.println(MatTest2.Toplam(1,1,2));
// Carpma 1. version
System.out.println(MatTest2.Carpim(5,6));
// Carpma 1. version
System.out.println(MatTest.Carpim(1,9));
}
}
// once iki sayi arasinda 4 islem yapan bir sinif olusturuyorum.
class Matematik {
public int Toplam(int sayi1,int sayi2) {
return (sayi1+sayi2);
}
public int Fark(int sayi1,int sayi2) {
return (sayi1-sayi2);
}
public int Carpim(int sayi1,int sayi2) {
return (sayi1*sayi2);
}
public float Bolum(float sayi1,float sayi2) {
if(sayi2>0) {
return (sayi1/sayi2);
} else {
return 0;
}
}
}
// 3 sayi arasinda toplama islemi yapan bir sinif olusturuyorum.
// bu sinif extends'i Matematik sinifi
class Matematik2 extends Matematik {
public int Toplam(int sayi1,int sayi2,int sayi3) {
return (sayi1+sayi2+sayi3);
}
}

24 Şubat 2007

Javascript ile yapılandırıcılar (constructors)

 function Dikdortgen(zuzun,zkisa) {
this.uzun = zuzun;
this.kisa = zkisa;
this.Alan = Alan;

function Alan() {
return (this.uzun * this.kisa);
}
}

var benimKutu = new Dikdortgen(3,5);
alert(benimKutu.Alan());

Javascript ile basit nesneler

   // basit nesne tanimlama
function Kopek() {
alert("hav hav");
};

// var anahtari ile nesne tanimlama
var Kedi = function() { alert("miyav"); };

// var anahtari ile nesne 2
var Esek = new function(){ alert("ai ai"); };

// tanimlanan nesneleri metot olarak kullanma;
Kedi();
Kopek();

// biraz daha gelismis bir nesne tanimlama
function Hayvanlar() {
this.Kedi = Kedi;
this.Kopek = Kopek;

function Kedi() {
alert("miyavvvvvvvvvvvv");
}

function Kopek() {
alert("hirrrrrrrrr hav hav");
}
}

// nesneyi kullanmak icin alma
var benimHayvanlar = new Hayvanlar();

// nesneye ait bir metodu kullanma
benimHayvanlar.Kedi();

Java ve Asal Sayılar

Java ile 1 den 10 e kadar olan asal sayilarin ekrana yazdirilmasi. Asal sayi
sadece bire ve kendisine bolunebilen sayilardir.

public class Asal {

public Asal() {
}

public static void main (String args[]) {
int sayac1;
int sayac2;
boolean asal;
for(sayac1=1;sayac1<=100;sayac1++) {
asal = true;
for(sayac2=2;sayac2<sayac1;sayac2++) {
if(sayac1%sayac2==0){asal=false;break;}
}
if(asal==true){System.out.println(sayac1);}
}
}
}

Java ve Yapılandırıcılar

Programinizda yeni bir nesne olustururken, bu nesnenin bazi ozelliklerini olusma aninda belirmek isteyebilirsiniz. Burada yapilandiricilar devreye giriyor.
public class Kopek {
// kopek sinifi icin adi alani olusturuyorum.
String Adi;

// Bu sinif icin bir yapilandirici tanimliyorum.
Kopek(String zad) {
Adi = zad;
}
// Bu sinif icin bos bir yapilandirici tanimliyorum.
// eger ilk etapta ozellik belirlemeden nesne olusturacaksam
// bu kullanilacak.
Kopek() {
}

public static void main (String args[]) {
Kopek kpkBobi = new Kopek("bobi");
Kopek kpkPotuk = new Kopek();
kpkPotuk.Adi = "potuk";
System.out.println(kpkBobi.Adi);
System.out.println(kpkPotuk.Adi);
}
}