Transaction'larTransactions

This page is part of an incremental translation project. Body text not yet translated to Turkish falls back to English even in TR mode.

Bir TROIA Transaction, kullanıcıların "Sales Document Management" veya "Funds Management" gibi belirli bir task/task'lar gerçekleştirebileceği basit bir business seviyesi application'dır.A TROIA Transaction is simply an business level application that users can perform specific task/tasks on, like “Sales Document Management” or “Funds Management”.

Transaction'ların, transaction başlatılırken/çağrılırken transaction id olarak kullanılan kısa bir isim/id'si (DEVT11) ve transaction'ı tanımlayan kısa bir metin olan bir caption'ı (Runcode Test Transaction) vardır.Transactions has a short name/id that is used as transaction id when starting/calling the transaction (DEVT11) and a caption which is a short text that defines transaction (Runcode Test Transaction).

Diğer programlama dilleri gibi, TROIA transaction'larının application başladığında tetiklenen bir entry point'i vardır. Bu "entry point", "start dialog" olarak adlandırılır ve transaction tanımında tanımlanır.Like other programming languages, TROIA transactions have an entry point that is fired when application started. This “entry point” is called as “start dialog” and it is defined on transaction definition.

Transaction TanımlamaDefining Transactions

Tanımdan önce, id/ismi, ilk dialog'u (entry point) ve transaction caption'ını belirlemelisiniz. Bu üç bilgi, bir transaction'ı tanımlayan primary data'dır.Before the definition, you must decide the id/name, the first dialog (entry point) and transaction caption. This three information is the primary data which defines a transaction.

Tanım işlemi "SYST00 - System Transactions & Gadgets" application'ında gerçekleştirilir. Bu application da bir TROIA transaction'ıdır. SYST00, transaction bilgisini SYSTRANS, SYSTRANSTXT database table'larında saklar.Definition operation is performed on “SYST00 - System Transactions & Gadgets” application. This application is also a TROIA transaction. SYST00 stores transaction information on SYSTRANS, SYSTRANSTXT database tables.

Bir transaction tanımlarken sağlamanız gereken başka bir feature da transaction'ınızın "module"üdür. Module, "Sales Applications" veya "Finance Applications" gibi bir veya daha fazla transaction'ın virtual grubudur. Module, primary bir data değildir ve nispeten önemsizdir, sadece dokümantasyon için kullanılır. Transaction'ın status (active/passive) bilgisi de yalnızca dokümantasyon için başka bir data'dır.Another feature that you must provide while defining a transaction is the “module” of your transaction. A module is virtual group of one or more transactions such as “Sales Applications” or “Finance Applications” etc. Module is not a primary data and relatively negliable, it is just used for documentation. Status (active/passive) information of transaction is also another data just for docuementation.

Bir transaction tanımlarken user interface konuları için icon, renk de sağlayabilirsiniz.While defining a transaction you can also provide icon, color for user interface issues.

Transaction'lar ve ScopeTransactions and Scope

Transaction, TROIA code'larını çalıştırabilen tek yapıdır. Başka bir deyişle, bir TROIA code'u çalıştırmak için server tarafında en az bir transaction açılmış olmalıdır. Ayrıca, transaction'lar TROIA application'larında tanımlanan variable'ları saklayabilir. Transaction, bir TROIA variable'ının en geniş scope'udur. Global olarak tanımlanan bir variable, transaction üzerinde çalışan herhangi bir dialog veya class code'u tarafından erişilebilir.Transaction is the only structure that is able to execute TROIA codes. In other words, to run a TROIA code at least one transaction must be opened in server side. Also, transactions are able to store variables defined in TROIA applications. A transaction is the largest scope of a TROIA variable. A variable which is defined as global, can be accessed by any dialog or class code which is running on transaction.

Transaction'ları Çalıştırma & ÇağırmaRunning & Calling Transactions

