28 Ocak 2009 Çarşamba

IFS ekranlarında, tablo içerisindeki herhangi bir alanın çoktan seçmeli olmasını nasıl sağlarım?

IFS içerisinde kullandığımız ekranlarda bazen, bazı alanın değerinin bir liste içerisinden gelmesine ihtiyaç duyabiliriz. Bunu sağlamak için öncelikle değişiklik yapmak istediğimiz alanı Centura da buluruz.
1) Üzerine gelip F8(Üst taraftaki kaydet in sağında ampul şeklindeki ikon) e basınca liste çıkmasını istediğimiz ekranı, Centura da buluruz ve ilgili alanı işaretleriz.
2) Foundation1 Properties butonuna basıldığında aşağıdaki ekran açılacaktır.
3) “Reference” alanına liste için kullanacağımız view ismini yazarız. Bu tür viewlerde son ek olarak LOV (List_of_Value) kullanmak daha uygun bir isimlendirme olacaktır. Örn. OPER_TANIM_LOV
















Centura içerisinde bu değişiklik yeterlidir. Bu noktada karar verilmesi gereken; seçim sonrasında “Reference” alanına girilmiş olan view den, hangi alanın çağıran forma yerleştirileceğidir. Çözüm için alanlara ait comment ler önemlidir. Aşağıda örnek ekranda bu konu açıklanmaktadır.













İlgili view ilgili API içerisine eklenildikten sonra ADMIN.EXE kullanılarak API yeniden execute edilir. Sonra ALTGR + SağMouse kullanılarak aşağıdaki ekrana ulaşılır. Bu aşamada aşağıdaki ekranda açıklana adımlar izlenir.















Son aşamada uygulamanın yeniden derlenmesi de unutulmaması gereken bir konudur :)

26 Ocak 2009 Pazartesi

Veri tipi dönüşümü

String ten sayıya dönüşüm (SalStrToNumber)
******************************************

SalStrToNumber komutunu stringten sayıya dönüşüm
gerekli olduğunda kullanın. Foksiyon otomatik
yuvarlama yapmaktadır.

strString : Sayıya dönüştürmek istene string deger
nNumber : dönüşüm sonucu .

Örn :
Set nNumber = SalStrToNumber ( '100,22' ) !nNumber=100
Set nNumber = SalStrToNumber ( '100,51' ) !nNumber=101
Set nNumber = SalStrToNumber ( '100.51' )
!nNumber=0 çevirme esnasında hata oluşursa 0 dönecektir.

Sayıdan string e dönüşüm
************************
nLength = SalNumberToStr ( nNumber, nDecimalPlaces, strString )
veya
strString = SalNumberToStrX ( nNumber, nDecimalPlaces )

Bir sayıyı string e çevirmek için kullanın


nNumber Number. Dönüştürülecek sayı.
nDecimalPlaces Number. strString e eklenecek virgülden sonraki basamak sayısı.
0 verirseniz sadece tam sayı kısmı dönüştürülecektir.

strString Number tipine dönüştürülen string değer.

nLength , ondalık basamaklar ile beraber strString uzunluğudur.

strString ,nNumber değerinin string e çevirilmiş halidir.


String ten date e dönüşüm
************************

dtDateTime = SalStrToDate ( strString )

String bir değeri date/time değerine dönüştürmek için kullanın.
SalStrToDate fonksiyonu sistem tarih formatını kullanır.
Format sorunu durumlarında SalDateConstruct fonksiyonu
işinize yarayacaktır. Aşağıdaki örneklerde bu fonksiyonda
kullanılmıştır.

Örnek
! Set dDeneme = SalDateConstruct ( nYear, nMonth, nDay, nHour, nMinute, nSecond )
! Aşağıdaki iki satırda dDeneme isimli Date/Time değişkene atama yapılmaktadır.
Set dDeneme = SalDateConstruct ( 2009, 01, 26, 11, 10, 05 )
Set dDeneme = SalStrToDate ( '2009-01-26-10.43.43.480000' )
Call SalDateToStr(dDeneme, df2)

Date ten string e dönüşüm
*************************
nLength = SalDateToStr ( dtDateTime, strDate )

Bir date/time değerini string değerine dönüştürür.
Eğer parametre olarak DATETIME_Null gönderilmiş ise
-1 döndürür.

Parametreler

dtDateTime Date/Time. String e dönüştürülecek değer.

strDate . Dönüştürülmüş string değer.

nLength, dönüştürülen string uzunluğudur.

Örnek:
Call SalDateToStr ( SalDateCurrent ( ), df2 )
!df2 edit box unda şu anki tarih görüntülenir.


Aşağıdaki fonksiyonlar da incelenebilir.
SalFmtFormatDateTime
SalFmtFormatNumber
SalFmtIsValidPicture
SalFmtGetPicture
SalFmtSetPicture

Centura - Değişkenler ve Etki Alanları


Değişken Tanımlama Örnekleri
****************************

Number: nCount

Date/Time: dtBirthday

