Centura etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Centura etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

17 Şubat 2011 Perşembe

IFS - Centura debug videosu download adresi güncelleme

Aşağıdaki adresten download edilebilir.

http://rapidshare.com/files/448429217/centura_debug.rar

27 Ekim 2010 Çarşamba

Oracle shared server opsiyonu ve IFS

Geçenlerde, IFS ERP uzmanı olarak çalışmaya devam eden arkadaşlarımdan birisi aradı.
Garip bir sorunundan bahsetti.

Problem oluşan sistem özellikleri
----------------------------------------
windows 2008 server 32 bit
8 gb ram
100+ acık kullanıcı connection
vs.

Problem Açıklaması
----------------------------------------
Database e belirli bir sayı üstü kullanıcı bağlandığında sistem yeni connection isteklerine
cevap vermiyormuş. Ta ki bazı connectionlar kapatılıncaya kadar.
Bu sorun oluştuğu anda ise sistem ram inin 2.6 gb gibi bir kısmı yani yarıdan az kısmı kullanılıyormuş.


Hımmm.

Oracle database e bağlanma sürecine biraz daha yakından bakacak olursak;

Oracle listener, her dedicated session için server tarafında bir dedicated server process
oluşturur(veya oluşturmaya çalışır). Bu oluşturulan process belirli miktarda bellek kullanır.
32 bit işletim sistemlerinde oracle, 2.5-3 gb civarının üstünde ram
kullanamadığından bu sorun oluşuyor. (2.5 - 3 gb den fazla ram kullanamama sorunu,
oracle dan değil 32 bit mimariden kaynaklanıyor yanlış anlaşılmasın )

Şimdi bir kere en iyi çözüm 64 bit işletim sistemine oracle kurmak ve gerekiyorsa sisteme ram eklemek.
Sonrada gerekli Oracle memory parametrelerini set etmek.

İkinci en iyi çözüm shared server opsiyonunu aktifleştirmek. Çünkü bu şekilde
her yeni connection için yeni bir dedicated server açılmayacak. Dolayısıyla memory
dolmayacak. Ama yoğun data kullanan kullanıcıların biraz daha yavaş çalışması duruma göre söz konusu.

Peki IFS ortamında nasıl yaparız bu
oracle shared server ı aktifleştirme işini?
------------------------------------------
1) Server parametrelerinde değişiklikler

alter system set shared_servers=10;
alter system set dispatchers='(PROTOCOL=TCP)';

Yukarıdaki sql statement lerini çalıştırdıktan bir süre sonra tns yöntemi dışı tüm bağlantılar
shared olmaya başlayacaktır.

Bu durumu aşağıdaki query ile de inceleyebilirsiniz.
SERVER sütünu SHARED ve NONE olan bağlantılar shared bağlantılardır.

select username,server from v$session order by server desc

Oracle parametrelerini burada sadece memory ye set ettik yani
database restart ında shared server konfigurasyonumuz yok olacak.
Parametrelerin kalıcı olması için testlerin ardından parametre dosyası güncellenebilir.

2) Client tarafında değişiklikler

IFS teki(Centura desek daha doğru) bağlantı tanımları runtime klasörü altındaki sql.ini dosyasından yapılıyor.
Bu dosya içerisinde, [oragtwy] tiketi altındaki remotedbname değerleri
bizim database bağlantılarımız.Örneğin sql.ini dosyamız aşağıdaki gibi olsun.

[oragtwy]
longbuffer=32760
fetchrow=20
maperror=OFF
substitute=SYSSQL.,
remotedbname=gercek,@//bizim_server_name_veya_ip:1521/bizim_sid

yukarıdaki 1. adımdaki server parametreleri set edildikten sonra,
buradaki "gercek" bağlantısından bağlanan tüm yeni client bağlantıları,
shared server connection u açarlar.

Burada bir sorun var .Tüm kullanıcı bağlantıları shared oldu. Fakat ben
bazı kullanıcılarımın performans açısından shared değil dedicated bağlanmasını
istiyorum diyebilirsiniz.

İşte bunu sağlayabilmek için sql.ini dosyasındaki, remotedbname imizi aşağıdaki
gibi değiştirmeliyiz.

remotedbname=gercek,@//bizim_sid

Buradaki bizim_sid, tnsnames.ora dosyasındaki tns ismidir.

Bu noktadan sonra bağlantının shared veya dedicated olması oracle client tnsnames dosyasına bağlıdır.

Dedicated için, aşağıdaki gibi bir tnsnames.ora tanımlaması olabilir.
Burada "SERVER=dedicated" olan bölümü "SERVER=shared" yaparsak bağlantı shared oluşturulmaya çalışılır..
Böylece her kullanıcıya, kendini bilgisayarıdaki tnsnames.ora da gerekli ayarları yaparak,
shared mı yoksa dedicated mı bağlantı yapacağı tanımlanabilir.