Bir transaction başlatıldığında, application server database'deki transaction table'larından temel bilgiyi okur ve server memory'sinde virtual bir yapı oluşturur. Bu virtual yapı, client tarafında açılacak transaction'ın server tarafı karşılığıdır. Server transaction'ının başarılı bir şekilde oluşturulmasından sonra, client transaction'ın start dialog'unu çağırır. Dialog'un event'leri gerçekleştirildikten sonra, transaction user interaction'a hazır hale gelir.When a transaction is starter, application server reads the basic information from transaction tables on database, and creates a virtual structure in server memory. This virtual structure is server side counterpart of transaction that will opened on client side. After a successful creation of server transaction, client calls start dialog of the transaction. After dialog’s events performed, transaction gets ready to user interaction.

Basitçe, bir transaction'ı başlatmanın iki yolu vardır. İlki, en çok kullanılan ve en doğal olanı, user menu'süne tıklayarak, quick launch veya bir shortcut ile client'tan bir transaction çalıştırmaktır. Diğer yöntem "calling transaction" olarak adlandırılır ve programcılar tarafından TROIA code'unda bir transaction çalıştırmak için kullanılır.Simply, there are two ways of starting a transaction. The first, most used and more natural one is running a transaction from client by clicking user menu, quick launch or a shortcut. The other method is called as “calling transaction” and used by programmers to run a transaction on TROIA code.

TROIA Code ile Transaction ÇağırmaCalling Transactions by TROIA Code

Bazı durumlarda, programcıların bir task gerçekleştirmek ve opsiyonel olarak çağrılan transaction'dan bazı output parametreleri almak için bir transaction çağırması gerekebilir. Bir transaction'ı programatik olarak çağırmak için "CALL TRANSACTION" komutu kullanılır.In some cases, programmers may need call a transaction to perform a task and optionally get some output parameters from called transaction. “CALL TRANSACTION” command is used to call a transaction programatically.

İşte CALL TRANSACTION komutunun en basit kullanımları:Here is the simplest usages of CALL TRANSACTION command:

CALL TRANSACTION {tran_name} [({input_params})];CALL TRANSACTION {tran_name} [({input_params})];

/*/*

Örnek: Example:

CALL TRANSACTION DEVT11 (PARAM1, PARAM2); CALL TRANSACTION DEVT11 (PARAM1, PARAM2);

*/*/

Bu varyasyonda, TROIA runtime CALL TRANSACTION komutunda code execution'ı durdurmaz. Sadece server activity bittikten sonra (user interaction'da en son event/method çalıştırıldığında) verilen transaction'ı çağırır. Bu durumda, çağrılan transaction'dan output parametreleri almak desteklenmez.In this variation, TROIA runtime does not stop code execution on CALL TRANSACTION command. Just calls given transaction after server activity finished (when lastest event/method executed on user interaction.) In this case, getting output parameters from called transaction is not supported.

Code execution'ı durdurmak ve output parametrelerini beklemek de mümkündür. İşte kullanımı:It is possible to stop code execution and wait for output parameters. Here is the usage:

CALL TRANSACTION {tranname} [({input_params})] WITH WAIT [({output_params})];CALL TRANSACTION {tranname} [({input_params})] WITH WAIT [({output_params})];

/*/*

Örnek: Example:

CALL TRANSACTION (PARAM1, PARAM2) DEVT11 (OUTPUT1, OUTPUT2); CALL TRANSACTION (PARAM1, PARAM2) DEVT11 (OUTPUT1, OUTPUT2);

*/*/

Bu durumda, TROIA runtime code execution'ı durdurur ve kullanıcıyla interactive yeni bir transaction başlatır. Kullanıcı transaction'ı kapattığında, TROIA runtime code execution'a CALL TRANSACTION'dan sonraki komuttan devam eder, bu yüzden output parametrelerini almak ve değerlerini bir sonraki komutlarda kullanmak mümkündür. WITH WAIT varyasyonunda, kullanıcıların çağrılan transaction kapatılmadan caller transaction'a user interface üzerinde geçiş yapmasına izin verilmez.In this case, TROIA runtime stops code execution and starts a new transaction that is interactive with user. When user closes the transaction, TROIA runtime continues code execution from the command after CALL TRANSACTION, so getting output parameters and use their values on next commands is possible. In WITH WAIT variation, users not allowed to switch caller transaction on user interface without called transaction is closed.