Boolean: bReturn

String: strName

Long String: strLong

Window Handle: hWndHelp

Sql Handle: hSql

Değişken etki alanı/Variable Evaluation
*******************************************
Centura, önce lokal olarak tanımlanmış değişken olup
olmadığını kontrol eder. Eğer bulamazsa daha üst
kademelerde bulmaya çalışacaktır. Arama aşağıdaki
sırada gerçekleşir.

1. Geçerli window a ait Window Variables bölümü veya
Local Variables bölümü.

2. Geçerli window un içinde oluğu window a ait
Window Variables bölümü; onunda içinde olduğu başka bir
window var ise ... böyle devam eder.

3. Application seviyesindeki global değişken
tanımlama bölümü.

15 Ocak 2009 Perşembe

Centura Operatörleri

Operator Tipleri
*****************
Sayılarla çalışırken kullanılan operatörler
+, -, *, /

Eşitlik Operatörleri
=, !=, >, <, >=, <=

İlişkisel Operatörler
AND, OR, NOT

Bit Operatörleri
& Bit için AND
| Bit için OR

|| String Birleştirme Operatörü

Diğer programa dillerinde de olduğu gibi Centura 'da da
operatör öncelikleri söz konusudur. Fakat kendim de
kullanmadığımdan burada bahsetmeye değer görmüyorum.
Bir ifadenin öncelikli olmasını istiyorsanız parantez
içerisine alın. Hem böylece kodunuz daha okunaklı
olacaktır.

Not : Centurada eşit değil operatörü != operatörüdür.
<> şeklinde bir operatör yoktur.

Bazı örnekler
******************
1) Set sStringBirDeger = 'Merhaba' || ' ' || 'Dünya!'

sStringBirDeger = 'Merhaba Dünya!'

2) If nEldekiStok != 0
SalMessageBox('Stok bulunamadi. İşlem gerçekleştirilemez',
'Hata', MB_Ok);

13 Ocak 2009 Salı

Centura ve Merhaba Dünya !

Message Actions

On SAM_Click
Call SalMessageBox ( 'Merhaba Dünya !','UYARI', MB_Ok )

Aşağıdaki linkten örnek programı indirebilirsiniz.

http://rapidshare.com/files/182795989/merhaba.rar.html

Quick Report Navigator içerisine bir rapor eklemek

1. (ADMIN - Administration - Hızlı Rapor) Aşağıda örneği gösterilen "Hızlı Rapor Oluşturma" ekranında, doğru "Category Description" ile rapor satırı eklenir. "SQL Expression" alanına çift tıklayarak açılan menüye rapora esas olacak SQL text yazılır ve kaydedilir. Parametreli değişkenler SQL içerisinde "&" ile başlar ve rapor çalışma anında değeri otomatik olarak sorgulanır. (Örn : '&personel_id' ) SQL içerisinde fonksiyon ve table oncesinde "ifsapp." Eklenilmeli ve unutulmamalıdır. Aksi taktirde IFSAPP dışındaki kullanıcılarda rapor çalışmayacaktır.

2. (ADMIN - Info Services - Quick Report Navigator) Oluşturulan yeni rapor "quick report navigator" ekranında görüntülenmeye başlayacaktır.

Örnek QRP için sql text :
Select 'A Bu raporda Personel Bilgileri, Personel Prj Bilg.' Açıklama,
null,null,null,null,null,null,null from dual
union
Select 'B _PDKS verileri görünmelidir!' Açıklama,
null,null,null,null,null,null,null from dual
union
select 'Personel Bilgileri : ' Aciklama, EMP_NO Sicil_Prj ,fname ad, lname Soyad,
emp_cat_name Tur, company_office Firma_Giris, pos_code Firma_Cikis,'' Saat
from ifsapp.COMPANY_PERSON_ALL
where person_id='&PERSON_ID'
union
select 'Personel Prj Bilg. :', r.project_id,
ifsapp.PROJ_RESOURCE_GROUP_API.Get_Description(
ifsapp.TRHAK_UTIL_API.Get_Sorumlu_Muhendis
(
r.PROJECT_ID,r.AGGREMENT_NO,r.VENDOR_NO
)
, COMPANY) SorumluMuh, ifsapp.TRHAK_UTIL_API.Get_Sorumlu_Muhendis(r.PROJECT_ID,r.AGGREMENT_NO,r.VENDOR_NO) SorumluMuhSicil ,null,null,null,null
from ifsapp.TRHAK_AGREEMENT_RESOURCE r
where r.resource_id='&PERSON_ID'
union
select '_PDKS Verileri : ', ifs.EMP_NO Emp_No, ifs.FNAME||' '||ifs.LNAME AdSoyad,
ifs.EMP_CAT_NAME Tip,
ifs.NAME8 Gorev,
to_char(pdks.IN_DATE,'dd/mm/yyyy hh24:mi:ss') Giris_Tarih, to_char(pdks.OUT_DATE,'dd/mm/yyyy hh24:mi:ss') Cikis_Tarih,
to_char(((pdks.OUT_DATE - pdks.IN_DATE)*24),'99990.9') Saat
from ifsapp.COMPANY_PERSON ifs,
ifsapp.uzmar_takip_tab pdks
where pdks.EMP_NO = ifs.EMP_NO and company_id ='AS'
and pdks.IN_DATE between to_date('&Bas_Tarih','dd.mm.yyyy') AND to_date('&Bas_Tarih','dd.mm.yyyy')
and ifs.PERSON_ID = '&PERSON_ID'
union
select 'x _PDKS Verileri görünmüyorsa -- İnsan Kaynakları' ,
null,null,null,null,null,null,null from dual
union
select 'x Personel Prj Bilg. sorunlu ise planlama',
null,null,null,null,null,null,null from dual
union
select 'x Personel Bilgileri görünmüyor ise insan kaynakları' ,
null,null,null,null,null,null,null from dual

