Kural Motoru
    • 21 Nov 2023
    • 6 Minutes to read
    • Dark
      Light

    Kural Motoru

    • Dark
      Light

    Article summary

    İş akışları ve elektronik formlarda çalıştırılan tüm kontroller bazı sabit değişkenler ve iş mantığının tek bir yapı altında toplanması yönetim açısından uygundur. Kural Motoru tüm bu bilginin merkezi olarak yönetilmesini sağlar. Böylelikle, kurallara yapılan değişiklikler sayesinde iş akışlarında ve elektronik formlarda herhangi bir değişiklik yapmadan tüm sistemi çalıştırmak mümkün olur.

    Değişkenler

    Zaman içerisinde değişebilen, iş akışları ve elektronik formlarda kullanılabilen değerlerin tanımlandığı alandır. Bu alanda tanımlanan değişkenler ortamdaki bütün formlarda kullanılabilir. Değişken adı, içerdiği değerin tipi ve değeri girildikten sonra ekle tuşu ile alt listeye eklenir, sayfayı terk etmeden önce kaydet butonu ile kaydedilir. Örneğin, kodlamada ortam bilgisi kullanılıyorsa, bunu her ortamda aynı isimli değişken  olarak tanımlamak, taşımalar esnasında herhangi bir müdahale etmeden kodların çalışmasına yardımcı olur.

    Listeler

    Öncelikle Türkçe karakter vermeden, boşluk bırakmadan ve joker karakterleri kullanmadan bir liste ismi verilir. Liste içeriğinin veri tipi belirtilir ve değerleri girmeye başlamadan önce liste tanımı kaydedilir.

    Daha sonra tanımlama seçilerek sağ taraftaki değerler menüsünden liste içine değerler eklenir. 

    Buradaki listelerin tanımlamalar menüsü altındaki liste tanımları ile bir ilgisi yoktur.

    Tablolar

    Paperwork kural motorunda, Microsoft Excel'de olduğu gibi tablolar oluşturmak mümkündür. Bu tablolar iş akış taslaklarındaki karar nesnelerinde kullanılır. Tablo isimlerinde Türkçe karakterler, joker işaretler ve boşluk kullanılmamalıdır.

    Fonksiyonlar

    Bir fonksiyon tanımlarken, öncelikle fonksiyon adı ve dönüş tipi belirlenir ve fonksiyon kaydedilir. Daha sonra giriş parametreleri ve fonksiyon içeriği eklenir. En son çıkarken Kaydet butonu ile kaydetmeyi unutmadan tanımlama kaydedilir. 

    Bu bölümlerde yazılan kodlarda yapılan değişikliklerin etkin olabilmesi için kayıt sonrası ilgili iş akışı ve formun tekrar derlenmesi gerekmektedir.

    Ortak Kodlar

    Bu bölüm form ortak kodları ve akış ortak kodları şeklinde ikiye ayrılmıştır. 

    Form ortak kodlarına yazılacak kodlar Javascript ile yazılmalıdır ve herhangi bir forma özel bilgi içermemelidir, her formda çalışabilecek ortak kullanılabilecek kodları içermelidir.

    Akış ortak kodlarına yazılacak kodlar ise C# programlama dili ile yazılmalıdır ve tıpkı form ortak kodlarında olduğu gibi akışa özel bir kod yazılmamalıdır.

    Kural Motoruna eklenecek kodlar PaperWork Geliştirme Katmanı kullanılarak da yazılabilir. Böylelikle, PaperWork'ün farklı bölümlerinde ihtiyaç duyulan işlevler bu ortak kodlar alt sekmesi sayesinde merkezi olarak yönetilebilir.

    Form ortak kodlarında yazılan bölümler elektronik formlara, akış ortak kodlarında yazılan kodlar ise iş akışlarına özgü olur.

    Bu bölümlerde yazılan kodlarda yapılan değişikliklerin etkin olabilmesi için kayıt sonrası ilgili iş akışı ve formun tekrar derlenmesi gerekmektedir.
    Kural Motoru Yapısı
    Kural motoru kaydedildiğinde derlenen bir kütüphanedir. Kullanıldığı yere göre aşağıdaki hata alınıyor ise
    "Rule Engine Load Error"
    Kural motoru bulunamıyor ve derlenmemiş demektir. Bu durumda tanım ekranına girip kaydet tuşu ile kaydedilmesi sağlanmalı, kaydetme esnasında hata alıp almadığı kontrol edilmelidir.

    Tarihçe

    Bu bölümde kural motoru üzerinde olan hareketler tarih bazında listelenir.

    Kural Motorunun Hazır Fonksiyonları

    Kural Motorunun kendi kütüphanesinde önceden hazırlanmış fonksiyonlar bulunmaktadır.

    “Metin” İşlevleri

    • public virtual bool Contains(string inText, string searchText)

             Aranan değerin bir metin değeri içinde bulunup bulunmadığını gösterir

    • public virtual bool StartsWith(string inText, string searchText)

             Aranan değerin bir metin değeri içinde verilen bir değer ile başlayıp başlamadığını gösterir. 

    • public virtual bool EndsWith(string inText, string searchText)

            Aranan değerin bir metin değeri içinde verilen bir değer ile bitip bitmediğini gösterir. 


    “Eşitlik” İşlevleri

    • public virtual bool Equals(int a, int b)

             İki tam sayının değerlerinin aynı olup olmadığını kontrol etmek için kullanılır.

    • public virtual bool Equals(double a, double b)

             İki Döviz Cinsi değerlerinin aynı olup olmadığını kontrol etmek için kullanılır.

    • public virtual bool Equals(string a, string b)

            İki metinin aynı olup olmadığını kontrol etmek için kullanılır.

    • public virtual bool Equals(DateTime a, DateTime b, bool onlyDate = true)

             İki TarihSaatin aynı olup olmadığını kontrol etmek için kullanılır.


    “Büyüktür” İşlevleri

    • public virtual bool Greater(int a, int b)

             İlk tam sayının ikinci tam sayıdan büyük olup olmadığını kontrol etmek için kullanılır.

    • public virtual bool Greater(double a, double b)

             İlk döviz cinsi değerinin ikinci döviz cinsi değerinden büyük olup olmadığını kontrol etmek için kullanılır.

    • public virtual bool Greater(DateTime a, DateTime b, bool onlyDate)

             İlk TarihSaat değerinin ikinci TarihSayı değerinden büyük olup olmadığını kontrol etmek için kullanılır.


    “Büyük veya Eşittir” İşlevleri

    • public virtual bool GreaterOrEqual(int a, int b)

             İlk tam sayının ikinci tam sayıdan büyük ya da eşit olup olmadığını kontrol etmek için kullanılır.

    • public virtual bool GreaterOrEqual(double a, double b)

            İlk döviz cinsi değerinin ikinci döviz cinsi değerinden büyük ya da eşit olup olmadığını kontrol etmek için kullanılır.

    • public virtual bool GreaterOrEqual(DateTime a, DateTime b, bool onlyDate)

             İlk tari ve saat değerinin ikinci tarih ve saat değerinden büyük ya da eşit olup olma-dığını kontrol etmek için kullanılır.


    “Daha Az” İşlevleri

    • public virtual bool Less(int a, int b)

             İlk tam sayının ikinci tam sayıdan daha az olup olmadığını kontrol etmek için kullanılır.

    • public virtual bool Less(double a, double b)

             İlk döviz cinsi değerinin ikinci döviz cinsi değerinden daha az olup olmadığını kontrol etmek için kullanılır.

    • public virtual bool less(DateTime a, DateTime b, bool onlyDate)

             İlk TarihSaat değerinin ikinci TarihSayı değerinden daha az olup olmadığını kontrol et-mek için kullanılır.


    “Arasında” İşlevleri

    • public virtual bool Between(int min, int max,int value)

             İlk verilen tam sayının sonraki iki tam sayı arasında olup olmadığını kontrol etmek için kullanılır.

    • public virtual bool Between(double min, double max, double value)

             İlk verilen döviz değerinin sonraki iki döviz değeri arasında olup olmadığını kontrol etmek için kullanılır.

    • public virtual bool Between(DateTime min, DateTime max, DateTime value, bool only-Date)

             İlk verilen tarih ve ssatin sonraki iki tarih ve saat arasında olup olmadığını kontrol et-mek için kullanılır.


    “En Fazla” İşlevleri

    • public virtual int Max(params int[] list)

             Bir tam sayı dizisinin en fazla değerini verir.

    • public virtual double Max(params double[] list)

             Bir döviz dizisinin en fazla değerini verir.


    “En Az” İşlevleri

    • public virtual int Min(params int[] list)

             Bir tam sayı dizisinin en az değerini verir.

    • public virtual double Min(params double[] list)

             Bir döviz dizisinin en az değerini verir.


    “Tarih” İşlevleri

    • public virtual DateTime AddMinute(DateTime a, int minute)

             Verilen tarih ve saat değerine dakika ekler.

    • public virtual DateTime AddHour(DateTime a, int hour)

             Verilen tarih ve saat değerine saat ekler.

    • public virtual DateTime AddDay(DateTime a, int day)

             Verilen tarih ve saat değerine gün ekler.

    • public virtual DateTime AddMonth(DateTime a, int month)

             Verilen tarih ve saat değerine ay ekler.

    • public virtual DateTime AddYear(DateTime a, int year)

             Verilen tarih ve saat değerine yıl ekler.

    • public virtual double DayBetween(DateTime a, DateTime b)

             Verilen iki tarih ve saat arasındaki gün sayısını verir.

    • public virtual DateTime AddMinute(string calendarName, DateTime CurrentDate, double aMinute)

             Verilen takvime göre verilen tarihe dakika ekler (Dönüş Değeri tarihtir.).

    • public virtual double WorkingMinutes(string calendarName, DateTime StartDate, DateTime)

             Verilen takvime göre verilen tarihler arasındaki farkı verir (Dönüş Değeri dakika cinsinden küsurlu rakamdır).


    “Liste” İşlevleri

    • public virtual bool inList(object value, IList list)
    • public virtual bool inList(IList list, object value)

             Her iki fonksiyon da verilen bir değerin verilen bir listede var olup olmadığını kontrol eder.


    “Tablo” İşlevleri

    • public virtual object TableValue(DataTable TableName, string colName, string rowName)

             Verilen bir tablonun ad, kolon ve satır isimlerinin değerlerini verir.  

    • public virtual object TableValueRow(DataTable TableName, string rowName)

             Verilen bir tablonun ad ve satır isimlerinin değerlerini verir.  


    “Takvim” İşlevleri

    • public DateTime NextWorkingDay(string calendarName,DateTime currentDate,int range)

             Belirli bir takvimde verilen tarihten sonraki haftanın ilk çalışma gününü verir.

    • public DateTime NextDayOfWeek(string calendarName, DateTime currentDate, DayOf-Week dow, bool inCurrentWeek = true)

             Belirli bir takvimde verilen tarihten sonraki haftanın ilk gününü verir. Eğer tatil gününe rastlıyorsa, inCurrentWeek Parametresi bir sonraki haftanın aynı  gününü verir.

    • public DateTime FirstWorkingDay(string calendarName, DateTime currentDate)

             Belirli bir takvimde verilen tarihten sonraki ilk çalışma gününü verir. 

    • public DateTime LastWorkingDay(string calendarName, DateTime currentDate)

             Belirli bir takvimde verilen tarihten sonraki son çalışma gününü verir

     


    What's Next