Server'da Transaction ÇağırmaCalling Transactions in Server

Varsayılan CALL TRANSACTION komutu, client tarafından yönlendirilen yeni bir transaction process'i açılmasını tetikler, bu yüzden yeni transaction client tarafında, user interface'i client application'ında görünecek şekilde açılır. Bu durumda, kullanıcılar çağrılan transaction ile de etkileşime girebilir.As default CALL TRANSACTION command, fires opening a new transaction process drived by client, so new transaction is opened on client side with its user interface appears in client application. In this case,users are also able to interact with called transaction.

Ama bazı durumlarda, programcıların herhangi bir user interaction olmadan zaten bir transaction'da implement edilmiş bir process'in sonucuna ihtiyacı olabilir. Bu durumlarda, bir transaction'ı server'da çağırmak mümkündür. Bir transaction server'da çağrıldığında, server bir transaction ve ilk dialog'unu açar, event'leri çalıştırır ve transaction'ı kapatır; başka bir deyişle server, normal bir transaction açma sürecinde çağrılan tüm client request'lerini simüle eder.But in some cases, programmers may need result of a process which is already implemented on a transaction without any user interaction. In this cases, it is possible to call a transaction in server. When a transaction is called in server, server opens a transaction and it’s first dialog, runs events and closes transaction; in other words server simulates all client requests which is called when a regular transaction opening process.

Bir transaction'ı inserver varyasyonuyla çağırmak çok basittir. İşte syntax'ı:Calling a transaction with in server variation is very simple. Here is the syntax:

CALL TRANSACTION {transaction} ({input_params}) INSERVER;CALL TRANSACTION {transaction} ({input_params}) INSERVER;

CALL TRANSACTION {transaction} INSERVER ({input_params});CALL TRANSACTION {transaction} INSERVER ({input_params});

CALL TRANSACTION {transaction} ({input_params}) INSERVER ({output_params});CALL TRANSACTION {transaction} ({input_params}) INSERVER ({output_params});

Input Parametreleri & TRANSCALLED Event'iInput Parameters & TRANSCALLED Event

Input parametreleri, çağrılan transaction'da aynı isim, değer ve type ile global variable olarak tanımlanır. Bu yüzden parametreleri constant değer olarak geçirmek önerilmez.Input parameters are defined on called transaction’s as global variables with same name, value and type. So passing parameters as constant values is not recommended.

/* bu geçerli bir çağrıdır *//* this is a valid call */

CALL TRANSACTION DEVT11 ('paramvalue', 5);CALL TRANSACTION DEVT11 ('paramvalue', 5);

CALL TRANSACTION komutunun input parametreleri varsa, ilk dialog'un "AFTER" event'inden sonra TRANSCALLED çağrılır. Herhangi bir input parametresi yoksa TRANSCALLED event'i tetiklenmez. Start dialog'da TRANSCALLED event'ini implement etmek zorunlu değildir. Dialog TRANSCALLED event'i içermiyorsa, caller komut parameter geçirse bile event çağrısı yok sayılır.If CALL TRANSACTION command has input parameters, after “AFTER” event of first dialog TRANSCALLED is called. If there is not any input parameter TRANSCALLED event is not fired. Implementing TRANSCALLED event in start dialog is not a compulsory. If dialog does not contain TRANSCALLED event, event call is ignored even if caller command passes parameter.

Scheduled Task'ler ve Batch Transaction'larScheduled Tasks and Batch Transactions