3. Yeni rapor için role bazında yetki verilmesi aşağıdaki örnek ekranda yapılmaktadır.

ADMIN.EXE - Administrator - Security - Security Permission ekranında raporun hangi kullanıcı grupları tarafından görüntülenebileceği belirlenmelidir. Aksi taktirde kullanıcılar bu raporu görüntüleyemeyecektir.
İlgili role seçildikten sonra aşağıda işaretlenmiş olan "IFS Base Functionaly" altında yeni eklemiş olduğumuz raporu bulup yanındaki kutucuğu işaretlememiz yeterlidir.

Resimli anlatım için aşağıdaki linki kullanabilirsiniz.

http://rapidshare.com/files/182780383/IFS_-_Yeni_Rapor_qrp_.docx.html

SQL update işleminin IFS tablolarındaki uygulaması

Tum IFS viewleri, son iki field olarak objid ve objversiyon
alanlarını içermektedirler. Bu iki alan tüm insert, update ve delete
operasyonlarında kullanılmaktadır. Bu aşamada bu iki alandan biraz bahsedersem
iyi olur diye düşünüyorum.

objid
*****************
rowid değerini içerir ve doğal olarak unique tir. Rowid oracle da
bir satıra ulaşmanın en hızlı yoludur.

objversion
*****************
Satırın, kayıt tarihini içerir.

Örneğin aşağıdaki sql cümlesi bize en son kaydedilmiş olan satırı verecektir.

select max(objversion) from ifs_tablo_adi_neyse_o


IFS kalsik sql DML cümleleri yerine, tablo ile ilgili insert, update,delete ve başka gerekli işlemleri yapan function ve procedure leri bulunduran packageler kullanır ve bunlara IFS API denilir veya ben oyle diyorum :)

Yani API her tabloya özel bir oracle package sini ifade eder. Sistemde
pek çok API mevcuttur.

tablo adı : PURCHASE_PART_SUPPLIER_TAB
view : PURCHASE_PART_SUPPLIER
package : PURCHASE_PART_SUPPLIER_API

Bir IFS API, tablonun her satırının hangi değerleri alabileceğini, hangi alanların zorunlu olduğunu, ilk değerlerin neler olduğunu vs. belirleyen kuralları
ve diğer IFS gerekliliklerini içerisinde barındırır.
IFS API, eklenen, silinen veya güncellenen kaydın sistem içerisinde
tutarlı kalmasını garanti altına alır. Bu nedenle insert, update, delete işlemleri
mutlaka api ler kullanılarak gerçekleştirilmelidir. Vakit bulunca IFS API leri ile ilgili daha ayrıntılı başka bir yazı da hazırlamayı düşünüyorum.

Örneğin

update ifs_tablo_adi set field1=24 where keyfield=1

şeklinde sql cümlelerinin çalıştırılması tutarlılığı olumsuz yönde etkileyecektir.


objversion ve objid kullanarak update işleminin gerçekleştirilmesi
*******************************************************************
declare
info_ VARCHAR2(2000);
objid_ VARCHAR2(2000);
objversion_ VARCHAR2(2000);
attr_ VARCHAR2(2000);
begin
objid_ := 'AAAQ06AAFAAAGJcAAB';
objversion_ := '20080926143437';
Client_SYS.Clear_Attr(attr_);
Client_sys.Add_To_Attr('LIST_PRICE','160',attr_);
ifsapp.PURCHASE_PART_SUPPLIER_API.Modify__(
info_, objid_, objversion_, attr_, 'DO'
);
end;

Centura ile ilgili kaynak

Centura dili ve bileşenlerle ilgili temel bilgilere aşağıdaki linkten ulaşabilirsiniz.

http://support.unify.com/Docs/TeamDeveloper/dev.pdf

Ayrıca unify.com adresinden , diğer faydalı dökümanları da edinmeniz mümkündür.

Aşağıdaki haber gruplarına üye olmanızı şiddetle tavsiye ederim.

newsgroup.guptaworldwide.com
talkto.guptaworldwide.com