bizim_sid=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=bizim_server_name_veya_ip)
(PORT=1521)
)
(CONNECT_DATA=
(SERVER=dedicated)
(SID=BIZIM_SID)
)
)


Burada anlattıklarıma temel olan oracle versiyonları 10g ve 11g.
Ayrıca ASMM(Automatic Shared Memory Management 10g) veya
AMM(AutomaticMemory Managemet 11g) özelliklerinin aktif olduğunu varsaydım.
Bu varsayımımım yanlışsa, large_pool değerinin 50 mb civarı olarak, shared server konfigurasyonundan önce
ayarlanması gereklidir.Bu değer de duruma göre arttırılabilir.

Daha eski versiyonlar için farklı database configurasyonu gerekli olabilir.

Daha fazla bilgi için aşağıdaki bağlantılar da incelenebilir.

http://barisakverdi.blogspot.com/2010/10/oracle-shared-server-opsiyonu.html
http://barisakverdi.blogspot.com/2010/10/oracle-shared-server-konfigurasyonu.html
http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/manproc001.htm
http://download.oracle.com/docs/cd/B10500_01/network.920/a96580/connect.htm
http://download.oracle.com/docs/cd/B10500_01/network.920/a96580/mts.htm
http://www.dba-oracle.com/t_mts_multithreaded_servers_shared.htm

4 Haziran 2010 Cuma

IFS ortamının (Database,executable,develeoper vs) VMWARE üzerinde çalışır hale getirilmesi mümkün müdür?

Evet mümkündür. Bu şekilde çok ta işlevsel bir test sistemi oluşturulmuş olur.
Bazı firmaların production da bu tip sistemleri kullandığı da görülmedik bir şey değil LinkedIn gruplarından anladığım kadarı ile.
Tüm sistemin yedeğini almak için sanal makinayı kapatıp birkaç dosyanın kopyalanması çok cazip geliyor.
Örneğin 0-50 kullanıcı sayılı nispeten küçük database li bir production sistemi
bence vmware e de taşınabilir.

Taşıma işlemi aşağıdaki adımlardan oluşur.

1. Vmware üzerine, production da çalışan işletim sisteminin aynısı ve aynı versiyon oracle db kurulur.
Burada dikkat edilmesi gereken iki nokta vardır.
a. db create edilirken production daki oracle_sid neyse aynısını vermek gerekir.
b. Kurulan işletim sistemi ve oracle versiyonları production da kullanılanların aynısı olmalıdır.

2) Production ve vmware database kapatılır ve oracle dosyaları (datafile,redolog,controlfile vs) vmware üzerine aynı klasör yapısı ile kopyalanır.

3) Vmware üzerindeki database açılır ve IFS kurulum klasoru wmware içerisine kopyalanır ve install edilir.

4) Kullanılan exe, apx,api ne varsa onlar da aynı klasor yapısı ile vmware üzerine kopyalanır.

3 Mayıs 2010 Pazartesi

IFS kullanıcı grubu

Merhaba

Uzun zamandır IFS kullanıcılarının birbirleriyle bilgi/deneyim paylaşabilecekleri
bir platform olması gerektiğini düşünüyordum. Eminim bunu tek düşünen ben değilim :)
Artık böyle bir platform var. Tabi aktifliği Türkiye deki IFS kullanıcılarına bağlı olacaktır.

IFS ERP Turkiye Kullanici Grubu
http://www.linkedin.com/e/vgh/3012612/

Her ne kadar artık IFS developer/admin/user olmadığımı onceki postlarımda belirtmiş olsam da, zaman zaman bazı arkadaşların soruları mail kanalıyla gelmeye devam ediyor.
Düşündüm ki sorularımızı ve cevaplarımızı LinkedIn üzerine yazarsak, daha fazla kişinin deneyimlerinden faydalanabiliriz veye başka arkadaşlara da faydamız olabilir.

Saygılar.
Barış

9 Kasım 2009 Pazartesi

IFS-Centura Debug Videosu (Rapidshare Link)

http://rapidshare.com/files/304386557/centura-debug.rar

Ulaşılamayan linkler ile ilgili mail atarsanız
yenilerini burada yayınlayacağım.
Ayrıca sorularınız ile ilgili
cevapları da burada bulabilirsiniz.

8 Ekim 2009 Perşembe

Centura - Kaydetme öncesi kontrol

