Haz
5
2015

Custom Form içerisinde Zamanlayıcı Kullanmak

Merhaba,
Custom form eventleri üzerinden çalışacak tekrarlı ve veya tekrarsız zamanlayıcılar çalıştırarak form üzerinde işlemler yapmak mümkündür. Bu işlemleri bir örnek üzerinden açıklamak gerekirse,

Zamanlayıcı işlemleri TIMER isimli obje ile yapılmaktadır.

 
DECLARE
L_TIMER TIMER;
P_TIMER_NAME VARCHAR2(150) := 'X_TIMER';
P_DELAY NUMBER := 1;
BEGIN
 
BEGIN
	L_TIMER := FIND_TIMER(P_TIMER_NAME);
	IF NOT ID_NULL(L_TIMER) THEN
		DELETE_TIMER(L_TIMER);
	END IF;
	L_TIMER := CREATE_TIMER(P_TIMER_NAME, P_DELAY, NO_REPEAT);
END;

şeklinde başlatılabilir. Bu işlem zamanlayıcının başlatılması işlemidir.Zamanlayıcı başladıktan sonra çalışma zamanı bittiğinde form triggerlarından WHEN-TIMER-EXPIRED trigger ı tetiklenir.Eğer bu trigger yoksa form triggerları altına eklenmelidir !

timer expired

WHEN-TIMER-EXPIRED içerisinde istenilen kodlama çalıştırılabilir.

Zamanlayıcı ile ilgili olarak hazırlanmış bir kodlama çözümü aşağıdaki gibidir:

1-Zamanlayıcıların başlatılması için UTIL isimli bir paket Program Birimleri içerisine oluşturulur.

 
PACKAGE UTIL IS
 
	PROCEDURE ONE_SHOT_TIMER(P_TIMER_NAME IN VARCHAR2, P_DELAY IN NUMBER := 1);
 
	PROCEDURE REPEATING_TIMER(P_TIMER_NAME IN VARCHAR2, P_DELAY IN NUMBER);
 
END UTIL;
 
----------------------------------------------------------------------------------------------------
 
PACKAGE BODY UTIL IS
PROCEDURE ONE_SHOT_TIMER(P_TIMER_NAME IN VARCHAR2, P_DELAY IN NUMBER := 1) IS
	L_TIMER TIMER;
BEGIN
	L_TIMER := FIND_TIMER(P_TIMER_NAME);
	IF NOT ID_NULL(L_TIMER) THEN
		DELETE_TIMER(L_TIMER);
	END IF;
	L_TIMER := CREATE_TIMER(P_TIMER_NAME, P_DELAY, NO_REPEAT);
END ONE_SHOT_TIMER;
 
----------------------------------------------------------------------------------------------------
 
PROCEDURE REPEATING_TIMER(P_TIMER_NAME IN VARCHAR2, P_DELAY IN NUMBER) IS
	L_TIMER TIMER;
BEGIN
	L_TIMER := FIND_TIMER(P_TIMER_NAME);
	IF NOT ID_NULL(L_TIMER) THEN
		DELETE_TIMER(L_TIMER);
	END IF;
	L_TIMER := CREATE_TIMER(P_TIMER_NAME, P_DELAY, REPEAT);
END REPEATING_TIMER;
 
----------------------------------------------------------------------------------------------------
 
END UTIL;

2-TIMER_EXPIRED isimli bir procedure yaratılır , zamanlayıcı tamamlandığında çalışacak programları içinde barındırır.

 
PROCEDURE TIMER_EXPIRED IS
L_TIMER_NAME  VARCHAR2(150) := NVL(GET_APPLICATION_PROPERTY(TIMER_NAME), '*');
BEGIN
 
 IF L_TIMER_NAME = 'OPERASYON' THEN
 
    GO_BLOCK('OPERASYON');
    CLEAR_BLOCK(NO_VALIDATE)	    ;
    EXECUTE_QUERY;
    SYNCHRONIZE; 
 
 END IF;
 
END;

timer expired2

3-WHEN-TIMER-EXPIRED triggerı içerisinden TIMER_EXPIRED procedure çağırılır.

4-Artık hazır hale gelen zamanlayıcı sisteminde OPERASYON isimli zamanlayıcı istenilen yerden çalıştırılabilir

UTIL.ONE_SHOT_TIMER(‘OPERASYON’, 50);

50 milisaniye sonra çalışır.

Mustafa Korkmaz

Oracle Applications Developer at Partnera
2005 yılında Dokuz Eylül Üniversitesi Endüstri Mühendisliğinden Mezun
Oldu, 2011 Yılında Ahmet Yesevi Üniversitesi Bilgisayar Mühendisliğinde
Yüksek Lisansını Tamamlandı,2012 Yılında Doğuş Üniversitesinde Bilgisayar
Mühendisliği Doktora Eğitimine Başladı.10 yılı aşkın bir zamandır Oracle
Ürünleri Uygulama Yazılım Uzmanı Olarak profesyonel kariyerine devam
etmektedir. İlgi alanları Middleware, CI/CD,
Oracle Database , PL/SQL , Java , Makine Öğrenmesi ve Veri Madenciliği alanlarındadır.
2 versiyon Oracle Database ' (10g, 11g) inde OCA(Oracle Certificate Associate) ve
PL/SQL Certificated Professional ünvanları bulunmaktadır.
Mail: mustafakorkmz@gmail.com
Mustafa Korkmaz


Yorum yapın

*