Daha önce belirtildiği gibi, transaction'lar TROIA code'larını çalıştırabilen tek yapıdır. Bu yüzden programcılar bir programı planlanmış/scheduled bir task olarak çalıştırmak istediğinde de bir transaction açmak zorundadır. TROIA platformunda, bu duruma "batch transaction" veya "batch client" denir.As mentioned before, transactions are the only structure that is able to execute TROIA codes. So when programmers needs to run a program as a planned/scheduled task,also they have to open a transaction. In TROIA platform, this case is called as “batch transaction” or “batch client”.

Batch transaction konsepti sayesinde, programcılar batch olarak configure edilecek bir transaction için bir TROIA code block'u tanımlayabilir. Bu code, "SYST00 - System Transactions & Gadgets" application'ının "Batch Code" tab'ında tanımlanır. Bir batch transaction çağrıldığında, sistem transaction'ı başlatır ve normal bir transaction açma gibi ilk dialog'unu açar, ayrıca transaction'ın "Batch Code"unu çalıştırır.Due to batch transaction concept, programmers are able to define a TROIA code block for a transction that will be configured as batch. This code is defined in “Batch Code” tab of “SYST00 - System Transactions & Gadgets” application. When a batch transaction is called, system starts transaction and opens it’s first dialog as a regular transaction opening additionally runs transaction’s “Batch Code”.

Bir batch transaction'ı çalıştırmanın iki yöntemi vardır. İlki client tabanlı batch'tir ve bu yöntem kullanıcıların client user interface'ini görmesine izin verir. Diğer seçenek, Server Admin Utility varyasyonu olarak tanımlanan bir console application'dır. Her iki yöntemde de, scheduling, Windows'un task scheduler'ı veya linux'un crontab'ı gibi operating system'in scheduling tool'larında tanımlanır (TROIA Platformunun gömülü bir scheduling tool'u yoktur).To run a batch transaction, there are two methods. First one is client based batch and this method allows users to see client user interface. The other option is a console application which is defined as an Server Admin Utility variation. In both of two methods, scheduling is defined on operating system’s scheduling tools like Window’s task scheduler or linux’s crontab (TROIA Platform does not have embedded scheduling tools).

"Batch transaction"lar hakkında daha fazla configuration detayı için lütfen help dokümanlarına bakınız.For more configuration details about “batch transactions” please see help documents.

Transaction Bilgisi OkumaReading Transaction Info

Bazı durumlarda, bir programcı olarak code'unuzun çalıştığı transaction hakkında bazı bilgilere ihtiyacınız olabilir. İşte transaction hakkında bilgi sağlayan bazı faydalı system variable'ları ve function'ları:In some cases, as a programmer you may need some information about the transaction that your code runs in. Here are some usefuls system variables and functions that provides information about the transaction:

SYS_TRANSACTIONto get transaction name
SYS_TRANSACTIONIDto get the transaction id
SYS_TRANSACTIONTYPEto get transaction type, is it a regular transaction or gadget?
SYS_ISBATCHTRANSACTIONto check whether transaction is batch or not
SYS_ISSERVERONLYTRANSACTIONto check whether transaction is server only or not
SYS_TRANCREATEDBYto get the user who created the transaction
SYS_TRANCREATEDATto get the time that transaction created
SYS_TRANMODIFIEDBYto get the last user who modified the transaction
SYS_TRANMODIFIEDATto get the last time that transaction modified

Transaction hakkında data döndüren daha fazla faydalı system variable ve function için lütfen ilgili help dokümanlarına bakınız.For more useful system variables and functions that returns data about transaction please see related help documents.

Alıştırma 1: Transaction TanımlamaExercise 1: Defining Transaction

Lütfen şu şekilde bir transaction tanımlayınPlease define a transaction that

ve transaction'ı basit yöntemle çağırmak ile "WITH WAIT" varyasyonuyla çağırmak arasındaki farkı anlamaya çalışın.and try to understand difference between calling transaction with simple method and with “WITH WAIT” variation.