Kaydet butonuna basıldığında önce bir kontrol gerçekleştirmek istiyorum. Duruma göre kaydedilecek veya bir mesaj gösterilecek ve kaydetme iptal edilecek. Nasıl yaparım ?
Önce ihtiyacımız olan değişkenleri forma ekleyelim.
Number: nDegerListesindeKacTaneVar
Boolean: bBasariliMi

İlgili cTableWindow veya cFormWindow 'a ait "action" tabına eğer önceden eklenmediyse On PM_DataSourceSave olayı eklenilir. Önceden bu olaya kod yazılmış ise değişiklik yapılır.Şimdi de bu gereklilikleri gerçekleştirelim.
On PM_DataSourceSave
! kod buradan basladi
Select Case wParam
Case METHOD_Execute
Set bBasariliMi = DbPLSQLBlock(c_hSql,"
BEGIN
SELECT count(*)
INTO :frmShopOrd.nDegerListesindeKacTaneVar
FROM &AO.UZMAR_OPER_TANIM_LOV
WHERE tanim =:tbwShopOrderOperation.colOperationDescription;
END;")
If bBasariliMi
If nDegerListesindeKacTaneVar < 1
Call SalSendClassMessage (PM_DataSourceSave, wParam, lParam )
! kod burada bitti

Centura - Tablomda veri var mı?

Aşağıdaki örnekteki fonksiyonu kullanarak,
herhangibir cTableWindow veya cChildWindow
içinde satır olup olmadığı test edebilirsiniz.

If SalTblAnyRows( mytablename, 0 , 0 )
..çeşitli işler..

SalTblAnyRows( mytablename, 0 , 0 ) : bu satır eğer data varsa TRUE döndürecektir.

Centura - TableWindow Refresh

Table window

refresh
*****************************
!!CB!! 174
Call tbwEngPartStructureConsistOf.DataSourceRefresh( METHOD_Execute )

CENTURA - TableWindow a süzerek data getirme

On SAM_Click
Set sOlusturulanSql = "doc_class = 'EYS' "
! ---------------------------------------------------------------------
! ---------------------------------------------------------------------
Call SalSendMsg( tbwUzmarDocIssues, PM_DataSourceUserWhere, METHOD_Execute, SalHStringToNumber( sOlusturulanSql ) )
Call SalSendMsg( tbwUzmarDocIssues, PM_DataSourcePopulate, METHOD_Execute, 0 )

Centura - Tablomda veri var mı?

Aşağıdaki örnekteki fonksiyonu kullanarak,
herhangibir cTableWindow veya cChildWindow dan
miras alınarak yapılmış object içinde
satır olup olmadığı test edebilirsiniz.


If SalTblAnyRows( mytablename, 0 , 0 )
..çeşitli işler..


SalTblAnyRows( mytablename, 0 , 0 ) : bu satır eğer data varsa TRUE döndürecektir.

Centura - TableWindow un kaçıncı satırındayım?

TableWindow.RecNo
------------------------
nContext = SalTblQueryContext ( hWndTbl )

Centura - Tarih

Örnek
******************************************
!!CB!! 173
On SAM_Click
If SalIsValidDateTime(df1)
Set df1 = SalFmtFormatDateTime ( (SalStrToDate(df1) + 1), 'dd.MM.yyyy' )
Else
Call SalMessageBox('Girilen tarih gg.aa.yyyy formatında olmalıdır. (Örn.

01.11.2010)','HATA!',MB_Ok)
Call SalSetFocus ( df1 )


Bir sonraki günü nasıl bulurum?
*******************************
Set dDateDegisken = dDateDegisken + 1

Yukarıdaki komut satırı,
dDateDegisken içerisindeki tarihe bir gun
eklenmesini sağlayacaktır.




Bir string değerin valid bir tarih olup
olmadığını nasıl test edebilirim ?
*****************************************
If SalIsValidDateTime(df1)
.......gecerli bir tarih degeriyse yapilacak cesitli isler
Else
.......gecerli bir tarih degeriyse yapilacak cesitli isler




Bir tarih değerini istenen formatta
nasıl yazdırabilirim?
********************************************
Set df1 = SalFmtFormatDateTime ( dBirDate ), 'dd.MM.yyyy' )




KULLANILABİLECEK FORMAT AÇIKLAMALARI
**************************************************************

Valid date/time picture format values:

Value Item Appearance
M month 1-12
MM month 01-12
MMM month Jan-Dec
MMMM month January-December
d day 1-31
dd day 01-31
ddd day Mon-Sun
dddd day Monday-Sunday
yy year 00-99
yyyy year 0000-9999
hh hour 1-12
hhhh hour 0-24
mm minutes 0-59
ss seconds 0-59
mmmmmm microseconds 000000-999999
AMPM AM/PM The AM/PM indicator
Examples of date/time picture format mappings:

Date/Time Picture Meaning
d MMMM, yyyy 9 January, 1992
dddd, MMMM d, yyyy Friday, February 7, 1992
M/d/yy 3/18/92
dd-MM-yyyy 18-03-1992
d “of” MMMM, yyyy 9 of January, 1992
M/d/yy-hh.mm.ss AMPM 2/3/92-12.23.15 AM

Centura - Form açılışında label a tarih yazmak

On SAM_Create
...Set df1 = SalFmtFormatDateTime ( SalDateCurrent() , 'dd.MM.yyyy' )
...Call SalSendClassMessage ( SAM_Create, wParam, lParam )

Centura - Veri tipi dönüşümleri

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

1 Temmuz 2009 Çarşamba

Developing with SQLWindows

"Developing with SQLWindows"
dökümanını aşağıdaki linki kullanarak indirebilirsiniz.

You can download "Developing with SQLWindows" document
via following link.


http://rapidshare.com/files/250572193/dev.pdf.html

Introducing Centura Team Developer

"Introducing Centura Team Developer"
dökümanını aşağıdaki linki kullanarak indirebilirsiniz.

You can download "Introducing Centura Team Developer" document
via following link.

http://rapidshare.com/files/250571312/intro.pdf.html

Centura SQLWindows Function Reference

"Centura SQLWindows Function Reference"
dökümanını aşağıdaki linkten indirebilirsiniz.

You can download "Centura SQLWindows Function Reference" document
via following link.

http://rapidshare.com/files/250570109/Funcref.pdf.html

30 Nisan 2009 Perşembe

Nasıl TableWindow kolonunun arka plan rengi değiştirilir?

TableWindow kolonuna ait arkaplan rengini değiştirmek için XSalTblSetColumnBackColor
fonksiyonu kullanılabilir. Bu fonksiyon xsal2_32.dll içerisindeki tablewindow
external fonksiyonlarından birisidir. External fonksiyonlar arasında olmaması durumunda aşağıdaki kod ile kolayca ekleyebilirsiniz.

!!CB!! 145
Function: XSalTblSetColumnBackColor
Description: BOOL XSalTblSetColumnBackColor(
HWND p_hwndCol,
COLORREF p_cBackColor );
Export Ordinal: 0
Returns
Boolean: BOOL
Parameters
Window Handle: HWND
Number: LONG



Bu fonksiyon kullanılarak aşağıda verilen kod orneğini değiştirerek kendi istediğiniz sütunların rengini değiştirebilirsiniz.

!!CB!! 173
On SAM_CreateComplete
Call SalSendClassMessage ( SAM_CreateComplete, wParam, lParam )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colnMiktar1, COLOR_LightGreen )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colnMiktar2, COLOR_LightGreen )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colnMiktar3, COLOR_LightGreen )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colnMiktar4, COLOR_LightGreen )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colnMiktar5, COLOR_LightGreen )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colsAciklama, COLOR_LightGreen )
On PM_DataSourcePopulate
Call SalSendClassMessage ( PM_DataSourcePopulate, wParam, lParam )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colnMiktar1, COLOR_LightGreen )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colnMiktar2, COLOR_LightGreen )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colnMiktar3, COLOR_LightGreen )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colnMiktar4, COLOR_LightGreen )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colnMiktar5, COLOR_LightGreen )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colsAciklama, COLOR_LightGreen )

27 Nisan 2009 Pazartesi

Centura ekranlarımıza makyaj yapalım.

Pekçok yazılımda kullanılan GUI tekniklerinden, grid sutun/satırlarının renklendirilmesi ve TAB yerine ENTER kullanımı, hem kullanıcı eğitimleri hem de kullanım açısından avantajlar yaratmaktadır. Sonraki makalede TAB yerine ENTER tuşunun kullanılması ve centura tablewindow sutununun renklendirmesi konularını anlatacağım. Bu teknikler kullanılarak hazırlanmış form örneği aşağıdadır.

17 Nisan 2009 Cuma

LOV icin filtreleme örneği

cColumn altındaki action alanına aşağıdakine benzer
kod yazılarak lov un filtrelenmesi sağlanabilir.

On PM_DataItemLovUserWhere
...Return SalHStringToNumber("ALANADINEYSEO='biseybisey'")

'biseybisey' yerine :i_hWndFrame.frmTRHAKTEVZI.tblDetail.coldDated
gibi bir referans ile örneğin bir table veya
formdan data alarak lov u filtrelemek te mümkündür.

burada ALANADINEYSEO, LOV a temel olan view deki
fieldname i temsil etmektedir.