Orbion Yönetici KılavuzuAdmin Guide
Orbion sayfasıOrbion page
Orbion › Yönetici Yapılandırma Kılavuzu › v1› Admin Configuration Guide › v1

Orbion Yönetici KılavuzuOrbion Admin Guide

Bu kılavuz, Orbion sistemini sıfırdan çalışır hale getirmeniz için gereken tüm yapılandırma adımlarını bağımlılık sırasına göre anlatır. Soldaki menüden bölümlere geçebilir, üstteki kutudan arama yapabilir, EN/TR ile dili değiştirebilirsiniz. This guide walks you through every configuration step needed to bring an Orbion system online, ordered by dependency. Use the left menu to navigate, the box above to search, and EN/TR to switch language.

Nasıl okunurHow to read Her modül aynı kalıpla anlatılır: Amaç → Ön koşullar → Alan referansı → Adımlar → Örnek → İpuçları. İlk kurulumda bölümleri yukarıdan aşağıya sırayla izleyin. Each module follows the same pattern: Purpose → Prerequisites → Field reference → Steps → Example → Tips. For a first install, follow the sections top to bottom.

Giriş ve MimariIntroduction & Architecture

Orbion, mevcut veritabanlarınızın üzerine kod yazmadan uygulama, form, pano ve iş akışı kurmanızı sağlayan bir low-code platformudur. Veri kaynağı bağlarsınız, formlar ve komponentler tasarlarsınız, bunları menüler/portal altında uygulamalara dönüştürürsünüz; iş akışları ve entegrasyonlarla otomatikleştirirsiniz. Orbion is a low-code platform for building apps, forms, dashboards and workflows on top of your existing databases — without writing code. You connect data sources, design forms and components, expose them as apps under menus/portal, then automate with workflows and integrations.

Ana kavramlarCore concepts

KavramConceptAçıklamaMeaning
ConnectionBir veritabanına bağlantı (PostgreSQL veya SQLite). Tüm veri buradan okunur/yazılır.A database connection (PostgreSQL or SQLite). All data is read/written through it.
FormBir ekran. İçinde alanlar ve komponentler (tablo, grafik, takvim, ağaç…) bulunur.A screen made of fields and components (table, chart, calendar, tree…).
ComponentForma yerleştirilen yapı taşı. Veriye bağlı (table/chart/board/calendar/tree) veya girdi (alanlar) olabilir.A building block placed on a form. Data-bound (table/chart/board/calendar/tree) or input (fields).
App / MenuFormları gruplayan uygulama ve navigasyon. Portal son kullanıcının gördüğü çatıdır.The application and navigation that group forms. Portal is the end-user shell.
WorkflowTetikleyiciyle çalışan otomasyon (kayıt sorgula, döngü, e-posta, onay…).Trigger-based automation (query records, loop, email, approval…).

Yapılandırma sırasıConfiguration order

Modüller birbirine dayanır; bu sırayla ilerleyin:Modules depend on each other; proceed in this order:

  1. Connectionsveri kaynağı (temel).data sources (foundation).
  2. Identitykullanıcı, grup, organizasyon, güvenlik.users, groups, organizations, security.
  3. Global Variablesortak parametreler.shared parameters.
  4. Apps & Menusuygulama ve navigasyon.application & navigation.
  5. Forms & Componentsekran tasarımı.screen design.
  6. Workflows / Integrations / Emailotomasyon ve işletim.automation & operations.
1 Connections Data sources · foundation 2 Identity Users · Groups · Org 3 Apps & Forms Build the screens 4 Automation Workflow · Email Orbion — setup order
Şekil 1.Figure 1. Yapılandırma sırası — soldan sağa. Her aşama bir öncekine dayanır.Configuration order — left to right. Each phase depends on the previous one.

1 · Erişim ve İlk KurulumAccess & First Setup

AmaçPurpose

Yönetim arayüzüne giriş yapıp güvenli bir yönetici hesabıyla başlamak.Sign in to the admin interface and start from a secure administrator account.

AdımlarSteps

  1. Giriş ekranında (login.html) yönetici kullanıcı adı/şifresiyle oturum açın.Sign in on the login screen (login.html) with the administrator credentials.
  2. İlk girişte şifrenizi Change Password ekranından değiştirin.On first login, change your password from the Change Password screen.
  3. Designer (yönetim) arayüzü index.html üzerinden açılır; soldaki bölümler (Connections, Users, Apps…) yönetim modülleridir.The Designer (admin) interface opens at index.html; the left-hand sections (Connections, Users, Apps…) are the admin modules.
GüvenlikSecurityVarsayılan/ilk yönetici şifresini mutlaka değiştirin ve yönetici yetkisini yalnızca gereken hesaplara verin.Always change the default/initial admin password and grant admin rights only to accounts that need them.

2 · Veri Yönetimi (Data Management)Data Management

Orbion yalnız var olan veritabanlarına bağlanmakla kalmaz; tablo/kolon oluşturup veri de tutabilir. Bu bölüm üç parçadır: Connections (bağlantılar), Veri editörü (tablo/kolon/satır yönetimi) ve Orbion Types (kolonların anlamsal tipleri).Orbion doesn't just connect to existing databases; it can also create tables/columns and store data. This section has three parts: Connections, the Data editor (manage tables/columns/rows), and Orbion Types (the semantic types of columns).

2.1 · Connections (Bağlantılar)2.1 · Connections

Orbion'un veri okuyup yazacağı veritabanlarını tanımlar — tüm sistemin temelidir; form, komponent ve iş akışları bu bağlantılar üzerinden çalışır.Defines the databases Orbion reads from and writes to — the foundation of the whole system; forms, components and workflows all run through these connections.

Desteklenen motorlarSupported engines

PostgreSQL SQLite

EngineNe zamanWhenBağlantı bilgisiConnection details
PostgreSQLSunucu tabanlı, çok kullanıcılı, üretim için.Server-based, multi-user, for production.Host · Port · Database · User · Password · Schema.Host · Port · Database · User · Password · Schema.
SQLiteDosya tabanlı, hafif; küçük/yerel uygulamalar ve hızlı başlangıç için.File-based, lightweight; for small/local apps and quick starts.Tek bir dosya yolu (host/port/parola yok).A single file path (no host/port/password).
İkisinde de veri tutarsınızStore data in eitherHer iki motorda da Orbion tablo/kolon oluşturup veri yazabilir (aşağıdaki Veri editörü). PostgreSQL üretim ölçeği için, SQLite hızlı/yerel senaryolar için idealdir.In both engines Orbion can create tables/columns and write data (the Data editor below). PostgreSQL suits production scale; SQLite is ideal for quick/local scenarios.

Alan referansıField reference

AlanFieldZorunluRequiredAçıklamaDescription
NameBağlantının görünen adı; form ve komponentlerde bununla seçilir.Display name; referenced by forms and components.
EngineVeritabanı tipi. Yazım/çeviri davranışı buna göre belirlenir.Database type. Drives SQL dialect/translation behavior.
Host / Port / DatabaseSunucu adresi, port ve veritabanı adı.Server address, port and database name.
User / PasswordKimlik bilgileri (şifre güvenli saklanır).Credentials (password stored securely).
SchemaVarsayılan şema (Postgres'te genelde public).Default schema (often public in Postgres).

AdımlarSteps

  1. Connections bölümünü açın → New.Open ConnectionsNew.
  2. Motoru ve bağlantı bilgilerini girin.Pick the engine and enter connection details.
  3. Test ile doğrulayın; başarılıysa Save.Validate with Test; on success Save.
  4. Şema/tablo keşfi otomatik yapılır; artık formlarda bu bağlantıyı seçebilirsiniz.Schema/table discovery runs automatically; the connection is now selectable in forms.
New connection Name Engine PostgreSQL Host / Port Database User / Pwd Test Save 1 Motor = SQL lehçesiEngine = SQL dialect 2 Önce test etValidate first
Şekil 2.Figure 2. Bağlantı ekleme formu (temsilî). Motor SQL davranışını belirler; kaydetmeden önce Test ile doğrulayın.Add-connection form (illustrative). The engine drives SQL behavior; validate with Test before saving.
İpucuTipBir komponentin bağlantısını boş bırakırsanız formun bağlantısı kullanılır. Çoğu ekranda tek bağlantı yeterlidir.If you leave a component's connection blank, the form's connection is used. One connection is enough for most screens.

2.2 · Veri editörü (tablo · kolon · veri)2.2 · Data editor (tables · columns · data)

Bağlandıktan sonra Orbion'un yerleşik veri editörüyle veritabanını doğrudan yönetebilirsiniz: soldaki ağaçta Bağlantı › Şema › Tablo gezinir, ortada bir tablonun kolon yapısını ve verisini (satırları) görürsünüz. Tüm DDL ve CRUD işlemleri buradan yapılır — ayrı bir SQL aracına gerek yoktur.Once connected, Orbion's built-in data editor manages the database directly: browse Connection › Schema › Table in the left tree, and view a table's column structure and data (rows) in the middle. All DDL and CRUD is done here — no separate SQL tool needed.

◈ CALL SYSTEM ▾ public ▦ tickets ▦ customers ▦ cities ▣ v_open (view) + Create Table ▦ tickets + Add Column + New Row VeriData KolonlarColumns IdTitleStatusAssigneeDueDate TSK-001Ödeme entegrasyonuPayment integrationOpenAhmet Y.2026-06-20 TSK-002Rapor ekranıReport screenPendingElif D.2026-06-22 TSK-003Bugfix: loginOpenMert K.2026-06-18 Bir satıra tıkla → düzenle/sil (CRUD)Click a row → edit/delete (CRUD) YapabileceklerinizWhat you can do DDL: tablo oluştur/düzenle/sil · kolon ekle/düzenle/sil · view oluştur.DDL: create/edit/drop table · add/edit/drop column · create view. CRUD: New Row ile ekle · satıra tıklayıp düzenle · sil.CRUD: add via New Row · click a row to edit · delete. Kolon: ad · veri tipi · Orbion Type · Nullable · PK · Default · Comment.Column: name · data type · Orbion Type · Nullable · PK · Default · Comment.
Şekil 31.Figure 31. Veri editörü: solda Bağlantı › Şema › Tablo ağacı; sağda tablonun Veri (satırlar) ve Kolonlar sekmeleri. + Create Table · + Add Column · + New Row ile DDL ve CRUD tek yerden yapılır.Data editor: a Connection › Schema › Table tree on the left; the table's Data (rows) and Columns tabs on the right. + Create Table · + Add Column · + New Row do all DDL and CRUD in one place.
İşlemOperationNasılHow
Tablo oluşturCreate table+ Create Table; ad + kolonlar (her kolon: ad · veri tipi · Nullable · PK · Default · Comment). İlk kolon varsayılan id serial PK gelir.+ Create Table; name + columns (each: name · data type · Nullable · PK · Default · Comment). The first column defaults to id serial PK.
Kolon ekle / düzenle / silAdd / edit / drop column+ Add Column, satırdaki (düzenle) veya 🗑 (sil). Veri tipi, nullable, default ve yorum değiştirilebilir.+ Add Column, the row's (edit) or 🗑 (drop). Data type, nullable, default and comment can change.
Satır ekle/düzenle/sil (CRUD)Row CRUD+ New Row ile ekleyin; bir satıra tıklayıp düzenleyin veya silin.Add with + New Row; click a row to edit or delete.
ViewSalt-okunur sorgu görünümü oluşturun (normal veya materialized).Create a read-only query view (normal or materialized).

2.3 · Orbion Types (anlamsal kolon tipleri)2.3 · Orbion Types (semantic column types)

Orbion Type, bir kolonun fiziksel veritabanı tipinin üzerine konan anlamsal tiptir. Veritabanı varchar, int, timestamp bilir; Orbion ise o kolonun ne ifade ettiğini bilmek ister — bir kullanıcı mı, bir tarih mi, bir açılır seçenek mi? Orbion Type bunu söyler ve kolonun tüm formlarda nasıl render edileceğini ve davranacağını belirler. Her kolona fiziksel tipinden otomatik bir varsayılan atanır; siz bunu override edebilirsiniz (yalnız değişiklik saklanır, varsayılan yeniden hesaplanır).Orbion Type is the semantic type layered on top of a column's physical database type. The database knows varchar, int, timestamp; Orbion wants to know what the column means — a user, a date, a dropdown option? Orbion Type says so, and drives how the column renders and behaves across all forms. Each column gets an auto-derived default from its physical type, which you can override (only the override is stored; the default is recomputed).

NameData Type (DB)Orbion TypePKNull idserialSequence Id ▾🔑NO titlevarcharText ▾YES statusvarcharOption ▾⚡ GV: Issue Status ▾ assigneeuuidUser ▾YES due_datetimestampDate ▾YES Fiziksel tip otomatik varsayılanı belirler (serial→Sequence Id, varchar→Text, timestamp→Date); anlam için override edersiniz (Option/User…).The physical type sets the auto default (serial→Sequence Id, varchar→Text, timestamp→Date); override for meaning (Option/User…).
Şekil 32.Figure 32. Kolon denetçisinde her kolonun bir Orbion Type seçicisi vardır. status kolonu Option'a alınıp bir Global Variable'a (Issue Status) bağlanmış; assignee User; due_date otomatik Date; id Sequence Id.In the column inspector each column has an Orbion Type picker. The status column is set to Option and linked to a Global Variable (Issue Status); assignee is User; due_date auto Date; id Sequence Id.
Orbion TypeAnlamı / davranışıMeaning / behavior
TextDüz metin (char/text/uuid/bool → otomatik Text).Plain text (char/text/uuid/bool → auto Text).
NumberSayısal (int/numeric/decimal/serial → otomatik Number).Numeric (int/numeric/decimal/serial → auto Number).
DateTarih/zaman (timestamp/date/time → otomatik Date).Date/time (timestamp/date/time → auto Date).
Sequence IdOtomatik artan anahtar (kod/numara üretimi; entegrasyon sequence'leriyle uyumlu).Auto-incrementing key (code/number generation; aligns with integration sequences).
UserBir kullanıcıya işaret eder → formda kullanıcı seçici ve kullanıcı bilgisi (ad/e-posta) açığa çıkar.Points to a user → exposes a user picker and user attributes (name/email) on the form.
GroupBir gruba işaret eder → grup seçici.Points to a group → a group picker.
OrgBir organizasyona/şirkete işaret eder → organizasyon seçici.Points to an organization/company → an org picker.
OptionAçılır seçenek → değerleri bir Global Variable'dan gelir (aşağıda).A dropdown option → values come from a Global Variable (below).

2.4 · Option tipi ↔ Global Variable eşleştirme2.4 · Option type ↔ Global Variable matching

Bir kolonun Orbion Type'ı Option yapıldığında, yanında bir Global Variable seçici belirir. Seçtiğiniz GV o kolonun açılır liste kaynağı olur: kolon, bu GV'nin key/label değerleriyle her formda otomatik bir dropdown olarak görünür — alanı tek tek her formda yapılandırmanıza gerek kalmaz. Böylece veri katmanındaki anlam (Option + GV) doğrudan arayüze taşınır.When a column's Orbion Type is set to Option, a Global Variable picker appears next to it. The GV you choose becomes the column's dropdown source: the column shows up as an automatic dropdown in every form using this GV's key/label — no need to configure the field per form. The meaning defined at the data layer (Option + GV) flows straight to the UI.

Bağlantı noktasıThe linkKolon (Option)optionGvIdGlobal Variable (Bölüm 4). GV'nin Column'u key'i, Label Column'u görünen adı verir; Parent Column varsa cascade çalışır. Form alanında ek bir şey yapmazsanız bile, bu kolon doğru dropdown'ı gösterir.Column (Option)optionGvIdGlobal Variable (Section 4). The GV's Column gives the key, its Label Column the shown name; if it has a Parent Column, cascade works. Even with no extra form-field setup, this column renders the right dropdown.

AdımlarSteps

  1. Connections'ta bir PostgreSQL veya SQLite bağlantısı açın (Test → Save).Create a PostgreSQL or SQLite connection in Connections (Test → Save).
  2. Veri editöründe tabloyu oluşturun/kolonları ekleyin ve verinizi girin.In the Data editor create the table/add columns and enter your data.
  3. Her kolona doğru Orbion Type'ı verin (User/Date/Option…).Set the right Orbion Type per column (User/Date/Option…).
  4. Option kolonlarını bir Global Variable'a bağlayın (Bölüm 4); artık o alan tüm formlarda dropdown olarak gelir.Link Option columns to a Global Variable (Section 4); the field now appears as a dropdown across all forms.

3 · Kimlik ve YetkiIdentity & Access

Amaç ve erişim modeliPurpose & access model

Bu modül kimlerin giriş yapacağını, hangi gruplara/organizasyonlara ait olduklarını ve neyi görüp düzenleyebileceklerini belirler. Üç ana ekran vardır: Users (kullanıcılar), Groups (gruplar) ve Companies (organizasyon/şirket). Erişim bu üçünün birleşiminden doğar:This module defines who can sign in, which groups/organizations they belong to, and what they can see and edit. There are three main screens: Users, Groups and Companies (organization). Access emerges from the combination of all three:

👤 User Role: Admin/UserRole: Admin/User Status · Company Direct yeteneklerDirect capabilities üyemember 👥 Group ÜyelerMembers Yetenekler (miras)Capabilities (inherited) 📲 Portal Appsapp atamasıapp assignment 📦 App Portalda görünürVisible in portal Module → Menu allowedGroups Menü / FormMenu / Form allowedGroups ilegated by allowedGroups son denetimfinal gate Etkin yetenekler (Effective) = kullanıcının Direct yetenekleri ∪ üye olduğu tüm grupların yetenekleri. Kurallar/sorgular/görünürlük koşullarında kullanılır.Effective capabilities = the user's Direct caps ∪ the caps of every group they belong to. Used in rules/queries/visibility conditions. Organizasyon (Şirket › Departman › Yönetici) veri kapsamını besler (sorgularda "My organizations", onaylarda yönetici).Organization (Company › Department › Manager) feeds data scope ("My organizations" in queries, manager in approvals).
Şekil 25.Figure 25. Erişim zinciri: Kullanıcı → Grup → (Portal Apps) App → (allowedGroups) Menü/Form. App'e erişim grubun Portal Apps listesinden gelir; app içindeki menü/formlar ayrıca allowedGroups ile süzülür. Yetenekler kullanıcı + grup birleşiminden (Effective) oluşur.Access chain: User → Group → (Portal Apps) App → (allowedGroups) Menu/Form. App access comes from the group's Portal Apps list; menus/forms inside are further filtered by allowedGroups. Capabilities are the union of user + groups (Effective).

Kullanıcılar (Users)Users

Bir kullanıcının düzenleyicisi üç sekmeden oluşur: General, Security, Custom Fields. Üstte avatar, ad, @loginName, rol rozeti ve durum görünür.A user's editor has three tabs: General, Security, Custom Fields. The header shows the avatar, name, @loginName, a role badge and the status.

AY Ahmet Yılmaz Admin @ahmet.yilmaz · active General Security Custom Fields Role ● Admin User Status Active Passive Locked 🔑 Change Password İlk girişte parola değiştirForce password change Capabilities Direct: isadmin premium Gruptan miras:Inherited: YöneticilerManagers reports Etkin (hepsi):Effective (all): isadmin premium reports
Şekil 26.Figure 26. Kullanıcı editörü — Security sekmesi: Role (Admin/User), Status (Active/Passive/Locked), 🔑 Change Password + "ilk girişte değiştir", ve Capabilities (Direct → gruptan miras → Effective).User editor — Security tab: Role (Admin/User), Status (Active/Passive/Locked), 🔑 Change Password + "force change on next login", and Capabilities (Direct → inherited → Effective).

General sekmesi — kimlik alanlarıGeneral tab — identity fields

AlanFieldAnlamMeaning
First / Last nameAd ve soyad (avatar baş harflerini de besler).First and last name (also feeds the avatar initials).
Login nameGiriş kullanıcı adı (@). Sistem kullanıcılarında kilitlidir.The sign-in username (@). Locked for system users.
Email · Phone · Mobileİletişim bilgileri; e-posta bildirim/şablonlarda kullanılır.Contact details; email is used by notifications/templates.
Company · DepartmentOrganizasyon ataması (Departman, seçili şirkete göre süzülür).Organization assignment (Department is filtered by the chosen company).
ManagerÜst yönetici — org şeması ve onay akışlarında kullanılır.The line manager — used in the org chart and approval flows.
Language · TimezoneKullanıcının dil ve saat dilimi tercihi.The user's language and timezone preference.
Title · Description · TagsÜnvan, not ve etiketler (serbest sınıflandırma).Title, note and tags (free classification).
Kullanıcı tipleriUser typesRole = Admin: App Studio'ya (tasarım/yönetim) erişir. Role = User: yalnız portaldaki uygulamaları kullanır. System (SYS) kullanıcıları silinemez ve loginName'i değiştirilemez. Daha ince yetkiler Capabilities ile verilir (rol yerine/yanında).Role = Admin: can access App Studio (design/admin). Role = User: uses only the portal apps. System (SYS) users can't be deleted and their loginName can't change. Finer permissions come from Capabilities (alongside/instead of role).

Custom FieldsCustom Fields

Yöneticinin tanımladığı ek kullanıcı alanları (text/number/date/select/boolean). Manage Definitions ile alanlar tanımlanır; her kullanıcıda doldurulur.Admin-defined extra user fields (text/number/date/select/boolean). Define them via Manage Definitions; fill them per user.

Self-Registration (Public Signup)Self-Registration (Public Signup)

Kullanıcıların kendi kendine kayıt olabileceği herkese açık bir kayıt komponentidir; web sayfasına gömülebilir ve kaydı tamamlayınca Orbion'da bir kullanıcı oluşturur. Yeni kullanıcının organizasyonu, grubu ve başlangıç durumu Designer'da sabitlenir ve sunucuda zorlanır. Kayıt sonrası davranış form Rules ile yönetilir: onSaveSuccess / onSaveError (yönlendirme, mesaj, e-posta).A public registration component where users sign themselves up; embeddable on a web page, it creates a user in Orbion on completion. The new user's organization, group and initial status are configured in the Designer and enforced server-side. Post-signup behavior is handled by form Rules: onSaveSuccess / onSaveError (redirect, message, email).

Gruplar ve App AtamasıGroups & app assignment

Grup, kullanıcıları toplayan ve onlara hem yetenek hem uygulama erişimi dağıtan birimdir. Dört sekmesi vardır: General (ad, renk, açıklama), Members (üye ekle/çıkar), Capabilities (üyelerin otomatik miras aldığı yetenekler) ve Portal Apps (üyelerin portalda göreceği uygulamalar).A group gathers users and distributes both capabilities and app access to them. It has four tabs: General (name, color, description), Members (add/remove users), Capabilities (caps members inherit automatically), and Portal Apps (the apps members see in the portal).

👥 Grup: Saha EkibiGroup: Field Team Members Capabilities Portal Apps Mevcut uygulamalarAvailable apps 📦 CRM 📦 EnvanterInventory 📦 İK Talepleri 🌐HR Requests 🌐 ekleadd Portal sırası (üstten alta)Portal order (top→bottom) 1 📦 Saha ÇağrılarıField Tickets↑↓ ✕ 2 📦 CRM↑↓ ✕ 3 📦 RaporlarReports↑↓ ✕ Bu gruptaki herkes bu uygulamaları bu sırada portalda görür.Everyone in this group sees these apps, in this order, in the portal.
Şekil 27.Figure 27. Grubun Portal Apps sekmesi = app ataması: soldaki mevcut uygulamalardan ekleyip sağda portal sırasını (↑↓) belirlersiniz. 🌐 = herkese açık (public) uygulama. Gruptaki tüm üyeler bu listeyi alır.A group's Portal Apps tab = app assignment: add from available apps on the left and set the portal order (↑↓) on the right. 🌐 = a public app. All members of the group inherit this list.
İki katmanlı erişimTwo-layer access1) App'e girebilme: grubun Portal Apps listesinden gelir. 2) App içinde ne görünür: menü/form düzeyinde allowedGroups ile süzülür (Bölüm 5–6). Bir öğenin allowedGroups'u boşsa herkese açıktır; doluysa yalnız o gruptakiler görür.1) Reaching an app: comes from the group's Portal Apps list. 2) What's visible inside: filtered per menu/form by allowedGroups (Sections 5–6). If an item's allowedGroups is empty it's public; if set, only those groups see it.

Yetenekler (Capabilities)Capabilities

Yetenekler, izinleri etiketleyen serbest anahtarlardır (ör. isadmin, premium, reports). Kullanıcıya doğrudan verilebilir ya da bir grup üzerinden miras alınır; ikisinin birleşimi Effective (etkin) yeteneklerdir. Kurallar, sorgular ve görünürlük koşullarında "kullanıcının şu yeteneği var mı?" diye sınanır (Bölüm 6.11–6.12).Capabilities are free permission tags (e.g. isadmin, premium, reports). They can be granted directly to a user or inherited via a group; their union is the Effective set. Rules, queries and visibility conditions test "does the user have this capability?" (Sections 6.11–6.12).

Organizasyon (Companies)Organization (Companies)

Companies ekranı şirket ve departman hiyerarşisini tutar. Her kullanıcı bir şirket + departman'a ve bir yöneticiye bağlanır; bu, organizasyon şemasını ve veri kapsamını oluşturur.The Companies screen holds the company and department hierarchy. Each user is linked to a company + department and a manager; this builds the org chart and data scope.

  • Company — ad, kısa ad (shortName), vergi no, logo vb.Company — name, short name, tax id, logo, etc.
  • Department — şirket içinde alt birimler; iç içe (parent) olabilir. Kullanıcı şirketi seçilince departman listesi süzülür.Department — sub-units within a company; can be nested (parent). Selecting a user's company filters the department list.
  • Manager — kullanıcının üstü; onay akışlarında {{user.manager}} olarak da kullanılır.Manager — the user's superior; also used as {{user.manager}} in approval flows.
Veri kapsamıData scopeOrganizasyon bilgisi, sorgularda My organizations değer kaynağıyla "kullanıcının kendi biriminin verisi" gibi kişiye/birime özel görünümler kurmanızı sağlar (Bölüm 6.12).Organization info lets you build unit-scoped views via the My organizations value source in queries — e.g. "data of the user's own unit" (Section 6.12).

Şifre & güvenlik işlemleriPassword & security operations

İşlemOperationAçıklamaDescription
Parola atamaSet passwordYeni kullanıcıda Security sekmesinde ilk parola girilir; parolalar güvenli (hash'li) saklanır, düz metin geri alınamaz.On a new user, the initial password is set on the Security tab; passwords are stored hashed and the plain text is not retrievable.
🔑 Change PasswordMevcut kullanıcıda parolayı sıfırlama (modal). İsteğe bağlı, kullanıcıya e-posta şablonuyla bildirilebilir ({{tempPassword}}, Bölüm 9).Reset an existing user's password (modal). Optionally notified via an email template ({{tempPassword}}, Section 9).
İlk girişte değiştirForce change on next loginKullanıcı bir sonraki girişte parolasını değiştirmeye zorlanır.The user is forced to change the password at next sign-in.
StatusActive (giriş açık) · Passive (devre dışı) · Locked (kilitli — örn. çok sayıda hatalı giriş).Active (can sign in) · Passive (disabled) · Locked (e.g. after too many failed logins).
Last Login · Failed LoginsSalt-okunur izleme: son giriş zamanı ve başarısız deneme sayısı.Read-only tracking: last sign-in time and failed-attempt count.

Kurulum sırasıSetup order

  1. Companies: şirket ve departman yapısını oluşturun.Companies: build the company and department structure.
  2. Groups: rol/ekip gruplarını açın; Capabilities ve Portal Apps'i atayın.Groups: create role/team groups; assign Capabilities and Portal Apps.
  3. Users: hesapları açın (rol, durum, parola), şirket/departman/yönetici ve grup üyeliklerini verin.Users: create accounts (role, status, password), set company/department/manager and group memberships.
  4. App içindeki menü/form erişimini allowedGroups ile inceltin (Bölüm 5–6).Refine menu/form access inside apps via allowedGroups (Sections 5–6).

4 · Global DeğişkenlerGlobal Variables

Global Variable nedir?What is a Global Variable?

Bir Global Variable, bir veritabanı kolonunun değerlerini tüm formlar ve filtreler arasında paylaşılan, önbelleğe alınmış (cached) bir listeye dönüştürür. Açılır listeleri (combobox/filtre) tek bir merkezi kaynaktan beslersiniz: kolonu bir kez tanımlarsınız, her formda tekrar tekrar sorgu yazmazsınız. Üst çubuktaki ⚡ Global Variables düğmesinden yönetilir.A Global Variable turns the values of a database column into a shared, cached list across all forms and filters. You feed dropdowns (combobox/filter) from one central source: define the column once instead of rewriting queries in every form. Managed from the ⚡ Global Variables button in the top bar.

Yeni DeğişkenNew Variable Tüm formlarda paylaşılan, önbellekli DB kolon değerleriCached DB column values shared across all forms Name *Şehir / City Connection *CALL SYSTEM ▾ TTL (minutes)60 Schemapublic ▾ Table *cities ▾ Column * (key)city_code ▾ Label Column (opt.)city_name ▾ Parent Column (cascade)country_id ▾ Fetch ModeCached (TTL) ▾ Enabled Save ← saklanan← stored ← görünen← shown
Şekil 28.Figure 28. Global Variable editörü: Name + Connection → Schema → Table → Column (kademeli). Column = saklanan değer (key), Label Column = listede görünen etiket, Parent Column = cascade için FK. Fetch Mode + TTL önbelleği yönetir.Global Variable editor: Name + Connection → Schema → Table → Column (cascading pickers). Column = stored value (key), Label Column = the shown label, Parent Column = the FK for cascade. Fetch Mode + TTL control caching.

Key / Value (saklanan vs görünen)Key / Value (stored vs shown)

İki kolon ayrımı kritiktir:The two-column distinction is key:

AlanFieldRolüRole
Column (zorunlu)Key — kayda yazılan/sorgulanan değer (ör. city_code = 34).Key — the value stored/queried in the record (e.g. city_code = 34).
Label Column (opsiyonel)Görünen etiket — listede gösterilen ad (ör. city_name = "İstanbul"). Boşsa Column'un kendisi gösterilir.Display label — the name shown in the list (e.g. city_name = "Istanbul"). If blank, the Column itself is shown.
Neden ayrı?Why separate?Kullanıcı okunaklı adı ("İstanbul") görür, ama veritabanına kısa/kararlı anahtar (34) yazılır. Ad değişse bile anahtar sabit kalır.The user sees a readable name ("Istanbul"), but a short/stable key (34) is written to the database. The key stays stable even if the name changes.

Önbellekleme (Caching)Caching

Global Variable'lar form başına değil, veri-kaynağı seviyesinde (connection · schema · table · column) önbelleğe alınır — aynı kolonu kullanan tüm filtreler tek bir önbellek girdisini paylaşır. Bu, açılır listeleri her açılışta yeniden sorgulamadan hızlı tutar.Global Variables are cached at the data-source level (connection · schema · table · column), not per formall filters using the same column share one cache entry. This keeps dropdowns fast without re-querying on every open.

🗄 DBcities.city_code ⚡ CACHETTL 60 dk ● Fresh ● Stale 📄 Form A · Şehir filtresiCity filter 📄 Form B · Şehir alanıCity field 📄 Form C · Rapor filtresiReport filter Üçü de tek önbelleği paylaşırall three share one cache ↻ Refreshönbelleği zorla yenileforce re-fetch Cache durumu: ● Fresh (TTL içinde, taze) · ● Stale (TTL doldu, yenilenecek) · ● Never (hiç çekilmedi). Fetch Mode: Cached (TTL) = TTL süresince önbellekten · Live = her kullanımda DB'ye sorar. Listede değer sayısı (value count) da görünür.
Şekil 29.Figure 29. Önbellek veri-kaynağı seviyesindedir: aynı kolonu kullanan tüm formlar tek girdiyi paylaşır. Cache durumu Fresh/Stale/Never; ↻ Refresh önbelleği zorla yeniler. Fetch Mode Cached (TTL) ya da Live.The cache is at the data-source level: all forms using the same column share one entry. Cache status Fresh/Stale/Never; ↻ Refresh forces a re-fetch. Fetch Mode is Cached (TTL) or Live.

Bağımlı (Cascading) listelerCascading (dependent) lists

Bir Global Variable'a Parent Column (FK) verirseniz, onu kullanan alan/filtre başka bir alanın seçimine göre süzülebilir. Tüketim tarafında alt liste, üst seçime Depends On ile bağlanır. Klasik örnek: Ülke → Şehir → İlçe.If you give a Global Variable a Parent Column (FK), a field/filter using it can be filtered by another field's selection. On the consuming side, the child list is bound to the parent via Depends On. Classic example: Country → City → District.

Tanım (GV)Definition (GV) GV "İlçe / District" Column = district_code Label = district_name Parent Column = city_id Kullanım (form)Use (form) Şehir (üst)City (parent) İstanbul ▾ Depends On = ŞehirCity İlçe (alt) — yalnız İstanbul'unkilerDistrict (child) — only Istanbul's Kadıköy Beşiktaş SonuçResult Şehir = İstanbul seçilinceWhen City = Istanbul, İlçe listesi yalnız o şehrinthe District list shows only ilçelerini gösterirthat city's districts (city_id = 34).
Şekil 30.Figure 30. Cascade: GV'de Parent Column (ör. city_id) tanımlanır; formda alt alan Depends On ile üst alana (Şehir) bağlanır. Üstte İstanbul seçilince alt liste yalnız o şehrin ilçelerini gösterir.Cascade: define a Parent Column on the GV (e.g. city_id); on the form, bind the child field to the parent (City) via Depends On. Picking Istanbul filters the child list to that city's districts.

Kullanım — bir GV'yi alana bağlamakUsage — binding a GV to a field

  • Combobox / List alanı: alanın veri kaynağını (dataLink) Variable yapın ve listeden Global Variable'ı seçin. Seçeneklerin key/label'ı GV'den gelir (Bölüm 6.2).Combobox / List field: set the field's data source (dataLink) to Variable and pick the Global Variable. The options' key/label come from the GV (Section 6.2).
  • Filtre: filtre değerini bir GV'den seçtirin; bağımlıysa Depends On ile üst filtreye bağlayın.Filter: source the filter value from a GV; if dependent, bind it to the parent filter via Depends On.

AdımlarSteps

  1. ⚡ Global Variables+ Add Variable; ad verin.⚡ Global Variables+ Add Variable; name it.
  2. Connection → Schema → Table → Column seçin; gerekiyorsa Label Column ve Parent Column ekleyin.Pick Connection → Schema → Table → Column; add Label Column and Parent Column if needed.
  3. Fetch Mode (Cached/Live) ve TTL'i ayarlayıp Enabled ile kaydedin.Set Fetch Mode (Cached/Live) and TTL, keep it Enabled, and save.
  4. Bir combobox alanında kaynağı Variable seçip bu GV'yi bağlayın; cascade için Depends On verin. Değişiklik sonrası ↻ Refresh ile önbelleği tazeleyin.On a combobox field, set source to Variable and bind this GV; add Depends On for cascade. After changes, ↻ Refresh the cache.

5 · Uygulamalar ve Menüler (Apps)Apps & Menus

Amaç — her şeyin birleştiği yerPurpose — where it all comes together

Bir App (uygulama), tüm yapı taşlarını — formlar, sorgu presetleri, gruplar — son kullanıcının kullandığı tek bir ürüne dönüştürdüğünüz yerdir. Buraya kadar tasarladığınız formları menüler altında düzenler, her menü öğesine bir form + (opsiyonel) preset bağlar, erişimi gruplara açar, görünümü (ikon/renk/tema/menü konumu) belirler ve portal üzerinden yayınlarsınız. Yapı üç katmanlıdır: App → Module → Menu item.An App is where you turn all the building blocks — forms, query presets, groups — into one product the end user actually uses. You arrange the forms you designed under menus, link each menu item to a form + (optional) preset, open access to groups, set the look (icon/color/theme/menu position) and publish via the portal. The structure is three layers: App → Module → Menu item.

UygulamalarApplications Saha YönetimiField MgmtAPP0001 · 2 modülmodules CRMAPP0002 · 3 modülmodules İK TalepleriHR RequestsAPP0003 · 1 modülmodule + New App Saha YönetimiField Management Active ✎ Edit🗑 Delete ModüllerModules · 2 Info ↑↓📁 OperasyonOperationsDEFAULTSaha EkibiField Team✎ 🗑 ↑↓Açık ÇağrılarOpen Issuespreset: Status≠ClosedDEFAULT✎ 🗑 ↑↓Benim KayıtlarımMy Recordspreset: AssignedTo=current✎ 🗑 + Add Form ↑↓📁 RaporlarReports✎ 🗑 Aylık ÖzetMonthly Summary + Add Module
Şekil 33.Figure 33. App builder: solda uygulama listesi (ikon/renk + modül sayısı); sağda seçili uygulamanın Modüller ağacı. Her modül içinde menü öğeleri (form + preset) bulunur. ↑↓ sıralar, DEFAULT açılış ekranı, grup chip'leri erişim, ✎/🗑 düzenle/sil.App builder: an app list on the left (icon/color + module count); the selected app's Modules tree on the right. Each module holds menu items (form + preset). ↑↓ reorders, DEFAULT is the landing screen, group chips are access, ✎/🗑 edit/delete.

5.1 · Uygulama oluşturma5.1 · Creating an app

+ New App ile bir uygulama açarsınız. Ayarlar uygulamanın kimliğini ve portaldaki görünümünü belirler:+ New App creates an application. Its settings define the app's identity and portal look:

Yeni UygulamaNew Application Icon Color Uygulama Adı *Application Name *Saha YönetimiField Management DescriptionSaha ekibi çağrı & raporları…Field team tickets & reports… Appearance Dark Light System Public AccessEnable Public Accessgrup izni olmadan açılabiliropen without group permissions Menüde kayıt sayısıShow Record Countsher menü öğesindeki kayıt adedirecord count per menu item Menü KonumuMenu PositionSolLeftÜstTop
Şekil 34.Figure 34. Uygulama oluşturma: İkon · Renk · Ad · Açıklama · Tema (Dark/Light/System) · Public Access (grupsuz erişim) · Menüde kayıt sayısı · Menü Konumu (Sol/Üst). Kaydedince benzersiz bir App ID ve Launch URL üretilir.Creating an app: Icon · Color · Name · Description · Theme (Dark/Light/System) · Public Access (no-group entry) · Record counts · Menu Position (Left/Top). On save a unique App ID and a Launch URL are generated.
AyarSettingAnlamMeaning
Icon · ColorUygulamanın listede ve portalda görünen simgesi ve rengi.The app's icon and color shown in the list and portal.
Name · DescriptionUygulama adı ve kısa açıklaması.Application name and a short description.
Appearance (Theme)Portal teması: Dark · Light · System.Portal theme: Dark · Light · System.
Public AccessAçıkken uygulama grup izni gerektirmeden açılır (herkese açık).When on, the app opens without group permissions (public).
Show Record CountsMenü öğelerinin yanında eşleşen kayıt sayısı rozeti.A badge of matching record count next to menu items.
Menu PositionNavigasyon sol kenar çubuğunda mı yoksa üst yatay barda mı.Navigation on the left sidebar or a top horizontal bar.
Launch URLOtomatik üretilen çalıştırma bağlantısı (kopyalanıp paylaşılır).An auto-generated run link (copy & share).

5.2 · Modüller (menü grupları)5.2 · Modules (menu groups)

Modüller, menü öğelerini gruplayan başlıklardır (portal menüsünde bölüm başlığı gibi). + Add Module ile eklenir.Modules are headings that group menu items (like a section header in the portal menu). Add via + Add Module.

AyarSettingAnlamMeaning
Name · IconModül başlığı ve simgesi.Module heading and icon.
DefaultUygulama açılınca öne çıkan modül (yalnız biri).The module featured when the app opens (only one).
CollapsibleMenüde kapalı (daraltılmış) başlar.Starts collapsed in the menu.
Group AccessModülü görebilecek gruplar (boş = herkes).Groups that can see the module (empty = everyone).

5.3 · Menü öğeleri (form bağlama)5.3 · Menu items (linking forms)

Her menü öğesi bir form tasarımını menüye getirir. + Add Form ile eklenir; formu, başlığını, presetini ve erişimini burada belirlersiniz.Each menu item brings a form design into the menu. Add via + Add Form; here you set the form, its title, preset and access.

Form EkleAdd Form Form Tasarımı *Form Design *Çağrı ListesiTicket List FRM0000018 · public.tickets Menü EtiketiMenu LabelAçık ÇağrılarOpen Issues Form BaşlığıForm TitleAçık ÇağrılarOpen Issues Query PresetQuery Preset (opt.) Açık ÇağrılarOpen Issues (Status ≠ Closed) ▾ — tüm satırlar — · Approval (Waiting/Approved…) · Kayıtlı presetler— all rows — · Approval (Waiting/Approved…) · Saved presets Varsayılan form yap (açılış)Set as default form (landing) Kayıt sayısı rozeti gösterShow record count badge Grup ErişimiGroup Access (opt.) Saha EkibiField Team YönetimMgmt Boş = herkes; seçiliyse yalnız o gruplar görür.Empty = everyone; if set, only those groups see it.
Şekil 35.Figure 35. Menü öğesi (form) ekleme: Form Tasarımı + Menü Etiketi + Form Başlığı + Query Preset (— tüm satırlar — / Approval / kayıtlı preset) + Varsayılan + Sayı rozeti + Grup Erişimi.Adding a menu item (form): Form Design + Menu Label + Form Title + Query Preset (— all rows — / Approval / saved preset) + Default + Count badge + Group Access.
AlanFieldAçıklamaDescription
Form Design *Bu öğenin açacağı form tasarımı (Bölüm 6).The form design this item opens (Section 6).
Menu LabelMenüde görünen ad (boşsa form adı).The name shown in the menu (defaults to form name).
Form TitleAçıldığında üst çubukta görünen başlık.The title shown in the toolbar when opened.
Query PresetAçılışta uygulanan filtre: — tüm satırlar —, Approval (Waiting/Approved/Rejected/All) veya kayıtlı bir preset (Bölüm 6.12).A filter applied on open: — all rows —, Approval (Waiting/Approved/Rejected/All), or a saved preset (Section 6.12).
DefaultModül/uygulama açılınca gelen ekran.The screen shown when the module/app opens.
Count badgeMenüde eşleşen kayıt sayısı rozeti.A matching-record-count badge in the menu.
Group AccessBu öğeyi görebilecek gruplar (boş = herkes).Groups that may see this item (empty = everyone).
⭐ Aynı form, farklı menüler⭐ Same form, different menus Tek bir form tasarımını farklı presetlerle birden çok menü öğesine bağlayabilirsiniz: "Açık Çağrılar", "Benim Kayıtlarım", "Bekleyen Onaylar"… hepsi aynı formdan doğar. Menü yapısını kurmak = doğru (form + preset) çiftlerini dizmek (Bölüm 6.12). You can attach a single form design to multiple menu items with different presets: "Open Issues", "My Records", "Pending Approvals"… all from one form. Building the menu = arranging the right (form + preset) pairs (Section 6.12).

5.4 · Sıralama, erişim ve portal sonucu5.4 · Ordering, access & the portal result

Modülleri ve menü öğelerini ↑↓ ile sıralarsınız; bu sıra portalda birebir görünür. Erişim iki katmanlıdır: uygulamaya girme grubun Portal Apps'inden (Bölüm 3), uygulama içindeki her modül/öğenin görünmesi Group Access (allowedGroups)'tan gelir. Sonuç, son kullanıcının gördüğü portaldır:You order modules and menu items with ↑↓; that order shows verbatim in the portal. Access is two layers: reaching the app comes from the group's Portal Apps (Section 3), and each module/item's visibility comes from Group Access (allowedGroups). The result is the portal the end user sees:

BUILDERBUILDER App: Saha YönetimiField Mgmt 📁 OperasyonOperations Açık ÇağrılarOpen Issues Benim KayıtlarımMy Records 📁 RaporlarReports Aylık ÖzetMonthly Summary yayınlapublish PORTAL (son kullanıcı)PORTAL (end user) Saha YönetimiField Mgmt OPERASYONOPERATIONS Açık ÇağrılarOpen Issues Benim KayıtlarımMy Records RAPORLARREPORTS Aylık ÖzetMonthly Summary Açık ÇağrılarOpen Issues Status ≠ Closed presetiyle filtrelifiltered by the Status ≠ Closed preset
Şekil 36.Figure 36. Builder'daki App→Module→Menu item yapısı, portalda son kullanıcının gezindiği menüye birebir dönüşür. Varsayılan öğe (Açık Çağrılar) açılışta gelir ve preseti uygulanır.The App→Module→Menu item structure in the builder maps verbatim to the menu the end user navigates in the portal. The default item (Open Issues) opens first with its preset applied.
İki katmanlı erişim (hatırlatma)Two-layer access (recap)1) Uygulamayı görmek/açmak → kullanıcının grubunun Portal Apps listesinde olmalı (Bölüm 3). 2) Uygulama içinde modül/menü öğesini görmek → öğenin Group Access'i boşsa herkes, doluysa yalnız o gruplar.1) Seeing/opening the app → the user's group must have it in Portal Apps (Section 3). 2) Seeing a module/menu item inside → if the item's Group Access is empty everyone sees it, otherwise only those groups.

AdımlarSteps

  1. Apps → + New App: ikon/renk/ad, tema, public access ve menü konumunu ayarlayın.Apps → + New App: set icon/color/name, theme, public access and menu position.
  2. + Add Module ile menü gruplarını oluşturun (biri DEFAULT).Create menu groups with + Add Module (one DEFAULT).
  3. Her modüle + Add Form ile menü öğeleri ekleyin: form + (preset) + başlık + grup erişimi. Aynı formu farklı presetlerle çoğaltın.Add menu items to each module via + Add Form: form + (preset) + title + group access. Reuse a form with different presets.
  4. ↑↓ ile sırayı ve DEFAULT açılış ekranını ayarlayın.Set order with ↑↓ and the DEFAULT landing screen.
  5. Grubun Portal Apps'ine ekleyip (Bölüm 3) Launch URL'den portalı test edin.Add it to a group's Portal Apps (Section 3) and test the portal from the Launch URL.

5.5 · App Export / Import (Taşınabilirlik)App Export / Import (Portability)

Bir uygulamayı tüm bağımlılıklarıyla (formlar, query'ler, global değişkenler, menü yapısı) tek bir paket olarak dışa aktarıp başka bir ortama (örn. Geliştirme → Üretim) taşıyabilirsiniz.Export an app with all its dependencies (forms, queries, global variables, menu structure) as a single package and move it to another environment (e.g., Dev → Prod).

Neden gerekli — mantığı. Bir uygulama tek bir nesne değildir; birbirine iç id'lerle bağlı bir nesne ağıdır (form → query → global değişken → menü). Tek bir formu elle kopyalamak bağımlılıklarını geride bırakır ve id'ler ortamdan ortama farklı olduğu için referanslar kırılır. Export/Import bu sorunu dört adımda çözer:Why it matters — the logic. An app is not a single object; it is a graph of objects linked by internal ids (form → query → global variable → menu). Copying one form by hand leaves its dependencies behind, and because ids differ between environments the references break. Export/Import solves this in four steps:

  1. Kapanış (closure) toplama — uygulamadan erişilen tüm formlar, query'ler ve GV'ler bir JSON ağacında toplanır; hiçbir bağımlılık dışarıda kalmaz.Collect the closure — every form, query and GV reachable from the app is gathered into one JSON tree; no dependency is left out.
  2. Origin damgası — her nesne kaynak kimliğiyle (originId) damgalanır; böylece "aynı mantıksal nesne" iki ortamda da tanınır.Origin stamp — each object is stamped with its source identity (originId), so the "same logical object" is recognized in both environments.
  3. Referans yeniden yazımı — import'ta iç id referansları hedef ortamın yeni id'lerine yeniden bağlanır; ağ kırılmadan kurulur.Reference rewrite — on import, internal id references are rebound to the target's new ids; the graph is rebuilt intact.
  4. Idempotent yükleme — ikinci import aynı originId'leri günceller, yeni nesneleri ekler. Yani Dev → Prod terfisi tekrarlanabilirdir.Idempotent load — a second import updates the same originIds and adds new objects. So Dev → Prod promotion is repeatable.
Dev — KaynakDev — Source App: Saha YönetimiApp: Field Mgmt ▤ Forms (4) ⛃ Queries (3) ◇ Global Variables (5) ☰ Menu / Modules id ile birbirine bağlılinked by id Export app-export.json closure · originId damgalıclosure · originId stamped ▤ form · origin: a1 └ ⛃ query · origin: q7 └ ◇ gv · origin: g3 ▤ form · origin: a2 ☰ menu · origin: m1 Bağlantılar: ad bazında, şifresizConnections: by name, no passwords Import Prod — HedefProd — Target App: Saha YönetimiApp: Field Mgmt ▤ Formseşleştimatched ⛃ Querieseşleştimatched ◇ Global Varsyeninew ☰ Menu / Modules id'ler yeniden yazıldıids rewritten 2. import = güncelleme (idempotent): aynı originId'ler güncellenir, yeniler eklenir2nd import = update (idempotent): same originIds updated, new ones added
Şekil 37.Figure 37. Export / Import akışı: Dev ortamındaki uygulama, tüm bağımlılık kapanışıyla (formlar · query'ler · GV'ler · menü) originId damgalı bir JSON paketine alınır; hedefte iç referanslar yeni id'lere yeniden yazılır, bağlantılar ad bazında şifresiz eşlenir. İkinci import aynı nesneleri günceller (idempotent).Export / Import flow: the Dev app is packed — with its full dependency closure (forms · queries · GVs · menu) — into an originId-stamped JSON; in the target, internal references are rewritten to new ids and connections matched by name, password-free. A second import updates the same objects (idempotent).
KavramConceptAnlamMeaning
Export paketiExport packageUygulamanın kapanışı (closure): bağlı tüm formlar, query'ler ve GV'ler JSON ağacı olarak toplanır.The app's closure: all linked forms, queries and GVs are gathered as a JSON tree.
Origin damgasıOrigin stampHer nesne kaynak ortam kimliğiyle (originId) damgalanır; tekrar import'ta eşleştirme/güncelleme buna göre yapılır.Each object is stamped with its source identity (originId); re-import matches/updates accordingly.
Referans yeniden yazımıReference rewriteImport sırasında iç referanslar (form↔query↔GV id'leri) hedef ortamdaki yeni id'lere yeniden bağlanır.On import, internal references (form↔query↔GV ids) are rewritten to the target environment's new ids.
Bağlantı haritasıConnection mapVeritabanı bağlantıları şifresiz taşınır; hedefte ad bazında eşlenir, şifreler orada güvenle girilir.Database connections move without passwords; matched by name in the target, where passwords are entered securely.
⭐ Dev → Prod akışı⭐ Dev → Prod flow Geliştirmede hazırlanan uygulamayı export edip üretime import edin; ikinci import'ta aynı originId'ler güncellenir, yeni nesneler eklenir — manuel kopyalama biter. Export the app built in Dev and import it into Prod; a second import updates the same originIds and adds new objects — no more manual copying.

Bir uygulamaya portalı atlayarak doğrudan erişen token'lı bağlantılar üretebilirsiniz. Token geçerliyse kullanıcı doğrudan uygulamada açılır; değilse uygulamanın içine gömülü Login Form komponenti devreye girer.Generate token-based links that open an app directly, bypassing the portal. If the token is valid the user lands straight in the app; otherwise the embedded Login Form component takes over.

Nedir, neden — mantığı. Normalde kullanıcı bir uygulamaya portal üzerinden, merkezi girişten sonra ulaşır. Bazen ise bir kişiye (çoğu kez dış kullanıcıya) tüm portalı açmadan tek bir uygulamaya doğrudan bağlantı vermek istersiniz: bir başvuru formu, bir müşteri portalı vb. Erişim linki bunu bir token ile yapar. Mantık şudur: link açıldığında token geçerliyse kullanıcı doğrudan o uygulamaya düşer; değilse (süresi dolmuş ya da yok) merkezi giriş sayfasına yönlendirmek yerine, uygulamanın içindeki gömülü Login Form kimlik bilgisini toplar. Her iki durumda da oturum o tek uygulamaya sabitlenir (App Scope); kullanıcı başka uygulamalara geçemez. Yetki (token + grup izinleri) sunucuda doğrulanır; çıkışta (logout) scope temizlenir ve gömülü girişe dönülür.What it is, why — the logic. Normally a user reaches an app through the portal after a central sign-in. Sometimes you want to give someone (often an external user) a direct link to a single app — an application form, a customer portal — without exposing the whole portal. An access link does this with a token. The logic: when the link opens, if the token is valid the user drops straight into that app; if not (expired or none), instead of redirecting to the central login page, the embedded Login Form inside the app collects credentials. In both cases the session is hard-scoped to that one app (App Scope); the user cannot reach other apps. Authorization (token + group permissions) is verified server-side; on logout the scope is cleared and the user returns to the embedded login.

Token'lı linkToken link e-posta / QR ile paylaşılırshared by email / QR TokenToken geçerli?valid? EVETYES HAYIRNO Uygulama açılırApp opens App Scope yalnız bu uygulama · başka app'e geçilemezthis app only · no other apps Gömülü Login FormEmbedded Login Form app içinde · ayrı sayfa yokinside the app · no separate page Yetki doğrulaAuthorize token + grup · sunucudatoken + group · server-side geçerseif ok Logout → App Scope bağlamı temizlenir, gömülü girişe dönülür.Logout → the App Scope context is cleared, returning to the embedded login.
Şekil 38.Figure 38. Erişim linki karar akışı: token'lı link açılır → token geçerliyse uygulama doğrudan açılır (App Scope ile o uygulamaya sabit); geçerli değilse uygulama içindeki gömülü Login Form devreye girer, yetki (token + grup) sunucuda doğrulanır ve geçerse uygulamaya geçilir. Çıkışta scope temizlenir.Access-link decision flow: the token link opens → if the token is valid the app opens directly (hard-scoped via App Scope); if not valid, the in-app embedded Login Form takes over, authorization (token + group) is checked server-side, and on success the user enters the app. Logout clears the scope.
ÖğeItemAnlamMeaning
Token'lı linkToken linkUygulamaya portal-bypass doğrudan giriş bağlantısı; e-posta/QR ile paylaşılır.A portal-bypass direct entry link to the app; shared by email/QR.
Login FormUygulama içine gömülen yekpare giriş komponenti (ayrı login sayfasına gitmeden).A self-contained sign-in component embedded inside the app (no separate login page).
App ScopeOturum yalnızca o uygulamaya sabitlenir (hard-scope); kullanıcı başka uygulamalara geçemez.The session is hard-scoped to that app; the user cannot reach other apps.
YetkiAuthorizationToken + grup izinleri sunucuda doğrulanır; yetkisiz erişim reddedilir. Çıkış (logout) scope'lu bağlamı temizler.Token + group permissions are verified server-side; unauthorized access is denied. Logout clears the scoped context.

6 · Formlar ve DesignerForms & Designer

AmaçPurpose

Veriyi gösteren ve düzenleten ekranlar tasarlamak. Designer; sol palet (komponentler), orta tuval (yerleşim) ve sağ özellik panelinden oluşur.Design the screens that display and edit data. The Designer has a left palette (components), a center canvas (layout) and a right properties panel.

Form temelleriForm basics

  • Data sourceformun ana bağlantı + tablosu. Komponentler bunu miras alır.the form's connection + table. Components inherit it.
  • Layout12 kolonluk ızgara; her komponentin width ve order'ı vardır.a 12-column grid; each component has a width and order.
  • Rules & buttonskoşullu görünürlük, validasyon ve aksiyon butonları.conditional visibility, validation, and action buttons.
1 Palette ▦ Table ▤ Chart ⊞ Board ▦ Calendar ⊿ Tree ▣ Viewer 2 Canvas (12-col grid) Table Chart Calendar Tree▸ Root ▸ Child • Leaf 3 Properties Data Appear. Link Connection Start field ? Color by 4
Şekil 3.Figure 3. Designer üç bölmeli: 1 Palet · 2 Tuval (12-kolon ızgara) · 3 Özellikler (Data/Appearance/Link sekmeleri). 4 Her alanın yanında ? yardım açıklaması.The Designer has three panes: 1 Palette · 2 Canvas (12-column grid) · 3 Properties (Data/Appearance/Link tabs). 4 Every field has a ? helper.

Design ve Live modlarıDesign & Live modes

Designer'ın üst çubuğunda iki mod düğmesi vardır: ◳ Design ve ▶ Live. Aynı formu iki açıdan görürsünüz — biri kurguladığınız, diğeri son kullanıcının gördüğü hâl.The Designer's top bar has two mode buttons: ◳ Design and ▶ Live. You see the same form from two angles — the one you build, and the one your end user sees.

  • ◳ Designkurgu tuvali. Komponentleri sürükler, 12-kolon ızgaraya yerleştirir, sağ panelden veri/görünüm/link, kural ve butonlarını ayarlarsınız. Tabloyu, grafiği, takvimi burada temsilî yer-tutucu (placeholder) olarak görürsünüz — gerçek veri çekilmez, yalnızca yerleşim ve yapı.the design canvas. You drag components onto the 12-column grid and configure their data/appearance/link, rules and buttons from the right panel. Data components (table, chart, calendar) appear as placeholders here — no real data is queried, only layout and structure.
  • ▶ Livecanlı önizleme. Kaydedilmiş formu, portalda son kullanıcının gördüğüyle birebir aynı şekilde gömülü bir çerçevede render eder: gerçek veri, gerçek komponentler, tıklanabilir/çalışır hâlde. Yaptığınız tasarımı yayına almadan burada görürsünüz.the live preview. It renders the saved form in an embedded frame exactly as the end user sees it in the portal: real data, real components, fully interactive. You see your design as it will actually run — before publishing.
◳ Design ▶ Live ◳ Design — kurgu tuvalibuild canvas ▦ Tablo (yer-tutucu)▦ Table (placeholder) ▤ Grafik▤ Chart ▦ Takvim▦ Calendar 💾 Kaydet💾 Save ▶ Live — portal görünümüportal view TSK-001 · Açık · Ahmet Y.TSK-002 · Bekliyor · Elif D.TSK-003 · Açık · Mert K.
Şekil 3b.Figure 3b. Aynı form iki modda: Design'da komponentler yer-tutucu, Live'da gerçek veriyle portal görünümü. Kaydet ile aradaki köprü kurulur.The same form in two modes: in Design components are placeholders; in Live it's the portal view with real data. Save bridges the two.
Önce kaydet, sonra LiveSave first, then LiveLive, kaydedilmiş formu gösterir — son kaydınızı portaldaki gibi render eder. Kaydedilmemiş değişiklikler ("Unsaved changes") Live'a yansımaz; önce Kaydet, sonra ▶ Live'a geçin. Live, formu tam olarak çalışma zamanındaki (run.html) gibi çizdiği için gerçek veri, kurallar ve butonlar burada test edilir.Live shows the saved form — it renders your last save just like the portal. Unsaved changes won't appear in Live; Save first, then switch to ▶ Live. Because Live draws the form exactly as the runtime (run.html) does, real data, rules and buttons are what you test here.

6.1 · Komponent listesi (özet)Component overview

KomponentComponentKullanımUse
Field (text, number, date, combobox, picker…)Tekil veri girişi/gösterimi.Single data entry/display.
TableSatır listesi; arama, sıralama, sayfalama, satır seçimi.Row list; search, sort, paging, row selection.
Chart (bar, line, area, pie, donut, number, gantt)Toplulaştırılmış görselleştirme; drill-through.Aggregated visualization; drill-through.
BoardKanban; sürükle-bırak ile durum değişimi.Kanban; drag-drop status change.
CalendarZaman ekseni; aylık/haftalık/günlük, spanning bar. DetayTime axis; month/week/day, spanning bars. Details
TreeKendine-referanslı hiyerarşi. DetaySelf-referencing hierarchy. Details
Viewer (PDF, Office, image, video, audio, MD, HTML, code)Dosya/içerik gösterimi.File/content display.
Panel / TabDiğer komponentleri gruplayan kapsayıcılar.Containers that group other components.
Ortak desenCommon patternVeriye bağlı komponentler aynı sekmeli yapıyı kullanır: Data (bağlantı + alan eşlemeleri), Appearance (görünüm), Link (tıklayınca form açma). Her alanın yanında ? yardım ipucu vardır.Data-bound components share the same tabbed structure: Data (connection + field mappings), Appearance, and Link (open a form on click). Every field has a ? helper tooltip.

Sürükle-bırak yerleştirme. Designer'da komponentler sürükle-bırak ile yerleştirilip yeniden sıralanır: paletten canvas'a bırakma, mevcut komponentleri yeniden sıralama, bir paneli içine/dışına taşıma; seçili komponenti Delete ile silme, Ctrl+D ile çoğaltma.Drag-and-drop placement. In the Designer, components are placed and reordered by drag-and-drop: drop from the palette onto the canvas, reorder existing components, move into/out of a panel; delete the selected component with Delete, duplicate with Ctrl+D.

6.2 · Alan komponentleri (Fields)Field components

Amaç: Tekil veri girişi/gösterimi. Her alanın Field Name'i formun tablosundaki bir kolona karşılık gelir; kaydedince o kolona yazılır.Purpose: Single value entry/display. Each field's Field Name maps to a column in the form's table and is written back on save.

Her alanda ortak özelliklerProperties common to all fields

ÖzellikPropertyAçıklamaDescription
Field NameYazılacak DB kolonu.The DB column to write.
Label / Hide labelEtiket metni / etiketi gizle.Label text / hide the label.
RequiredZorunlu (Rules ile dinamik de yapılabilir).Mandatory (can be made dynamic via Rules).
Read-only / DisabledSalt-okunur.Read-only.
Default valueAçılışta varsayılan (sabit, Now, Current User…).Default on open (fixed, Now, Current User…).
Placeholder / Help textİpucu metinleri.Hint texts.
Width12-kolon ızgaradaki genişlik.Width on the 12-column grid.
VisibilityRules ile koşullu göster/gizle/aktif et (Bölüm 6.11).Conditional show/hide/enable via Rules (Section 6.11).

Alan tipleriField types

TipTypeKullanımUse
TextTek satır metin.Single-line text.
Textarea / Rich textÇok satır / biçimli metin (toolbar, büyüt/küçült).Multi-line / formatted text (toolbar, maximize).
NumberSayısal; blur'da biçimlendirme.Numeric; display formatting on blur.
DateMod: date, datetime, datetime-seconds, time.Mode: date, datetime, datetime-seconds, time.
CheckboxBoolean.Boolean.
Combobox / ListAçılır seçim. Kaynak: DB sorgusu, Global Variable veya statik. Arama açılabilir.Dropdown. Source: DB query, Global Variable or static. Optional search.
Org / Group / User pickerOrganizasyon, grup veya kullanıcı seçici; canlı arama ve avatar.Organization, group or user picker; live search and avatar.
File uploadDosya yükleme; gizli/disabled olsa da mevcut dosyaları gösterir.File upload; shows existing files even when hidden/disabled.
Image / Static imageYüklenen görsel / sabit görsel.Uploaded image / fixed image.
BadgeRenkli etiket (durum); renk Rules → Set Style ile dinamik olabilir.Colored status tag; color can be dynamic via Rules → Set Style.
Sequence (auto-id)Otomatik artan kimlik; salt-okunur. Güncellemelerde PK olarak kullanılır.Auto-increment id; read-only. Used as the PK for updates.
Label / Divider / SpacerGörsel düzen öğeleri (veriye bağlı değil).Layout-only elements (no data).

Açılır liste seçenek kaynağı (Combobox / List)Dropdown option source (Combobox / List)

Bir açılır listenin seçenekleri üç kaynaktan gelebilir. Ayrıca iki arama modu vardır:A dropdown's options can come from three sources. There are also two search modes:

  • Enable Searchyüklenmiş seçenekler arasında yerel filtre kutusu.a local filter box over the already-loaded options.
  • Live Searchkullanıcı yazdıkça DB'den sorgular; binlerce kayıtlı alanlar için. Seçilen değer metin olarak gösterilir.queries the DB as the user types; for fields with thousands of records. The selected value shows as text.
KaynakSourceYapılandırmaConfiguration
DB (veritabanı)(database)Connection (boşsa formun bağlantısı) → SchemaTableLabel Field (ekranda görünen) + Id Field (kaydedilen değer). Id Field boşsa Label hem görünür hem değer olur.Connection (form's if blank) → SchemaTableLabel Field (shown text) + Id Field (stored value). If Id Field is blank, the Label is used as both display and value.
Global Variable Önceden tanımlı bir global değişkeni seç (Bölüm 4'te tablo.kolon olarak tanımlı). Aynı listeyi birçok formda tek yerden yönetmek için idealdir; değişiklik her yere yansır.Pick a predefined global variable (defined as table.column in Section 4). Ideal to manage the same list centrally across many forms; a change propagates everywhere.
Static (sabit)(fixed)Satır başına bir seçenek. Değer ve etiketi ayırmak için id|Etiket formatı (id verilmezse etiket değer olur). Örn: 1|Açık.One option per line. Use id|Label to separate value and text (if no id, the label is the value). e.g. 1|Open.

Bağlı (cascading) alanlarDependent (cascading) fields

Bir açılır listeyi başka bir alanın değerine göre süzmek için Cascade — Parent field ayarını kullanın: üst alan değişince alt listenin seçenekleri yeniden filtrelenir.To filter a dropdown by another field's value, use Cascade — Parent field: when the parent field changes, the child list's options re-filter.

ÖrnekExampleÜlke seçilince Şehir listesi yalnız o ülkenin şehirlerini gösterir; KategoriAlt kategori. Global Variable kaynağında bağımlılık, değişkenin parent alanıyla da kurulabilir (Bölüm 4).Selecting Country shows only that country's Cities; CategorySubcategory. With a Global Variable source, the dependency can also be defined via the variable's parent (Section 4).

User / Group / Organization seçicileriUser / Group / Organization pickers

Bu alanlar bir kişi, grup veya organizasyon seçtirir. Field Name kolonuna seçilenin ID'si yazılır; ekranda ad (ve kullanıcıda avatar) gösterilir. Hepsinde Enable Search / Live Search ve Placeholder vardır.These fields let the user pick a person, group or organization. The selected ID is written to the Field Name column; the name (and avatar for users) is shown. All support Enable Search / Live Search and a Placeholder.

SeçiciPickerEk ayarlarExtra settings
🏢 OrganisationOrganizasyon hiyerarşisinden seçim.Pick from the organization hierarchy.
👥 GroupGrup (rol/ekip) seçimi.Pick a group (role/team).
👤 User User Scope (Show): Tümü · yalnız grup üyeleri · grupsuz kullanıcılar.
Dependencies (cascade): Filter by Organisation field → yalnız seçilen org'daki kullanıcılar; Filter by Group field → yalnız seçilen grubun üyeleri.
User Scope (Show): All · only users in a group · non-group users.
Dependencies (cascade): Filter by Organisation field → only users in the selected org; Filter by Group field → only members of the selected group.
Rules ileWith RulesBu alanları kurallarla otomatik doldurabilirsiniz: Current User, Set to User/Group/Org, veya seçilenin bir özelliğini (e-posta, yönetici, departman) başka bir alana yazma (Bölüm 6.11).You can auto-fill these via rules: Current User, Set to User/Group/Org, or write a property (email, manager, department) of the selection into another field (Section 6.11).

Tipe özel özelliklerType-specific properties

TipTypeÖzel ayarlarSpecific settings
DateMod: date (yalnız tarih) · datetime · datetime-seconds · time.Mode: date · datetime · datetime-seconds · time.
NumberSayısal giriş; odaktan çıkınca (blur) görüntü biçimlendirme.Numeric entry; display formatting on blur.
Textarea / Rich textÇok satır / biçimli (toolbar); yükseklik ve büyüt/küçült.Multi-line / formatted (toolbar); height and maximize/restore.
BadgeRenkli durum etiketi; rengi Rules → Set Style ile değere göre dinamik yapın.Colored status tag; make the color dynamic by value via Rules → Set Style.
File uploadDosya yükleme; gizli/disabled olsa bile mevcut dosyalar görünür.File upload; existing files remain visible even when hidden/disabled.
SequenceOtomatik artan kimlik; salt-okunur. Güncellemelerde birincil anahtar olarak kullanılır.Auto-increment id; read-only. Used as the primary key for updates.

Picture / Avatar alanı. Formlara fotoğraf/avatar alanı eklenebilir: dosya yükleme veya cihaz kamerasından çekim. Profil resmi ve kayıt görselleri için kullanılır.Picture / Avatar field. Forms can include a photo/avatar field: upload a file or capture from the device camera — used for profile pictures and record images.

6.3 · Table

Amaç: Bir tablonun satırlarını liste olarak göstermek; arama, sıralama, sayfalama, satır seçimi, hücre linkleri ve değere göre renklendirme. Dört sekmesi vardır: Data · Columns · Appearance · Behavior.Purpose: Show a table's rows as a list; search, sort, paging, row selection, cell links and value-based coloring. It has four tabs: Data · Columns · Appearance · Behavior.

Table — koşullu biçimlendirmeTable — conditional formatting
Şekil 7.Figure 7. Table (gerçek çıktı). Durum kolonu Pill stiliyle (Açık=yeşil, Bekliyor=turuncu, Kapandı=gri), Öncelik yazı rengiyle (Yüksek=kırmızı), Yüksek öncelikli satır kırmızı tonla (Row Coloring) ve üstte arama. Veriler örnektir.Table (actual output). The Status column uses Pill style (Open=green, Pending=amber, Closed=gray), Priority uses text color (High=red), the High-priority row is tinted red (Row Coloring), and search is on top. Data is illustrative.

Data

  • Table — bu tablonun kaynağı. Boş bırakılırsa formun tablosu kullanılır; farklı bir tablo seçilirse bağımsız (child) tablo olur.Table — this table's source. If blank, the form's table is used; if a different table is chosen it becomes a standalone (child) table.
  • Link Parameters — bağımsız tabloyu ana satıra bağla (Parent→Child); master-detay (Bölüm 6.10).Link Parameters — bind a standalone table to the master row (Parent→Child); master-detail (Section 6.10).

Columns — kolon özellikleriColumns — per-column properties

ÖzellikPropertyAçıklamaDescription
FieldGösterilecek kaynak kolon.The source column to display.
LabelSütun başlığı.Column header text.
SortableBaşlığa tıklayınca sırala.Click header to sort.
WidthSütun genişliği.Column width.
FormatKoşullu biçimlendirme (aşağıda).Conditional formatting (below).
LinkHücreyi tıklanır yap (aşağıda).Make the cell clickable (below).

Koşullu biçimlendirme (hücre kuralları)Conditional formatting (cell rules)

Bir kolonun hücrelerini değerine göre renklendirir. Önce bir Stil seçilir, sonra kural listesi tanımlanır. İlk eşleşen kural kazanır.Colors a column's cells by value. First pick a Style, then define a list of rules. The first matching rule wins.

Stil (mode)Style (mode)SonuçResult
PillDeğer renkli bir etiket/rozet olarak gösterilir.The value shows as a colored label/badge.
Cell backgroundHücrenin arka planı renklenir.The cell background is colored.
Text colorYalnız yazı rengi değişir.Only the text color changes.

Her kural = Operatör + Değer + Arka plan rengi + Yazı rengi. Operatörler: = · · > · < · · · contains · empty · not empty. (empty/not empty değer almaz.)Each rule = Operator + Value + Background + Text color. Operators: = · · > · < · · · contains · empty · not empty. (empty/not empty take no value.)

ÖrnekExampleStatus kolonu · Stil = Pill · kurallar: = "Open" → yeşil · = "Pending" → turuncu · = "Closed" → gri.Status column · Style = Pill · rules: = "Open" → green · = "Pending" → amber · = "Closed" → gray.

Satır renklendirme (Row Coloring)Row coloring (Row rules)

Appearance sekmesinde: tüm satırı bir değere göre renklendirir. Her kural Alan + Operatör + Değer → Satır rengi. Yine ilk eşleşen kazanır.On the Appearance tab: colors the whole row by a value. Each rule is Field + Operator + Value → Row color. Again, first match wins.

ÖrnekExamplePriority = "High" → kırmızı tonu · Status = "Closed" → soluk gri.Priority = "High" → red tint · Status = "Closed" → muted gray.

Bir kolonu tıklanır yapar. Type: Navigate / Open Window · Form (açılacak) · pencere için başlık, konum (Center/Left/Right/Absolute), genişlik/yükseklik · Parameters: kaynak kolon → p_paramName (değer hedef forma aktarılır).Makes a column clickable. Type: Navigate / Open Window · Form to open · for windows: title, position (Center/Left/Right/Absolute), width/height · Parameters: source column → p_paramName (value passed to the target form).

Behavior

AyarSettingAçıklamaDescription
Display-onlyAçıksa satır tıklaması form-geneli seçimi sürüklemez (bağlı grafik/tablo süzülmez); yalnız hücre linkleri çalışır.When on, a row click does not drive the form-wide selection (linked chart/table won't filter); only cell links work.
Allow searchTablonun üstünde arama kutusu.A search box above the table.
Max Record CountÇekilecek azami satır.Max rows fetched.
Order By / Group ByVarsayılan sıralama / gruplama.Default sort / grouping.
Density · Zebra · Compact headerSatır sıklığı, zebra şerit, sıkışık başlık.Row density, zebra stripes, compact header.
Truncate cells (+ max chars)Uzun hücreleri kısalt.Truncate long cells.
Mobile viewDar ekranda görünüm modu (kart/tablo).Layout mode on narrow screens (card/table).

Mobil görünüm (Appearance). Tablolar için bir mobil mod ayarı vardır. Cards seçildiğinde dar ekranlarda her satır "Etiket : değer" şeklinde kaydırılabilir bir karta dönüşür; boş hücreler hizalı bir "—" ile gösterilir. Scroll (varsayılan) ise kolonları okunaklı genişlikte tutup tabloyu yana kaydırır.Mobile layout (Appearance). Tables have a mobile mode. With Cards, on narrow screens each row becomes a swipeable "Label : value" card; empty cells show an aligned "—". Scroll (default) keeps columns readable and scrolls the table sideways.

6.4 · Grafikler (Charts)Charts

Tipler: Bar · Line · Area · Pie · Donut · Number (tek KPI değeri) · Gantt. Her grafik bir tabloyu toplulaştırarak (group-by + aggregate) çizer.Types: Bar · Line · Area · Pie · Donut · Number (single KPI value) · Gantt. Each chart aggregates a table (group-by + aggregate).

Aya göre çağrılar — duruma göre yığınIssues by month — stacked by status 05101520 OcaŞubMarNisMay AçıkOpen BekliyorPending KapandıClosed 1 Axis (X) = AyAxis (X) = Month 2 Series = DurumSeries = Status 3
Şekil 8.Figure 8. Çoklu kurgu örneği: Axis = Ay (X), Series = Durum (renkli kırılım), Measure = COUNT (Y). Her ölçü ayrı bir yığındır. (Temsilî figür.)Multi example: Axis = Month (X), Series = Status (colored breakdown), Measure = COUNT (Y). Each measure is a separate stack. (Illustrative figure.)

İki kurgu yöntemiTwo ways to define data

YöntemMethodAçıklamaDescription
TekilSingle
Label / Value
Basit grafik: bir Label alanı (X ekseni / dilim) + bir Value (ölçü).Simple chart: one Label field (X axis / slice) + one Value (measure).
ÇokluMulti
Dimensions & Measures
Gelişmiş: birden çok boyut ve ölçü. Açıkken tekil Label/Value'yu geçersiz kılar.Advanced: multiple dimensions and measures. When on, it overrides single Label/Value.

Boyutlar (Dimensions) ve Ölçüler (Measures)Dimensions & Measures

  • Boyut · rol = Axis → X ekseni (gruplama). rol = Series → renkli kırılım.Dimension · role = Axis → X axis (grouping). role = Series → colored breakdown.
  • Ölçü = Aggregation (COUNT, SUM, AVG, MIN, MAX) + alan + etiket + eksen (sol/sağ).Measure = Aggregation (COUNT, SUM, AVG, MIN, MAX) + field + label + axis (left/right).
  • Seri sayısı = (Series-boyutları) × (Ölçüler); her ölçü ayrı bir stack'tir.Series = (Series dimensions) × (Measures); each measure is a separate stack.
ÖrnekExampleAxis = Month · Series = Status · Measure = COUNT → her ay, durumlara göre kırılmış yığın bar grafiği.Axis = Month · Series = Status · Measure = COUNT → a stacked bar per month, broken down by status.

Diğer ayarlarOther settings

AyarSettingAçıklamaDescription
Tarih gruplamaDate groupingTarih alanını gün/ay/yıl olarak grupla (date-trunc); etiketler lokalize; drill için sayısal anahtar saklanır.Group a date field by day/month/year (date-trunc); labels localized; a numeric key is kept for drill-through.
Kategori renkleriCategory colorsSeri/dilim değerlerini sabit renge eşle; listeden distinct değer çek.Map series/slice values to fixed colors; pull distinct values from the list.
Eksen / görünümAxis / appearanceEksen adları, yatay/dikey bar, stack/grup, etiketler.Axis names, horizontal/vertical bars, stacked/grouped, labels.

Drill-through

Bir çubuğa/dilime tıklayınca, o değere filtreli bir form açar (pencere veya yönlendirme). Tıklanan grup değeri (ve tarih gruplamada sayısal anahtar) hedef forma parametre olarak geçer — böylece "Haziran" çubuğuna tıklayan kullanıcı yalnız Haziran kayıtlarını görür.Clicking a bar/slice opens a form filtered to that value (window or navigate). The clicked group value (and the numeric key for date grouping) is passed as a parameter to the target form — so a user clicking the "June" bar sees only June records.

  • Link Parametersana satır seçilince grafiği o satıra göre süz (Parent→Child; Bölüm 6.10).filter the chart by the selected master row (Parent→Child; Section 6.10).
  • Custom SQLileri seviye: doğrudan SQL yazın; sonuç kolonlarını AS label, AS value olarak verin; drill için AS grpkey ekleyin. Link/filtre WHERE'leri otomatik enjekte edilir.advanced: write raw SQL; expose result columns as AS label, AS value; add AS grpkey for drill-through. Link/filter WHEREs are injected automatically.

6.5 · Board (Kanban)Board (Kanban)

Amaç: Kayıtları durum kolonlarında kart olarak göstermek; bir kartı başka kolona sürükleyip bırakınca durum alanı DB'de güncellenir. Dört sekme: Data · Cards · Appearance · Behavior.Purpose: Show records as cards in status columns; dragging a card to another column updates the status field in the DB. Four tabs: Data · Cards · Appearance · Behavior.

AçıkOpen · 2 BekliyorPending · 1 İncelemedeIn review · 1 KapandıClosed · 1 TSK-001Ödeme entegrasyonuPayment integration TSK-003Login hatasıLogin bug TSK-002Rapor tasarımıReport design TSK-005API testiAPI test TSK-004DokümanDocs Kartı sürükle → Status alanı DB'de güncellenirDrag a card → the Status field is updated in the DB
Şekil 9.Figure 9. Board (Kanban): kolonlar Status kolonunun değerlerinden oluşur; bir kartı başka kolona sürükleyince o kaydın Status alanı güncellenir. (Temsilî figür; örnek veriler.)Board (Kanban): columns come from the Status column's values; dragging a card to another column updates that record's Status field. (Illustrative figure; sample data.)
Sekme / AyarTab / SettingAçıklamaDescription
Data · Connection/Schema/TableKartların kaynağı (boşsa formun bağlantısı).The source of the cards (form connection if blank).
Data · Group / Status alanıGroup / Status fieldKolonları (durumları) belirleyen kolon. Kart sürüklenip bırakılınca bu alan hedef kolonun değerine güncellenir.The column that defines the columns (statuses). Dropping a card updates this field to the target column's value.
Cards · ID fieldKartta gösterilen, tıklanır kimlik (link açar).The clickable id shown on the card (opens the link).
Cards · Title fieldKartın başlığı.The card title.
Cards · Badge fieldsKartta rozet olarak gösterilen ek kolonlar.Extra columns shown as badges on the card.
Appearance · Renk / düzenColor / layoutKolon/kart kategori renkleri; yatay/dikey düzen; yükseklik.Column/card category colors; horizontal/vertical layout; height.
Behavior · LinkKimliğe tıklayınca form aç (window/navigate + konum/boyut + parametreler).Open a form on id click (window/navigate + position/size + parameters).
Behavior · Link ParametersAna satır seçilince board'u o satıra göre süz (Parent→Child).Filter the board by the selected master row (Parent→Child).
İpucuTipKolon başlıkları, Status kolonundaki distinct değerlerden oluşur; sabit bir sıra için Appearance'taki kategori sırasını kullanın.Column headers come from the distinct values of the Status column; for a fixed order use the category ordering in Appearance.

6.6 · Calendar

Amaç: Bir tablonun tarih alanlarına göre kayıtları takvimde göstermek. Çok günlük kayıtlar tek bir spanning bar olarak çizilir; uçlarından sürükleyerek tarih değiştirilebilir.Purpose: Show table rows on a calendar by their date fields. Multi-day records render as one spanning bar; drag the edges to change dates.

Calendar — ay görünümü, spanning barCalendar — month view, spanning bars
Şekil 4.Figure 4. Calendar — ay görünümü (gerçek çıktı). Çok günlük kayıtlar tek çubuk, renk kategoriye göre, çakışanlar lane'lere dizilir; bugün vurgulu.Calendar — month view (actual output). Multi-day records as one bar, colored by category, overlaps stacked into lanes; today highlighted.

Data

Alan / FieldAçıklama / Description
Connection / Schema / TableOlayların kaynağı.Source of the events.
Start field *Başlangıç tarihi/saati. Yalnızca tarih ise tüm gün.Start date/time. Date-only = all-day.
End fieldOpsiyonel bitiş. Varsa çok günlük tek çubuk.Optional end. If set, multi-day spanning bar.
Title / ID / Color by / Badge fieldsEtiket, tıklanır kimlik, kategori rengi, ek rozetler.Label, clickable id, category color, extra badges.

Appearance

Language (ay/gün adları, Today/Month/Week/Day — 7 dil + Auto), varsayılan görünüm, hafta başlangıcı, saat aralığı, yükseklik, kategori renkleri.Language (month/day names and Today/Month/Week/Day — 7 languages + Auto), default view, week start, hour range, height, category colors.

Link

Kimliğe tıklayınca form açma (pencere/yönlendirme), pencere konumu ve tıklanan satırdan ek parametreler geçme.Open a form on id click (window/navigate), window position, and pass extra parameters from the clicked row.

SüzmeFilteringData sekmesindeki Link Parameters (filter) ile takvim, ana tablo satır seçimine veya Filter paneline göre süzülür (Parent → Child kolon eşlemesi).Use Link Parameters (filter) in the Data tab so the calendar filters by the master row selection or the Filter panel (Parent → Child column mapping).

6.7 · Tree

Amaç: Kendine-referanslı bir tablodaki (satırda id ve parentId) hiyerarşiyi ağaç olarak göstermek — kategori, bölge, organizasyon şeması, BOM.Purpose: Render the hierarchy of a self-referencing table (each row has id and parentId) as a tree — categories, regions, org charts, BOM.

Tree — hiyerarşiTree — hierarchy
Şekil 5.Figure 5. Tree (gerçek çıktı). Kategori renkli düğümler, sağda sayaç, rozet alanları (örnek veriler), aç/kapat ve arama. Veriler örnektir.Tree (actual output). Category-colored nodes, right-aligned counts, badge fields (sample data), expand/collapse and search. Data is illustrative.

Data

Alan / FieldAçıklama / Description
ID field *Düğümün kimliği.Node id.
Parent field *Üst düğüm kimliği. Boş/NULL (veya Root value) olanlar kök.Parent id. Empty/NULL (or Root value) rows are roots.
Label / Root value / Sort / Color by / Count / BadgesMetin, kök işareti, sıralama, kategori rengi, sayaç, rozetler.Text, root marker, ordering, category color, count, badges.

Appearance

Load mode: Full (tüm satırlar — anında aç/kapa) veya Lazy (çocuklar açılınca yüklenir — devasa ağaçlar). Default expand, Allow drag re-parent (sürükle-bırakla parentId güncelle), dil, yükseklik, kategori renkleri.Load mode: Full (all rows — instant expand) or Lazy (children loaded on expand — huge trees). Default expand, Allow drag re-parent (drag-drop to update parentId), language, height, category colors.

Link & SüzmeFiltering

Calendar ile aynı: node tıklayınca form aç + parametreler; Link Parameters (filter) ile ağacı süz.Same as Calendar: open a form on node click + parameters; filter the tree via Link Parameters (filter).

6.8 · Viewer

Amaç: Dosya/içerik gösterimi: PDF · Word · Excel · CSV · Görsel · Video · Audio · Markdown · HTML · Code.Purpose: Display file/content: PDF · Word · Excel · CSV · Image · Video · Audio · Markdown · HTML · Code.

  • Kaynak: yüklenen dosya veya bir dış URL (URL önceliklidir; izole iframe'de açılır).Source: an uploaded file or an external URL (URL takes priority; shown in an isolated iframe).
  • Not: Hedef site X-Frame-Options/CSP ile çerçevelemeyi engelliyorsa tarayıcı bloklar (bu uzak sitenin ayarıdır).Note: If the target site forbids framing via X-Frame-Options/CSP, the browser blocks it (that is the remote site's setting).

6.9 · Panel ve TabPanel & Tab

Amaç: Diğer komponentleri gruplayan kapsayıcılar. İçlerine alan, tablo, grafik, board, calendar ve tree koyulabilir.Purpose: Containers that group other components. They can hold fields, tables, charts, boards, calendars and trees.

AyarSettingAçıklamaDescription
Panel · Hide titleBaşlık çubuğu gizlenir; panel düz bir kapsayıcı olur.Hides the title bar; the panel becomes a plain container.
Panel · Collapsible / Start collapsedİçerik katlanabilir; formda kapalı başlayabilir.Content can collapse; can start collapsed on load.
Panel · Allow maximizePaneli çalışma alanını dolduracak şekilde büyütme.Maximize the panel to fill the working area.
Tab · SekmelerTabsBirden çok sekme; her çocuk bir tabId ile bir sekmeye bağlanır.Multiple tabs; each child binds to a tab via a tabId.
İç içe çalışmaNestingCalendar ve Tree, tab/panel içinde de tam çalışır (filtre, link, sürükle-bırak dahil).Calendar and Tree work fully inside tabs/panels too (including filter, link and drag-drop).

6.10 · Filtre, Link ve ReloadFilters, Links & Reload

Filter paneliFilter panel kullanıcı bir değer seçeruser picks a value Master satır seçimiMaster row select ana tablodan bir satıra row in the main table Link Parameters Parent field → Child field Table · Chart · Board · Calendar · Tree yeniden sorgulanırTable · Chart · Board · Calendar · Tree re-query
Şekil 6.Figure 6. Süzme akışı: filtre veya master-satır seçimi, Link Parameters (Parent→Child) ile komponentin kolonuna çevrilir ve komponent yeniden sorgulanır. Eşleme yoksa o alan komponenti süzmez.Filtering flow: a filter or master-row selection is mapped to the component's column via Link Parameters (Parent→Child) and the component re-queries. With no mapping, that field does not filter the component.

Filter paneliFilter panel

Form üzerindeki Filter paneli; tablo, grafik, board, calendar ve tree komponentlerini birlikte süzer. Komponent farklı bir datasource kullanıyorsa filtre alanı Link Parameters (Parent → Child) ile doğru kolona çevrilir.The form's Filter panel filters table, chart, board, calendar and tree together. If a component uses a different datasource, the filter field is mapped to the right column via Link Parameters (Parent → Child).

Master-detayMaster-detail

Ana tabloda bir satır seçilince, ona Link Parameters ile bağlı komponentler o satıra göre yeniden sorgulanır.When a row is selected in the master table, components linked via Link Parameters re-query for that row.

Tıklayınca form açmaOpen-on-click

Link sekmesi: pencere (konumlandırılabilir, küçültülebilir) veya yönlendirme. Tıklanan satırdan ek parametreler hedef forma aktarılır.Link tab: window (positionable, minimizable) or navigate. Extra parameters from the clicked row are passed to the target form.

Arama alanları (Search Fields). Bir alan isSearchField olarak işaretlenebilir; kullanıcı bu alanlara değer girip Search ile tabloyu filtreler, Clear Search ile sıfırlar. Değerler WHERE kurallarına çevrilir. Tablolar iki yoldan yüklenebildiği için (ana tablo ve alt/ilişkili tablo) filtre her ikisini de kapsar.Search fields. A field can be marked isSearchField; the user fills these, then filters the table with Search and resets with Clear Search. Values become WHERE rules. Since tables can load via two paths (main and child/related), the filter covers both.

6.11 · Rules (Kurallar)(Rules)

Amaç: Form üzerinde koşullu otomasyon. Bir kural üç parçadan oluşur: Tetikleyici → Koşullar → Aksiyonlar. Form sekmelerinden Rules ile yönetilir.Purpose: Conditional automation on a form. A rule has three parts: Trigger → Conditions → Actions. Managed from the Rules form tab.

Nasıl çalışırHow it worksBir kural = When (tetikleyici) → Conditions (kim + hangi değerler) → Then (koşul sağlanınca) / Else (sağlanmayınca). İki koşul bloğu (User VE Field) birlikte AND'lenir; aksiyonlar kural içinde sırayla, kurallar listede yukarıdan aşağıya çalışır (sürükleyerek sıralayın). Her kural açık/kapalı yapılabilir.A rule = When (trigger) → Conditions (who + which values) → Then (when met) / Else (when not met). The two condition blocks (User AND Field) are AND'd together; actions run in order within a rule, and rules run top to bottom (drag to reorder). Each rule can be enabled/disabled.
Field changes Status değişince → ata, gizle, e-postaWhen Status changes → set, hide, email When Field changes ▾ Status ▾ 1 Conditions User Is in Group ▾ Manager ▾ Field Status ▾ = ▾ Approved 2 Then Set value · ApprovedBy Hide · Reject ✉ Send email + Add action 3
Şekil 10.Figure 10. Bir kuralın anatomisi (temsilî): 1 When (tetikleyici + izlenen alan) · 2 Conditions (User yetki + Field değer) · 3 Then (sırayla çalışan aksiyonlar). Sağ üstte aç/kapa, solda sürükle-sırala.Anatomy of a rule (illustrative): 1 When (trigger + watched field) · 2 Conditions (User gate + Field value) · 3 Then (actions run in order). Enable/disable top-right, drag-to-reorder on the left.

1 · Tetikleyici (When)Trigger (When)

Kuralı neyin çalıştıracağını seçer:Selects what runs the rule:

TriggerNe zamanFires when
Form opensForm açıldığında. Scope ile sınırlanır: Tüm / yalnız yeni / yalnız mevcut kayıtlar.The form opens. Limited by Scope: All / only new / only existing records.
Field changesSeçilen bir alan (watch field) değiştiğinde.A chosen field (watch field) changes.
Before saveKaydetmeden hemen önce (değer atama / doğrulama için).Just before save (to set values / validate).
Save succeeds / failsKayıt başarılı / başarısız olduğunda.After a successful / failed save.
Row selected / deselectedTabloda satır seçilince / seçim kalkınca.A table row is selected / deselected.
Validation failsDoğrulama hatasında.On a validation error.
Form cancelled / closesForm iptal edilince / kapanınca.The form is cancelled / closed.
onChange dikkatonChange cautionBir Field changes kuralı bir alanı değiştirirse, o alanı izleyen başka bir kural da tetiklenebilir (zincirleme). Sistem sonsuz döngüye karşı koruma sağlar; yine de bir kuralın kendi izlediği alanı değiştirmesinden kaçının.If a Field changes rule modifies a field, another rule watching that field may also fire (chaining). The system guards against infinite loops; still, avoid a rule changing the field it watches.

2 · Koşullar — iki blokConditions — two blocks

Aksiyonlar yalnız koşullar sağlanınca çalışır. İki bağımsız blok birlikte değerlendirilir:Actions run only when conditions hold. Two independent blocks are evaluated together:

a) User koşullarıa) User conditionskuralı kime uygulayacağınızı belirler (yetki/rol kapısı). AND/OR ile çoklu.gate the rule by who the user is (a permission/role gate). Multiple, AND/OR.

TipTypeAnlamMeaning
Has CapabilityKullanıcının belirli bir yetkisi varsa. Yetkiler kullanıcının kendi tanımı + üye olduğu gruplardan miras alınanların birleşimidir (Bölüm 3).The user has a given capability. Capabilities are the union of the user's own + those inherited from their groups (Section 3).
Is in GroupBelirli bir gruptaysa.Is in a specific group.
Is in / Not in Any GroupHerhangi bir gruba üyeyse / değilse.Is / is not a member of any group.
Groups in Field · User in FieldKullanıcının grubu bir alandaki değerle eşleşirse · kullanıcı bir alandaki kişiyse.The user's group matches a field's value · the user is the person referenced in a field.
Is Admin / Is Not AdminYönetici ise / değilse.Is / is not an admin.

b) Field koşullarıb) Field conditionsAlan + Operatör + Değer. Operatörler: = > < contains between in empty/notEmpty. AND/OR. Hiç koşul yoksa kural her zaman çalışır.Field + Operator + Value. Operators: = > < contains between in empty/notEmpty. AND/OR. With no conditions the rule always runs.

3 · Aksiyonlar (Then)Actions (Then)

Koşullar sağlanınca çalışacak bir veya daha fazla aksiyon. Her aksiyonun bir hedefi (alan/komponent) vardır:One or more actions that run when conditions are met. Each action has a target (field/component):

GrupGroupAksiyonActionNe yaparWhat it does
Set Value
(değer ata)(set a value)
Fixed · Now · Sequence IDSabit değer · şu anki tarih/saat · otomatik kimlik.A fixed value · the current date/time · an auto id.
Current User · …Oturumdaki kullanıcının ID / Ad / Soyad / Kullanıcı adı / E-posta / Telefon / Dil / Organizasyon / Departman / Yönetici bilgisi.The logged-in user's ID / First / Last / User name / Email / Phone / Language / Organization / Department / Manager.
Set to User / Group / OrgBelirli bir kullanıcı, grup veya organizasyon değeri.A specific user, group or organization value.
User / Group / Org Field PropertyBir alandaki kişinin/grubun/org'un bir özelliğini (e-posta, yönetici, departman…) yaz.Write a property (email, manager, department…) of the user/group/org in a field.
ExpressionDiğer alanlardan hesaplanan ifade.An expression computed from other fields.
NullAlanı temizle.Clear the field.
VisibilityShowHedef alanı/komponenti göster.Show the target field/component.
HideGizle.Hide it.
StateEnable / DisableDüzenlenebilir / salt-okunur yap.Make editable / read-only.
Mandatory / OptionalZorunlu / isteğe bağlı yap.Make required / optional.
Set StyleBir Badge alanının rengini değere göre dinamik değiştir.Dynamically set a Badge field's color by value.
Mesaj & AkışMessaging & flowShow messageBaşlık + zengin gövde + tip (bilgi/uyarı). {{ }} değişkenli.Title + rich body + type (info/warning). Supports {{ }}.
Navigate toHedef form + parametreler (alan→değer) + pencere (başlık, genişlik/yükseklik).Target form + parameters (field→value) + open in a window (title, width/height).
Send emailAlıcılar (To/CC/BCC), Konu, gövde{{ }} değişkenli.Recipients (To/CC/BCC), Subject, body — supports {{ }}.
Trigger workflowBir workflow seç; kayıt bağlamı akışa geçer.Pick a workflow; the record context is passed to it.
Write to tableBir tabloya satır yaz (kolon→değer eşlemeleri).Write a row to a table (column→value mappings).
Agentic taskYapay zeka görevi; {FieldName} ile alan referansı.An AI task; reference fields with {FieldName}.
Kısıtla & KontrolRestrict & controlLimit valuesAlanın kabul ettiği değerleri sınırla (tarihte now+5d gibi).Restrict accepted values (e.g. now+5d for dates).
Limit field optionsBir açılır listenin seçeneklerini daralt.Narrow a dropdown's options.
Form control · Panel buttonPanel aksiyonlarını kapat · bir panel butonunun durumunu/modunu değiştir.Disable panel actions · change a panel button's state/mode.

Aksiyon ayrıntıları (her aksiyonun ayarları)Action details (settings of each action)

  • Show messageTip (Normal · Info · Success · Warning · Error) + Başlık + zengin Gövde. İkisinde de {{Alan}} değişkeni.Type (Normal · Info · Success · Warning · Error) + Title + rich Body. Both accept {{Field}}.
  • Navigate toHedef: Form veya Menu Item. Open in Window (başlık · konum Center/Left/Right/Absolute · genişlik/yükseklik). Parametreler: hedef alan ← Fixed (sabit) veya Field (kaynak alan).Target: Form or Menu Item. Open in Window (title · position Center/Left/Right/Absolute · width/height). Parameters: target field ← Fixed or Field (source).
  • Send emailTo / CC / BCC (Enter ile çoklu adres) + Subject + zengin Body; {{Alan}} destekli.To / CC / BCC (multiple, Enter to add) + Subject + rich Body; supports {{Field}}.
  • Write to tableConnection → Schema → Table + Field Mappings: hedef kolon ← Field / Static / Built-in (Now, Current User…).Connection → Schema → Table + Field Mappings: target column ← Field / Static / Built-in (Now, Current User…).
  • Trigger workflowListeden bir workflow seç; mevcut kayıt bağlamı akışa geçer.Pick a workflow from the list; the current record context is passed.
  • Limit field options / Limit valuesBir alanın kabul ettiği değerleri sınırla: Fixed / Now / Current User·… veya tarih ifadeleri (now+5d).Restrict the values a field accepts: Fixed / Now / Current User·… or date expressions (now+5d).
💬 Show Message Type Title Body{{Id}} ✓ ✉ Send Email To{{RequesterEmail}} CC/BCC SubjectRequest {{Id}} approved Body → Navigate To FormTalep Detayı ▾Request Detail ▾ Open in Window Param p_Id Field · Id Pencere: konum · boyutWindow: position · size
Şekil 11.Figure 11. Üç aksiyon editörü (temsilî): Show Message (tip + başlık + gövde) · Send Email (To/CC/BCC + konu + gövde, {{ }} değişkenli) · Navigate To (form + pencere + parametre).Three action editors (illustrative): Show Message (type + title + body) · Send Email (To/CC/BCC + subject + body, with {{ }}) · Navigate To (form + window + parameter).
Then / Else (aksi halde)Then / ElseHer kuralın iki aksiyon listesi vardır: koşul sağlanınca Then, sağlanmayınca Else çalışır. Her ikisinde de aynı aksiyon tipleri (Set value, Show/Hide, Send email…) kullanılabilir. Örn: Status = "Approved"Then alanları kilitle · Else alanları aç.Each rule has two action lists: Then runs when the condition is met, Else when it is not. Both accept the same action types (Set value, Show/Hide, Send email…). e.g. Status = "Approved"Then lock fields · Else unlock them.
{{ }} değişkenlerivariablesMesaj, e-posta konusu/gövdesi ve görevlerde değişken gömebilirsiniz:Embed variables in messages, email subject/body and tasks:
  • {{AlanAdı}}alanın güncel değeri.the field's current value.
  • {{old.AlanAdı}}önceki değer (kayıt açıldığındaki). Değişiklik takibi / önce-sonra için: "Status {{old.Status}}{{Status}}".the previous value (at record load). For change tracking / before-after: "Status {{old.Status}}{{Status}}".
  • Oturumdaki kullanıcı özellikleri (ad, e-posta vb.).Logged-in user properties (name, email, etc.).
ÖrneklerExamples 1. When Form opens (yalnız yeni kayıt) → CreatedBy = Current User · CreatedAt = Now.
2. When Status değişti · Field: Status = "Approved" · User: "Manager" grubunda → ApprovedBy = Current User · Hide "Reject" · Disable tüm alanlar · Send email (talep sahibine).
3. When Before save · Field: Amount > 10000 → Trigger workflow (onay akışı).
1. When Form opens (new records only) → CreatedBy = Current User · CreatedAt = Now.
2. When Status changes · Field: Status = "Approved" · User: in the "Manager" group → ApprovedBy = Current User · Hide "Reject" · Disable all fields · Send email (to the requester).
3. When Before save · Field: Amount > 10000 → Trigger workflow (approval flow).

AdımlarSteps

  1. Form → Rules sekmesi → kural ekle.Form → Rules tab → add a rule.
  2. Tetikleyiciyi seçin, koşulları (When) girin, AND/OR belirleyin.Pick the trigger, add conditions (When), set AND/OR.
  3. Bir veya daha fazla aksiyon (Then) ekleyin; her birine hedef ve değer verin.Add one or more actions (Then); give each a target and value.
  4. Kaydedin; kurallar yukarıdan aşağıya değerlendirilir (sürükleyerek sıralayın).Save; rules evaluate top to bottom (drag to reorder).

Koşul — "Record Exists". Bir kural koşulu olarak veritabanında kayıt sayısı (count) sorgulanabilir. Tipik kullanım: kaydetmeden önce (Before-Save) mükerrer kontrolü — aynı değere sahip kayıt varsa kaydı engelle. Koşul bir sorgu tipindedir ve prefetch-cache ile asenkron değerlendirilir.Condition — "Record Exists". A rule condition can query a record count in the database. Typical use: a before-save duplicate guard — block the save if a record with the same value exists. The condition is a query type, evaluated asynchronously via a prefetch cache.

Aksiyon — Uygulama-içi mesaj. Bir kural aksiyonu olarak kullanıcıya veya gruba uygulama-içi mesaj (bildirim) gönderilebilir; e-posta gönderme editörünün bir benzeri kullanılır. Alıcı bir grupsa mesaj üyelerine açılır.Action — In-app message. As a rule action, an in-app message (notification) can be sent to a user or group, using an editor similar to send-email. If the recipient is a group, the message expands to its members.

6.12 · Queries (Sorgular)(Queries)

Amaç: Bir formun verisinin önceden filtrelenmiş görünümleri (Query Presets). Adlandırılmış bir sorgu, bir menü öğesine Query Preset olarak bağlanır (Bölüm 5); o menüden açılınca form yalnız filtreye uyan kayıtları gösterir. Aynı form farklı menülerde farklı sorgularla görünebilir: "Açık Çağrılar", "Benim Kayıtlarım", "Bekleyen Onaylar"…Purpose: Pre-filtered views of a form's data (Query Presets). A named query is attached to a menu item as a Query Preset (Section 5); opening the form from that menu shows only the matching rows. The same form can appear under different menus with different queries: "Open Issues", "My Records", "Pending Approvals"…

⭐ Preset = Menünüzün yapı taşı⭐ A preset is your menu's building block Query Preset yalnızca bir filtre değil, uygulamanızın menü yapısını kurduğunuz asıl araçtır. Her menü öğesi pratikte bir (Form + Preset) çiftidir. Tek bir formu birden çok presetle bağlayarak, ayrı tablolar/formlar kurmadan zengin bir gezinme ağacı elde edersiniz — bir formdan onlarca menü öğesi doğar. Menüyü tasarlamak = doğru presetleri tanımlamak. A Query Preset isn't just a filter — it's the primary tool for building your app's menu structure. Each menu item is effectively a (Form + Preset) pair. By attaching one form with several presets you get a rich navigation tree without building separate tables/forms — dozens of menu items can grow from a single form. Designing the menu = defining the right presets.
TEK FORMONE FORM Issues / Çağrılar 📋 Açık Çağrılar📋 Open Issuespreset: Status ≠ Closed 👤 Benim Kayıtlarım👤 My Recordspreset: AssignedTo = current user 🗓 Bu Ay Açılanlar🗓 Opened This Monthpreset: CreatedAt = This Month 🔏 Bekleyen Onaylar🔏 Pending Approvalspreset: Approval State = Waiting Uygulama MenüsüApp Menu ▸ Açık Çağrılar▸ Open Issues ▸ Benim Kayıtlarım▸ My Records ▸ Bu Ay Açılanlar▸ Opened This Month ▸ Bekleyen Onaylar▸ Pending Approvals
Şekil 11b.Figure 11b. Tek form + 4 preset → 4 menü öğesi. Presetler menünün omurgasıdır: yeni bir görünüm gerektiğinde yeni form değil, yeni preset eklersiniz.One form + 4 presets → 4 menu items. Presets are the backbone of the menu: when you need a new view you add a preset, not a new form.
Query Açık ÇağrılarOpen Issues Name Açık ÇağrılarOpen Issues Conditions Status ▾ ≠ ▾ Fixed ▾ Closed AND AssignedTo ▾ = ▾ Current user ▾ AND 🔏 Approval State Waiting Approvals ▾ + Add 1 Alan · OperatörField · Operator 2 Değer kaynağıValue source 3 Onay durumuApproval State
Şekil 12.Figure 12. Query editörü (temsilî): Ad + koşullar (Alan · Operatör · Değer kaynağı · değer; AND/OR). Approval State özel koşulu onay-etkin formlar içindir.Query editor (illustrative): Name + conditions (Field · Operator · Value source · value; AND/OR). The Approval State special condition is for approval-enabled forms.

Koşul anatomisiCondition anatomy

Her koşul = Alan + Operatör + Değer kaynağı + Değer, AND/OR ile birleşir. Koşul yoksa sorgu tüm satırları gösterir.Each condition = Field + Operator + Value source + Value, combined with AND/OR. With no conditions the query shows all rows.

OperatörlerOperators

GrupGroupOperatörlerOperators
Standard= · != · > · < · >= · <= · LIKE / NOT LIKE · IN · IS NULL / IS NOT NULL
Date — RelativeToday · Yesterday · This/Last Week · This/Last Month · This/Last Year (değer almaz; bugünün tarihine göre)(no value; relative to today)
Date — RollingLast N Days · Last N Hours · Next N Days (N sayısını siz verirsiniz)(you supply N)

Değer kaynağıValue source

KaynakSourceAnlamMeaning
Fixed valueSabit bir değer (siz yazarsınız).A fixed value you type.
Current userOturumdaki kullanıcının kimliği — "Benim kayıtlarım" gibi kişiye özel görünümler.The logged-in user's id — for personal views like "My records".
My groups / My organizationsKullanıcının grupları / organizasyonları — ekip/birim bazlı görünümler.The user's groups / organizations — team/unit-scoped views.
Kişiye özel presetPersonal presetsCurrent user / My groups sayesinde tek bir "Benim Kayıtlarım" preseti her kullanıcıya kendi verisini gösterir.With Current user / My groups, a single "My Records" preset shows each user their own data.

Approval State (onay durumu)Approval State

Onay-etkin formlarda özel bir koşul: kayıtları onay durumuna göre süz — Waiting Approvals (bekleyen) · Approved Records · Rejected Records · All Approvals.On approval-enabled forms, a special condition that filters by approval state — Waiting Approvals · Approved Records · Rejected Records · All Approvals.

Bir preset'i kullanmakUsing a preset

Query: Açık ÇağrılarOpen IssuesStatus ≠ Closed Menü öğesiMenu itemQuery Preset = … Form açılırForm opensyalnız açık kayıtlaronly open records
Şekil 13.Figure 13. Akış: sorgu → menü öğesine Query Preset olarak bağlanır → o menü açılınca form filtreli gelir. (Doğrudan ?preset=… URL'iyle de açılabilir.)Flow: a query → attached to a menu item as a Query Preset → opening that menu loads the form filtered. (Can also be opened via a ?preset=… URL.)
ÖrneklerExamples 1. Açık Çağrılar: Status ≠ "Closed".
2. Benim Kayıtlarım: AssignedTo = Current user.
3. Bu ay açılanlar: CreatedAt operatör = This Month.
4. Bekleyen onaylar: Approval State = Waiting.
1. Open Issues: Status ≠ "Closed".
2. My Records: AssignedTo = Current user.
3. Opened this month: CreatedAt operator = This Month.
4. Pending approvals: Approval State = Waiting.

AdımlarSteps

  1. Form → Queries sekmesi → + Add Query; bir ad verin.Form → Queries tab → + Add Query; name it.
  2. Koşulları ekleyin (Alan/Operatör/Değer kaynağı/Değer), AND/OR seçin.Add conditions (Field/Operator/Value source/Value), choose AND/OR.
  3. Kaydedin; Apps'te bir menü öğesine Query Preset olarak atayın (Bölüm 5).Save; assign it as a Query Preset on a menu item in Apps (Section 5).

Preset'ten kayıt yükleme (tablosuz form). Bir tabloya bağlı olmayan kayıt formu, bir Query preset üzerinden tek kayıt yükleyebilir — örneğin oturum açan kullanıcının kendi profilini CurrentUser.username gibi değer tipleriyle getirme.Preset record load (table-less form). A record form not bound to a table can load a single record via a Query preset — e.g., fetching the signed-in user's own profile using value types like CurrentUser.username.

6.13 · Buttons (Butonlar)(Buttons)

İki tür: Canvas butonu (forma yerleştirilen) ve Panel butonu (formun alt aksiyon çubuğundaki global butonlar — panelButtons; onay formlarında approvalPanelButtons). Her butonun üç sekmesi vardır.Two kinds: a Canvas button (placed on the form) and a Panel button (global buttons in the form's bottom action bar — panelButtons; approvalPanelButtons on approval forms). Each button has three tabs.

SekmeTabİçerikContent
AppearanceEtiket, variant (primary / secondary / danger…), boyut, hizalama.Label, variant (primary / secondary / danger…), size, alignment.
ActionButonun ne yaptığı (aşağıdaki tablo).What the button does (table below).
VisibilityButonun ne zaman görüneceği/aktif olacağı (koşullar — Rules'taki gibi).When the button is shown/enabled (conditions — like Rules).

Aksiyon tipleriAction types

ActionAçıklama + ayarlarıDescription + settings
SaveFormu kaydeder. Alan atamaları: kaydederken alanlara değer set edebilir (Fixed, Now, Current User · …, Set to User/Group/Org — Rules'taki Set Value ile aynı set).Saves the form. Field assignments: can set values on save (Fixed, Now, Current User · …, Set to User/Group/Org — same set as Rules → Set Value).
DeleteSeçili kaydı siler.Deletes the current record.
NavigateBaşka form açar. Target form + parametreler (Parent→hedef alan; kaynak Field veya Static) + pencere aç (konum: center/left/right/absolute, genişlik/yükseklik).Opens another form. Target form + parameters (Parent→target field; source Field or Static) + open in window (position: center/left/right/absolute, width/height).
WorkflowBir iş akışını tetikler (workflowId); kayıt bağlamını akışa geçirir.Triggers a workflow (workflowId); passes the record context to the flow.
Approve / Reject / CancelOnay akışında karar butonları.Decision buttons in an approval flow.
ÖrnekExample"Onayla" butonu: Action = Workflow (onay akışı) · Appearance = primary · Visibility = yalnız Status = "Pending" iken görünür. "Kaydet" butonu: Action = Save, atama: UpdatedAt = Now, UpdatedBy = Current User."Approve" button: Action = Workflow (approval flow) · Appearance = primary · Visibility = only when Status = "Pending". "Save" button: Action = Save, assigns UpdatedAt = Now, UpdatedBy = Current User.

7 · İş Akışları ve OnaylarWorkflows & Approvals

AmaçPurpose

Workflow, olaylara (kayıt eklendi/değişti, buton, zamanlanmış tetik) bağlı çok adımlı otomasyonlar kurduğunuz görsel bir tasarımcıdır. Node'ları (kutuları) bir tuvale dizip oklarla bağlarsınız; akış yukarıdan aşağı çalışır: kayıt sorgular, döngü kurar, e-posta/bildirim gönderir, kayıt oluşturur/günceller, dış servis çağırır, onay bekler. Her bir node sağ panelden yapılandırılır; akış kaydedilir, test edilir ve loglardan izlenir.A Workflow is a visual designer where you build multi-step automations bound to events (record created/changed, button, scheduled trigger). You drop nodes (boxes) on a canvas and connect them with arrows; the flow runs top-to-bottom: query records, loop, send email/notification, create/update records, call an external service, wait for approval. Each node is configured from the right panel; the flow is saved, tested, and watched from the logs.

Sipariş Onay AkışıOrder Approval Flow — Linked app — Active Save ⏱ Sched ≡ Logs 1 Toolbox ◎ Notification ◈ Approval ⟳ For Each + Create Record ✎ Update Record ⊟ Update Table ⊞ Query Records ⇄ HTTP Request ◷ Delay ⑂ Condition ≡ Log ■ End 2 Tuval (akış)Canvas (flow) ▶ Start ⊞ Query Records ⟳ For Eachsatır döngüsüloop rows ◈ Approval ◎ Notification 3 Properties ⊞ Query Records Connection Query (SELECT)SELECT * FROM ordersWHERE Status='new' Output variablenewOrders
Şekil 14.Figure 14. Workflow tasarımcısı: 1 Toolbox (node paleti) · 2 Tuval (node'lar oklarla bağlı akış) · 3 Seçili node'un özellikleri. Üst araç çubuğu: ad · linked app · Active · Save · ⏱ Schedule · ≡ Logs · ▶ Test.Workflow designer: 1 Toolbox (node palette) · 2 Canvas (nodes wired into a flow) · 3 Selected node's properties. Top toolbar: name · linked app · Active · Save · ⏱ Schedule · ≡ Logs · ▶ Test.

Toolbox — node tipleriToolbox — node types

Soldaki paletten node ekler, tuvalde dizer ve oklarla bağlarsınız. Her node'un kendi ayar paneli vardır.Add nodes from the left palette, arrange them on the canvas and wire them with arrows. Each node has its own settings panel.

NodeNodeNe yapar / başlıca ayarlarıWhat it does / key settings
▶ StartAkışın giriş noktası. Her workflow burada başlar.The flow's entry point. Every workflow starts here.
⊞ Query RecordsBir SELECT çalıştırır; sonucu bir çıktı değişkenine (ör. newOrders) yazar. Bağlantı + sorgu metni. ForEach ve şablonlar bu değişkeni kullanır.Runs a SELECT and writes the result to an output variable (e.g. newOrders). Connection + query text. ForEach and templates consume this variable.
⟳ For EachBir sorgu sonucundaki her satır için içindeki node'ları çalıştırır; alanlara {{prefix.Column}} ile erişilir.Runs its inner nodes for each row of a query result; access fields via {{prefix.Column}}.
+ Create RecordLinked app'in tablosuna yeni kayıt ekler (alan = değer atamaları).Inserts a new record into the linked app's table (field = value assignments).
✎ Update RecordTetikleyen kaydı (linked app tablosu) günceller.Updates the trigger record (linked app's table).
⊟ Update TableHerhangi bir tablodaki satır(lar)ın alanlarını günceller (bağlantı/şema/tablo + koşul + atamalar).Updates fields in any table's row(s) (connection/schema/table + condition + assignments).
◎ NotificationE-posta veya uygulama-içi bildirim gönderir. Alıcı, konu, gövde — {{...}} şablonlu.Sends an email or in-app notification. Recipient, subject, body — with {{...}} templating.
◈ Approvalİnsan onayı bekler: bir kullanıcı/gruba iş düşer, akış duraklar; onaylanınca devam, reddedilince dallanır.Waits for human approval: assigns a task to a user/group and pauses; resumes on approve, branches on reject.
⇄ HTTP RequestDış servise çağrı (method, URL, header, body). Yanıt sonraki adımlarda kullanılabilir.Calls an external service (method, URL, headers, body). The response is usable downstream.
◷ DelayBelirli bir süre bekler (akış duraklar, sonra resume ile devam eder).Waits for a duration (the flow pauses, then continues via resume).
⑂ ConditionKoşullu dallanma — koşul doğruysa bir yol, değilse diğer yol.Conditional branching — one path if true, another if false.
≡ LogLog dosyasına satır yazar (tanılama/izleme).Writes a line to the log (diagnostics/tracing).
■ EndAkışı sonlandırır.Ends the flow.

Karmaşık node'lar (dallanan / bileşik)Compound & branching nodes

Çoğu node tek bir çıkışına sahiptir (sıradaki node'a bağlanır). Üç node ise birden çok çıkış portu taşır ve akışı dallandırır — bunlar workflow'un en güçlü ama en çok dikkat isteyen parçalarıdır.Most nodes have a single output (wired to the next node). Three nodes carry multiple output ports and branch the flow — these are the most powerful, and trickiest, parts of a workflow.

⟳ For Each ⟳ For Each{{newOrders}} Loop body Continue DÖNGÜ GÖVDESİ (her satır)LOOP BODY (per row) ◎ Notify {{row.Email}} ✎ Update {{row.Id}} döngüden sonra ▶after loop ▶ ⑂ Condition ⑂ Conditionstatus = approved ? Evet yoluYes path Hayır yoluNo path ◈ Approval ◈ Approvalinsan kararı beklerwaits for human Approved Rejected ⚠ Her dallanma portunu ayrı ayrı bağlayın. Boş bırakılan port = o yolda akış durur.⚠ Wire each branch port separately. An unconnected port = the flow stops on that path. ForEach'te ⟳ döngü gövdesine, ▶ döngü sonrasına bağlanır.In ForEach, ⟳ goes to the loop body, ▶ to what runs after the loop.
Şekil 14b.Figure 14b. Dallanan node'ların port yapısı: ForEach (⟳ döngü gövdesi · ▶ devam) · Condition (✓ evet · ✗ hayır) · Approval (✓ onaylandı · ✗ reddedildi). Tek-çıkışlı node'ların aksine bunlar akışı ikiye ayırır.Branching nodes' port layout: ForEach (⟳ loop body · ▶ continue) · Condition (✓ yes · ✗ no) · Approval (✓ approved · ✗ rejected). Unlike single-output nodes, these split the flow.

⟳ For Each — satır döngüsü⟳ For Each — row loop

Bir Query Records sonucundaki her satır için döngü gövdesindeki node'ları tekrar çalıştırır. En sık kafa karıştıran node budur; iki ayrı portu vardır.Re-runs the nodes in its loop body for each row of a Query Records result. This is the most commonly misunderstood node; it has two distinct ports.

Ayar / PortSetting / PortAnlamMeaning
Source variableÜzerinde dönülecek sorgu sonucu — bir Query Records node'unun Output Variable adı (ör. newOrders).The query result to iterate — the Output Variable name of a Query Records node (e.g. newOrders).
Row variable prefixSatır değerlerine erişim öneki (varsayılan row). Gövdede {{row.Sütun}} ile o anki satırın alanlarına ulaşırsınız.Prefix for the current row (default row). In the body, access fields via {{row.Column}}.
⟳ Loop portDöngü gövdesinin ilk node'una bağlanır. Buraya bağlı tüm node'lar her satırda bir kez çalışır.Wire to the first node of the loop body. Everything chained here runs once per row.
▶ Continue portDöngü bittikten sonra çalışacak node'a bağlanır.Wire to the node that runs after the loop completes.
Tipik kalıpTypical patternQuery Records (newOrders) → For Each (source = newOrders) → ⟳ Notification (To: {{row.Email}}) → ▶ End. Yeni siparişlerin her birine ayrı e-posta gider.Query Records (newOrders) → For Each (source = newOrders) → ⟳ Notification (To: {{row.Email}}) → ▶ End. Each new order gets its own email.

⑂ Condition — koşullu dallanma⑂ Condition — conditional branch

Variable + Operator + Value değerlendirir; doğruysa ✓ Evet, değilse ✗ Hayır portundan devam eder. Operatörler: eq · neq · contains · > · < · >= · <=. Variable alanında {{...}} kullanılabilir (ör. {{row.Status}}).Evaluates Variable + Operator + Value; on true it continues from the ✓ Yes port, otherwise the ✗ No port. Operators: eq · neq · contains · > · < · >= · <=. The Variable can use {{...}} (e.g. {{row.Status}}).

◈ Approval — insan onayı◈ Approval — human approval

Akışı duraklatır, onaylayıcılara e-posta gönderir ve karar gelene kadar bekler; sonra ✓ Approved veya ✗ Rejected portundan dallanır.Pauses the flow, emails the approvers and waits for a decision; then branches from the ✓ Approved or ✗ Rejected port.

AyarSettingAnlamMeaning
Approval ModeSequential (sırayla) · All must approve (hepsi) · Majority (çoğunluk) · Any one (herhangi biri).Sequential · All must approve · Majority · Any one.
Approvers (CSV)Onaylayıcılar — virgülle ayrık; {{user.manager}} gibi şablon veya e-posta.Approvers — comma-separated; templates like {{user.manager}} or emails.
Email Subject / MessageOnay e-postasının konu ve gövdesi ({{...}} destekli).Subject and body of the approval email ({{...}} supported).
Expiry (hours)Karar gelmezse onayın geçerlilik süresi (ör. 72 saat).How long the approval stays valid if no decision (e.g. 72 hours).
Record FieldsE-postada özet tablo olarak gösterilecek alanlar (Title, Status, Priority). E-posta ayrıca tam kayda View Record bağlantısı içerir.Fields shown as a summary table in the email (Title, Status, Priority). The email also includes a View Record link to the full record.

Veri & aksiyon node'larının ayarlarıData & action node settings

NodeBaşlıca ayarlarıKey settings
⊞ Query RecordsConnection + SQL Query (@param bağlama) + Output Variable. Çıktılar: {{x}} HTML tablo · {{x_count}} satır sayısı · {{x_json}} JSON. Ayrıca tablo stili (default/compact/plain), başlık rengi, Max Rows, boş mesajı.Connection + SQL Query (@param binding) + Output Variable. Outputs: {{x}} HTML table · {{x_count}} row count · {{x_json}} JSON. Plus table style (default/compact/plain), header color, Max Rows, empty message.
+ Create Record
✎ Update Record
Linked app'in tablosuna otomatik yazar. Alan atamaları: her satır = sütun + değer tipi + değer. Değer tipleri: Fixed · Variable ({{...}}) · Now (UTC zaman) · Sequence ID (otomatik) · Current User · User/Group/Org (listeden seç). Update için Key Field otomatik çözülür.Writes to the linked app's table automatically. Field assignments: each row = column + value type + value. Value types: Fixed · Variable ({{...}}) · Now (UTC) · Sequence ID (auto) · Current User · User/Group/Org (pick from list). For Update the Key Field is auto-resolved.
⊟ Update TableHerhangi bir tabloyu günceller: Connection → Schema → Table (kademeli seçim) + Key Field/Key Value (boş = tüm satırlar; {{row.Id}} ile tek satır) + alan güncellemeleri.Updates any table: Connection → Schema → Table (cascading) + Key Field/Key Value (blank = all rows; {{row.Id}} for one) + field updates.
◎ NotificationTo (CSV) · CC · Subject · Body — hepsi {{...}} şablonlu (e-posta veya uygulama-içi bildirim).To (CSV) · CC · Subject · Body — all {{...}} templated (email or in-app notification).
⇄ HTTP RequestMethod (GET/POST/PUT/PATCH/DELETE) · URL · Headers (anahtar/değer, ör. Authorization: Bearer {{token}}) · Body (JSON, GET/DELETE dışında) · Content-Type.Method (GET/POST/PUT/PATCH/DELETE) · URL · Headers (key/value, e.g. Authorization: Bearer {{token}}) · Body (JSON, except GET/DELETE) · Content-Type.
◷ DelayDuration + Unit (Minutes/Hours/Days). Akış duraklar, süre dolunca resume ile sürer.Duration + Unit (Minutes/Hours/Days). The flow pauses and resumes when the time elapses.
≡ LogDirectory + File Name ({{...}}) + Message + Format (text/json/csv) + Write Mode (append/overwrite).Directory + File Name ({{...}}) + Message + Format (text/json/csv) + Write Mode (append/overwrite).
IntelliSense — {{ }}IntelliSense — {{ }}Herhangi bir metin alanında {{ yazınca kullanılabilir değişkenler (linked app'in form alanları, kullanıcı bilgisi, önceki node çıktıları) otomatik tamamlanır. App seçili değilse veya form tanımı bulunamazsa öneri listesi boş gelir.Typing {{ in any text field autocompletes available variables (the linked app's form fields, user info, earlier node outputs). If no app is selected or the form definition isn't found, the suggestion list is empty.

Nasıl tetiklenir? (Trigger kaynakları)How it's triggered (trigger sources)

Bir akış birden çok yolla başlayabilir; loglarda her çalışmanın kaynağı renkli bir rozetle gösterilir:A flow can start in several ways; in the logs each run shows its source as a coloured badge:

KaynakSourceAçıklamaDescription
recordForm olayı veya buton — kayıt eklendi/değişti ya da formda Workflow aksiyonlu butona basıldı (Bölüm 6.11 / 6.13). Kayıt bağlamı akışa geçer.A form event or button — record created/changed, or a form button with the Workflow action (Sections 6.11 / 6.13). The record context is passed in.
scheduleZamanlanmış tetik — ⏱ Schedule ile interval/cron'a göre otomatik (aşağıda).Scheduled trigger — automatic on interval/cron via ⏱ Schedule (below).
manualTasarımcıdaki ▶ Test ile elle çalıştırma (parametre girerek).Manual run from the designer's ▶ Test (with input params).
approvalBir onay kararı sonrası akışın kaldığı yerden sürmesi.The flow resuming after an approval decision.
resumeDelay/bekleme sonrası otomatik devam.Automatic continuation after a delay/wait.
Aktif/PasifActive/InactiveAraç çubuğundaki Active anahtarı kapalıyken akış otomatik tetiklerle (record/schedule) çalışmaz — yalnız ▶ Test ile denenir. Yayına almadan önce kaydedin ve aktif edin.While the toolbar's Active switch is off, the flow won't run on automatic triggers (record/schedule) — only via ▶ Test. Save and activate before going live.

⏱ Schedule — zamanlanmış tetik⏱ Schedule — scheduled trigger

Araç çubuğundaki ⏱ Schedule akışı belirli aralıklarla otomatik çalıştırır. İki mod vardır:The toolbar's ⏱ Schedule runs the flow automatically on a recurring basis. Two modes:

⏱ Scheduled Trigger Enabled On Mode Interval Cron Every 60 minutes Cron modunda: In Cron mode: 0 9 * * 1-5 min h dom mon dow Timezone Europe/Istanbul (+03:00) ▾ Fixed Inputs status=opendepartment=IT
Şekil 15.Figure 15. Schedule paneli: Enabled · Mode (Interval = her N dakika · Cron = 5 alanlı ifade) · Timezone · Fixed Inputs (her çalışmada akışa enjekte edilen key=value değişkenleri). "Last run" en son tetiği gösterir, Reset ile sıfırlanır.Schedule panel: Enabled · Mode (Interval = every N minutes · Cron = 5-field expression) · Timezone · Fixed Inputs (key=value variables injected on every run). "Last run" shows the latest trigger; Reset clears it.
AyarSettingAnlamMeaning
EnabledZamanlamayı açar/kapatır (Active'den ayrı; ikisi de açık olmalı).Turns scheduling on/off (separate from Active; both must be on).
IntervalHer N dakikada bir çalıştırır.Runs every N minutes.
Cron5 alanlı ifade min hour dom month dow (ör. 0 9 * * 1-5 = hafta içi 09:00). crontab.guru ile doğrulayın.5-field expression min hour dom month dow (e.g. 0 9 * * 1-5 = weekdays at 09:00). Verify with crontab.guru.
TimezoneCron/interval'in hesaplandığı saat dilimi (varsayılan Europe/Istanbul).The timezone the cron/interval is evaluated in (default Europe/Istanbul).
Fixed InputsHer zamanlı çalışmada akışa sabit değişkenler (key=value, satır başına bir tane).Fixed variables passed to the flow on every scheduled run (key=value, one per line).

≡ Execution Logs — çalışma kayıtları≡ Execution Logs

Araç çubuğundaki ≡ Logs her çalışmayı kaydeder (rozetteki sayı = toplam çalışma; en az bir hata var demektir). Bir kaydı açınca adım adım zaman çizelgesi görünür — hangi node ne kadar sürdü, çıktısı ne, nerede hata oldu.The toolbar's ≡ Logs records every run (badge = total runs; means at least one failure). Expanding an entry reveals a step-by-step timeline — which node ran, how long it took, its output, and where it failed.

≡ Execution Logs Clear All 2026-06-14 09:00 schedule 1.8s Query Records→ 4 rows · newOrders0.4s For Each→ 4 iterations1.1s Notification→ 4 emails sent0.3s ✓ All steps completed successfully 2026-06-14 08:12 record 0.6s ✗ Failed Query Records0.2s HTTP RequestFailure: 500 — endpoint unreachable ✗ Run finished with errors
Şekil 16.Figure 16. Execution Logs: her çalışma bir satır — durum noktası (● yeşil tamamlandı · ● kırmızı hatalı · ○ çalışıyor), zaman, kaynak rozeti, süre. Açıldığında node zaman çizelgesi: ✓ ok · ✗ hata · − atlandı; her adımın çıktısı/süresi ve hata detayı. Tek tek veya Clear All ile temizlenir.Execution Logs: each run is a row — status orb (● green completed · ● red failed · ○ running), time, source badge, duration. Expanded it shows the node timeline: ✓ ok · ✗ error · − skipped; each step's output/duration and failure detail. Clear individually or via Clear All.

Onaylar (Approval node)Approvals (Approval node)

Bir ◈ Approval node'u akışı duraklatır ve bir kullanıcı/gruba iş düşürür. Onaylayan Approval Inbox'tan karar verir; akış approval kaynağıyla kaldığı yerden sürer ve karara göre dallanır (onay → devam, ret → alternatif yol). Formların kendi onay akışı da vardır (panel butonları Approve/Reject/Cancel, Bölüm 6.13) — Approval State sorgularıyla (Bölüm 6.12) birlikte uçtan uca onay yönetimi sağlar.An ◈ Approval node pauses the flow and assigns a task to a user/group. The approver decides from the Approval Inbox; the flow resumes with the approval source and branches on the decision (approve → continue, reject → alternate path). Forms also have their own approval flow (Approve/Reject/Cancel panel buttons, Section 6.13) — together with Approval State queries (Section 6.12) this gives end-to-end approval management.

{{...}}Şablonlama: Değerler akış boyunca {{...}} ile taşınır — sorgu çıktısı {{newOrders.Total}}, ForEach satırı {{row.Email}}, Fixed Inputs/değişkenler {{status}}, tetikleyen kayıt alanları. E-posta gövdesinden HTTP body'sine, atama değerlerinden koşullara kadar her metin alanında kullanılır.Templating: Values flow via {{...}} — query output {{newOrders.Total}}, ForEach row {{row.Email}}, Fixed Inputs/variables {{status}}, trigger record fields. Usable in every text field: email body, HTTP body, assignment values, conditions.

AdımlarSteps

  1. Workflows → yeni akış; ad verin ve bir Linked app seçin.Workflows → new flow; name it and pick a Linked app.
  2. Toolbox'tan node'ları ekleyip oklarla bağlayın; her node'u sağ panelden yapılandırın.Add nodes from the toolbox and wire them; configure each from the right panel.
  3. Save▶ Test ile deneyin → ≡ Logs'tan sonucu doğrulayın.Save → try with ▶ Test → verify in ≡ Logs.
  4. Gerekiyorsa ⏱ Schedule kurun; Active edip yayına alın. Form tarafında tetik için butona Workflow aksiyonu bağlayın (Bölüm 6.13).If needed set up ⏱ Schedule; switch Active on to go live. For a form trigger, bind a button's Workflow action (Section 6.13).

8 · EntegrasyonlarIntegrations

AmaçPurpose

Orbion'u dış sistemlerle bağlamak için kod yazmadan REST uç noktaları tanımlarsınız. Her entegrasyon bir bağlantı + tabloya bağlıdır, bir kimlik doğrulama ile korunur ve bir alan eşlemesi (mapping) ile JSON'u kolonlara çevirir. İki yön vardır:To connect Orbion with external systems you define REST endpoints without code. Each integration is bound to a connection + table, protected by an authentication, and translates JSON to columns via a field mapping. There are two directions:

YönDirectionHTTPAçıklamaDescription
Inbound (Ingest) (gelen)POSTDış sistemler Orbion'a JSON gönderir; gelen alanlar eşlemeye göre hedef tabloya satır olarak yazılır. Sıra (sequence) üretimi ve hata stratejisi desteklenir.External systems POST JSON to Orbion; incoming fields are written as rows into a target table per the mapping. Sequence generation and error strategy are supported.
Outbound (giden)GETOrbion bir kaynak tabloyu salt-okunur JSON API olarak dışa açar; çağıranlar GET ile veriyi çeker. Kolon→alias eşlemesi ve satır filtresiyle ne kadarının görüneceği denetlenir. (Olay-bazlı "push" değil, çekme/pull API'sidir.)Orbion exposes a source table as a read-only JSON API; callers pull data via GET. A column→alias mapping and a row filter control how much is exposed. (A pull API, not event-based "push".)
Sipariş AlımıOrder Intake inbound ⟳ Rotate Save POST /api/ingest/order-intake API Docs ↗ Definition Logs ① Generalad · durum · hata stratejisiname · status · error strategy ② Authentication 🔒API Key / BasicAPI Key / Basic ③ Target Tableconnection → schema → table ④ Field MappingJSON → kolon eşlemesiJSON → column mapping ⑤ Row Filter(yalnız outbound)(outbound only) ⑥ Loggingdosya / veritabanıfile / database
Şekil 17.Figure 17. Entegrasyon editörü: üstte endpoint çubuğu (POST/GET + URL + API Docs) ve Definition / Logs sekmeleri; altta bölümler — General, Authentication, Target Table, Field Mapping, Row Filter (outbound), Logging.Integration editor: an endpoint bar (POST/GET + URL + API Docs) and Definition / Logs tabs on top; sections below — General, Authentication, Target Table, Field Mapping, Row Filter (outbound), Logging.

🔒 Kimlik doğrulama ve güvenlik🔒 Authentication & security

Her uç nokta bir kimlik doğrulamayla korunur. İki tür desteklenir:Every endpoint is protected by an authentication. Two types are supported:

TürTypeNasıl çalışırHow it works
API KeyÇağıran, gizli anahtarı bir HTTP başlığında gönderir. Header Name seçilebilir (varsayılan X-API-Key). Örn: curl -H "X-API-Key: abc…" -X POST …The caller sends the secret in an HTTP header. The Header Name is configurable (default X-API-Key). E.g. curl -H "X-API-Key: abc…" -X POST …
HTTP BasicKullanıcı adı + parola, Authorization: Basic base64(user:pass) başlığıyla gönderilir.Username + password sent via Authorization: Basic base64(user:pass).
🔒 Authentication TypeAPI Key ▾ Header NameX-API-Key API Key * k7Rm…(40 chars, BCrypt-hashed) ⟳ Generate Yeni gizli anahtar — şimdi kopyalayın, tekrar gösterilmeyecek:New secret — copy now, it won't be shown again: k7RmP2x… · düz metin saklanmaz, yalnız hash tutulurplain text not stored, only the hash
Şekil 18.Figure 18. API Key doğrulama: Header Name + 40 karakterlik anahtar. Anahtar BCrypt ile özetlenir — düz metin sonradan geri alınamaz. ⟳ Generate güçlü rastgele üretir; Rotate Key yeni anahtar verir ve eskisini geçersiz kılar. Yeni anahtar yalnız bir kez gösterilir.API Key auth: Header Name + a 40-char key. The key is BCrypt-hashed — the plain text can't be retrieved later. ⟳ Generate makes a strong random key; Rotate Key issues a new one and invalidates the old. The new key is shown only once.
Güvenlik kurallarıSecurity rules · Sırlar (anahtar/parola) BCrypt ile özetlenip saklanır; düz metin asla geri alınamaz — kaydetmeden önce kopyalayın.
· Anahtarı yalnız HTTPS üzerinden ve gizli kanalla paylaşın; sızarsa Rotate Key ile anında değiştirin.
· Kullanmadığınızda Status = Inactive yapın — uç nokta çağrılara HTTP 503 döner (silmeden duraklatma).
· Outbound'da satır filtresi ve seçici eşleme ile yalnız gereken kolon/satırı dışa açın (en az ayrıcalık).
· Secrets (key/password) are stored BCrypt-hashed; plain text is never retrievable — copy before saving.
· Share the key only over HTTPS via a secret channel; if leaked, change it instantly with Rotate Key.
· Set Status = Inactive when unused — the endpoint returns HTTP 503 to callers (pause without deleting).
· On outbound, expose only the needed columns/rows via the row filter and selective mapping (least privilege).

Alan eşlemesi (Field Mapping)Field mapping

Eşleme, gelen/giden JSON ile veritabanı kolonları arasındaki köprüdür. Mode iki türlüdür: Selective (yalnız listelenen alanlar işlenir; diğer JSON anahtarları yok sayılır) veya All (her alan aynı adlı kolona yazılır / her kolon dışa açılır).Mapping is the bridge between the JSON and database columns. Mode is either Selective (only the listed fields are processed; other JSON keys are ignored) or All (every field is written to a same-named column / every column is exposed).

▼ Inbound (POST) — JSON → tabloya yazwrite to table { "order_no":"A-91", "customer":"…", "amount":120, "ignored":"x" } order_noOrderNo customerCustomerName amountAmount — (seq)⚡ Id · DB Internal ordersId · OrderNoCustomerNameAmount EşlenmeyenUnmappedanahtarkeyyok sayılırignored ▲ Outbound (GET) — koloncolumn → JSON productsProductCodeName · PriceCostPrice 🔒 ProductCodesku Nametitle Price(alias yok → kolon adı)(no alias → column name) [{ "sku":"P-1", "title":"…", "Price":… }]
Şekil 19.Figure 19. Inbound: JSON anahtarı (Source Field, büyük/küçük harf duyarsız) → Target Column; Id bir sıra (sequence) ile üretilir; eşlenmeyen anahtarlar yok sayılır. Outbound: kolon → JSON Alias (boşsa kolon adı kullanılır); açılmayan kolon (CostPrice) yanıtta görünmez.Inbound: JSON key (Source Field, case-insensitive) → Target Column; Id is produced by a sequence; unmapped keys are ignored. Outbound: column → JSON Alias (blank uses the column name); a non-exposed column (CostPrice) never appears in the response.

Inbound — sıra (sequence) üretimiInbound — sequence generation

Bir hedef kolon, gelen JSON yerine sunucuda otomatik üretilebilir (anahtar/kod alanları için). Seq Type:A target column can be generated server-side instead of taken from the JSON (for key/code fields). Seq Type:

Seq TypeAnlamMeaning
NoneDeğer JSON'dan gelir (varsayılan).Value comes from the JSON (default).
DB InternalSunucu PostgreSQL nextval() çağırır — SERIAL/BIGSERIAL kolonlar için. Seq Pattern'e isteğe bağlı açık sıra adı (boşsa otomatik bulunur). Listede ⚡ ile işaretli kolonlarda sıra algılanmıştır.The server calls PostgreSQL nextval() — for SERIAL/BIGSERIAL columns. Seq Pattern is an optional explicit sequence name (auto-detected if blank). Columns marked ⚡ have a detected sequence.
CustomSunucu MAX değeri bulur, sayısal son ekini ayrıştırıp +1 yapar ve biçimli yazar — Orbion tarzı kodlar için (CAT-000001). Seq Pattern, tablo boşken kullanılacak örnek değerdir (ör. CAT-000000).The server finds MAX, parses its numeric suffix, increments and writes the formatted result — for Orbion-style codes (CAT-000001). Seq Pattern is the example used when the table is empty (e.g. CAT-000000).
Hata stratejisi (inbound)Error strategy (inbound)Stop: ilk satır hatasında tüm parti geri alınır (hiç satır yazılmaz). Continue: hatalı satırlar atlanır, başarılılar yazılır; yanıt kaç satırın başarısız olduğunu bildirir.Stop: the whole batch is rolled back on the first row failure (no rows written). Continue: failed rows are skipped, successful ones committed; the response reports how many failed.

Outbound — satır filtresi (Row Filter)Outbound — row filter

Outbound'da hangi satırların dışa açılacağını denetler:On outbound, controls which rows are exposed:

  • All rowstüm tablo döner (varsa dinamik ?where='e tabi).returns the whole table (subject to any dynamic ?where=).
  • Custom filterher isteğe sabit bir SQL WHERE uygulanır (ör. "Status"='active' AND "Price">0; WHERE yazılmaz).a static SQL WHERE is applied to every request (e.g. "Status"='active' AND "Price">0; omit the WHERE keyword).
  • Allow dynamic ?where=açıkken çağıran istek anında ?where= ile ek filtre verebilir; bu, sabit filtreyle AND'lenir.when on, callers may pass a request-time ?where=; it is ANDed with the static filter.

Loglama ve Logs sekmesiLogging & the Logs tab

Her çağrı kaydedilir; nereye yazılacağını Storage belirler. Logs sekmesi kayıtları (UTC zaman, request id, durum…) listeler.Every call is logged; Storage decides where. The Logs tab lists entries (UTC time, request id, status…).

StorageAyarlarSettings
FileHer entegrasyon için bir log.jsonl dosyası. Max File Size (MB) aşılınca Purge % kadar en eski kayıt silinir (öneri 50 MB / %50).One log.jsonl per integration. When Max File Size (MB) is exceeded, the oldest Purge % of entries is removed (recommended 50 MB / 50%).
DatabaseBir PG tablosuna yazılır (Connection · Schema · Table); tablo yoksa ilk istekte otomatik oluşturulur. Max Rows aşılınca en eski kayıtlar silinir.Written to a PG table (Connection · Schema · Table); auto-created on first request if missing. Oldest entries deleted when Max Rows is exceeded.

AdımlarSteps

  1. Integrations+ New (inbound veya outbound); ad ve Status verin.Integrations+ New (inbound or outbound); set name and Status.
  2. Authentication: API Key veya Basic seçin; anahtarı ⟳ Generate ile üretip kopyalayın.Authentication: pick API Key or Basic; ⟳ Generate the key and copy it.
  3. Target/Source Table: bağlantı → şema → tablo seçin.Target/Source Table: pick connection → schema → table.
  4. Field Mapping'i kurun (gerekiyorsa sequence/alias); outbound'da Row Filter'ı ayarlayın.Set up Field Mapping (sequence/alias if needed); configure the Row Filter on outbound.
  5. Save → endpoint çubuğundaki URL ve API Docs ile test edin → Logs'tan doğrulayın.Save → test with the endpoint URL and API Docs → verify in Logs.

9 · E-posta ve BildirimlerEmail & Notifications

Amaç ve çalışma mantığıPurpose & how it works

Orbion e-postaları anında göndermez, bir kuyruğa alır. Arka planda çalışan bir gönderici servis kuyruğu belirli aralıklarla tarar ve SMTP üzerinden iletir; sonuç Sent (gönderildi) veya Failed (başarısız) klasörüne düşer. E-posta kaynakları üç tanedir: Workflow Notification/Approval node'ları (Bölüm 7), kullanıcı olayı şablonları (kullanıcı oluşturma, parola sıfırlama…) ve onay istekleri.Orbion does not send email instantly — it queues it. A background sender service scans the queue at a set interval and delivers via SMTP; results land in the Sent or Failed folder. Email comes from three sources: Workflow Notification/Approval nodes (Section 7), user-event templates (user create, password reset…), and approval requests.

KAYNAKLARSOURCES ◎ Workflow Notification ◈ Approval request ✉ Kullanıcı-olay şablonu✉ User-event template KUYRUKQUEUEPending ⏳ GÖNDERİCİ SERVİSSENDER SERVICEher N dk tarar → SMTPscans every N min → SMTPsmtp.example.com:587 · SSL ✓ Sent ✗ Failed ↺ Retry Kuyruk sayaçları (Pending · Sent · Failed) tıklanabilir; her klasörde mesajları önizleyebilir, silebilir, başarısızları yeniden deneyebilirsiniz.Queue counters (Pending · Sent · Failed) are clickable; in each folder you can preview, delete, and retry failed messages.
Şekil 20.Figure 20. E-posta hattı: kaynaklar → Kuyruk (Pending)Gönderici servis (her N dk, SMTP) → Sent / Failed. Başarısızlar ↺ Retry ile tekrar kuyruğa alınır.Email pipeline: sources → Queue (Pending)Sender service (every N min, SMTP) → Sent / Failed. Failures can be re-queued via ↺ Retry.

Email Settings — SMTP yapılandırmasıEmail Settings — SMTP configuration

Bölüm / AlanSection / FieldAnlamMeaning
Email ServiceArka plan göndericiyi açar/kapatır. Kapalıyken hiçbir e-posta gönderilmez (kuyrukta birikir).Turns the background sender on/off. While off, no email is sent (it piles up in the queue).
Check IntervalKuyruğun kaç dakikada bir taranacağı (1–1440).How often (minutes) the queue is scanned (1–1440).
SMTP Host / PortPosta sunucusu adresi ve portu (tipik 587).Mail server address and port (typically 587).
Use SSL / TLSŞifreli bağlantı (önerilir).Encrypted connection (recommended).
Username / PasswordSMTP kimlik bilgileri (parola gizli saklanır).SMTP credentials (the password is stored secret).
From Name / From EmailGönderen kimliği — alıcının gördüğü ad ve adres. From Name ayrıca şablonlardaki {{appName}} değerini besler.Sender identity — the name and address the recipient sees. From Name also feeds {{appName}} in templates.
Application Base URLOnay e-postalarındaki bağlantılarda kullanılır; boşsa tarayıcı adresine düşer.Used in links inside approval emails; defaults to the browser address if blank.
Send Test EmailSend Test EmailKaydetmeden önce bir test adresi girip Send Test Email ile SMTP ayarlarını doğrulayın — bağlantı/kimlik sorunları anında görünür.Before saving, enter a test address and use Send Test Email to verify the SMTP settings — connection/credential issues surface immediately.

Kuyruk ve mesaj klasörleriQueue & message folders

Ayarlar sayfasında üç tıklanabilir sayaç vardır; her biri ilgili klasörü açar:The settings page shows three clickable counters; each opens its folder:

KlasörFolderİçerik ve aksiyonlarContent & actions
Pending ⏳Gönderilmeyi bekleyen e-postalar. Önizle (⊙) veya sil.Emails waiting to be sent. Preview (⊙) or delete.
Sent ✓Başarıyla gönderilenler — konu, alıcılar, gönderim zamanı. Önizle / sil.Successfully sent — subject, recipients, sent time. Preview / delete.
Failed ✗Başarısızlar — hata mesajıyla. ↺ Retry ile yeniden kuyruğa alınır; tek tek veya toplu seçip silinebilir.Failures — with the error message. ↺ Retry re-queues them; select individually or in bulk to delete.
ÖnizlemePreviewHer mesajın ⊙ Preview düğmesi HTML gövdeyi alıcının göreceği gibi açar — göndermeden veya yeniden denemeden önce içeriği kontrol edin.Each message's ⊙ Preview opens the HTML body as the recipient will see it — check the content before sending or retrying.
3Pending ⏳ 128Sent ✓ 2Failed ✗ ↑ tıkla → klasör açılır↑ click → opens folder Failed Messages All 1 selected ↺ Retry ✕ Delete Delete All Sipariş onayı bekleniyorOrder awaiting approval To: elif.demir@example.com ✗ Failed 14:02 — 535 auth failed: bad credentials Haftalık özet raporuWeekly summary report To: mert.kaya@example.com ✗ Failed 09:15 — timeout connecting to host Her satır: ☑ seç · konu · To · durum/zaman/hata · ⊙ önizle · ↺ retry · ✕ silEach row: ☑ select · subject · To · status/time/error · ⊙ preview · ↺ retry · ✕ delete ⊙ Preview E-posta ÖnizlemeEmail Preview KonuSubject: Sipariş onayı bekleniyorOrder awaiting approval Merhaba Elif,Hi Elif, #A-91 numaralı sipariş onayınızıOrder #A-91 is waiting for your bekliyor.approval. Kaydı AçView Record — gerçek HTML gövde, alıcının göreceği gibi —— the real HTML body, as the recipient sees it —
Şekil 22.Figure 22. Mesaj listesi ve içerik önizleme: bir sayaca tıklayınca o klasör (örnekte Failed) açılır; her satırda konu · alıcı (To) · durum/zaman/hata ve ⊙ önizle · ↺ retry · ✕ sil aksiyonları yer alır. ⊙ Preview, HTML gövdeyi alıcının göreceği şekilde gösterir.Message list and content preview: clicking a counter opens that folder (Failed here); each row shows subject · recipient (To) · status/time/error with ⊙ preview · ↺ retry · ✕ delete actions. ⊙ Preview renders the HTML body exactly as the recipient sees it.

Email Templates — olay şablonlarıEmail Templates — event templates

Kullanıcı olaylarında otomatik gönderilen şablonlardır (kullanıcı oluşturma, parola sıfırlama vb.). Her şablonun bir Active/Inactive anahtarı vardır — pasif şablon hiç e-posta göndermez. Subject ve Body (HTML) düzenlenir; gövdeye değişken chip'leri eklersiniz.Templates sent automatically on user events (user create, password reset, etc.). Each has an Active/Inactive switch — an inactive template sends nothing. You edit the Subject and Body (HTML), inserting variable chips into the body.

Hoş Geldiniz E-postasıWelcome Email user.created Active Subject {{appName}} hesabınız hazır— your account is ready Body (HTML) — değişken ekle:— insert variable: {{firstName}} {{lastName}} {{loginName}} {{email}} {{tempPassword}} {{appName}} <p>MerhabaHi {{firstName}},</p> <p>Kullanıcı adınızYour username: <b>{{loginName}}</b></p> <p>Geçici parolaTemp password: {{tempPassword}}</p> Save
Şekil 21.Figure 21. Şablon editörü: ad + Active anahtarı, Subject, Body (HTML) ve tıklanınca gövdeye eklenen değişken chip'leri. {{tempPassword}} yalnız kullanıcı oluşturma ve parola sıfırlamada dolar.Template editor: name + Active switch, Subject, Body (HTML), and variable chips inserted into the body on click. {{tempPassword}} is populated only on user create and password reset.
DeğişkenVariableAnlamMeaning
{{firstName}} · {{lastName}}Kullanıcının adı / soyadı.User's first / last name.
{{loginName}}Giriş kullanıcı adı.Login username.
{{email}}Kullanıcının e-posta adresi.User's email address.
{{tempPassword}}Geçici/sıfırlama parolası — yalnız kullanıcı oluşturma ve parola sıfırlama olaylarında dolar.Temporary/reset password — populated only on user-create and password-reset events.
{{appName}}Uygulama adı — Email Settings → From Name'den gelir.Application name — taken from Email Settings → From Name.
GüvenlikSecurity{{tempPassword}} hassastır; yalnız hesap-kurulum/sıfırlama şablonlarında kullanın, log veya genel bildirimlere koymayın. SMTP parolasını ve test çıktılarını gizli tutun.{{tempPassword}} is sensitive; use it only in account-setup/reset templates, never in logs or general notifications. Keep the SMTP password and test output secret.

AdımlarSteps

  1. System → Email Settings: SMTP Host/Port/SSL, kullanıcı/parola, From Name/Email'i girin.System → Email Settings: enter SMTP Host/Port/SSL, credentials, From Name/Email.
  2. Send Test Email ile doğrulayın; sonra Email Service'i açıp Save'leyin.Verify with Send Test Email; then turn on Email Service and Save.
  3. Email Templates'te ilgili şablonları (Subject/Body) düzenleyip Active edin.In Email Templates edit the relevant templates (Subject/Body) and set them Active.
  4. Bir olay tetikleyin (kullanıcı oluştur / workflow çalıştır) ve Sent/Failed klasörlerinden sonucu izleyin.Trigger an event (create a user / run a workflow) and watch the result in Sent/Failed.

10 · Lisans ve İşletimLicense & Operations

Orbion nasıl lisanslanır?How Orbion is licensed

Orbion, form adedi ve aktif kullanıcı adedi bazlı lisanslanır. Anahtar girmediğinizde sistem otomatik olarak Community Edition (Topluluk Sürümü) olarak çalışır ve lisansta belirtilen şartlar altında tamamen ücretsizdir: 10 form ve 25 aktif kullanıcıya kadar serbestçe kullanabilirsiniz — kurulum, üretim ortamı dahil işletim ve uygulamalarınızı son kullanıcılara sunma serbesttir.Orbion is licensed by form count and active-user count. With no key entered, the system runs automatically as Community Edition and is completely free under the license terms: you may use up to 10 forms and 25 active users freely — installation, operation (including production), and offering your apps to end users are all permitted.

◆ Community Edition — 10 form · 25 kullanıcı, ücretsiz◆ Community Edition — 10 forms · 25 users, free Bu sınırlar göründüğünden cömerttir. Bir form, içinde tablo/grafik/takvim/kural/buton barındıran tam bir ekrandır; 10 form ile kapsamlı tek bir uygulama (ör. uçtan uca bir talep-onay sistemi) ya da birkaç küçük uygulama (mini CRM + envanter + İK talepleri) rahatça kurulur. 25 aktif kullanıcı ise bir ekip/departman için yeterli alan sunar. İhtiyaç büyüdüğünde ticari bir anahtar girip limitleri yükseltirsiniz — kurduğunuz hiçbir şey değişmez. These limits are more generous than they look. A form is a full screen that can hold tables/charts/calendars/rules/buttons; with 10 forms you can comfortably build one substantial application (e.g. an end-to-end request-approval system) or several small apps (a mini CRM + inventory + HR requests). 25 active users is ample room for a team/department. When you outgrow it, apply a commercial key to raise the limits — nothing you built changes.
License System ID ORB-9F3A-22C7-… ⧉ Copy ↑ bu kimliği lisans sağlayıcıya verip anahtar alırsınız↑ share this id with the provider to get a key Community Edition10 forma ve 25 aktif kullanıcıya kadarUp to 10 forms and 25 active users License Key Ticari anahtarınızı buraya yapıştırın…Paste your license key here… Apply License Forms 3 / 10 Users 12 / 25
Şekil 23.Figure 23. Lisans sayfası: System ID (sağlayıcıya verip anahtar alınır), durum afişi (burada Community Edition), License Key kutusu (Apply License) ve kullanım çubukları (Forms 3/10 · Users 12/25). Ticari lisansta limitler "Unlimited" olabilir; On-Prem lisans süresizdir.License page: System ID (share to get a key), a status banner (Community Edition here), the License Key box (Apply License), and usage bars (Forms 3/10 · Users 12/25). A commercial license can be "Unlimited"; an On-Prem license never expires.

Lisans SözleşmesiLicense Agreement

Orbion, Business Source License (BSL) 1.0 ile dağıtılır. Aşağıdaki butona tıklayarak sözleşmenin tam metnini açabilirsiniz:Orbion is distributed under the Business Source License (BSL) 1.0. Click the button below to open the full text:

📄 Lisans Sözleşmesini Aç (BSL 1.0)Open License Agreement (BSL 1.0)

MaddeItemÖzetSummary
Ücretsiz kullanımFree use1 Ocak 2028'e (Change Date) kadar yazılım ücretsiz kullanılır; üretim ortamı dahil.The software is free to use until January 1, 2028 (the Change Date), including in production.
SerbestPermittedKurmak/işletmek, üzerine uygulama geliştirmek, bu uygulamaları son kullanıcılara ticari olarak sunmak.Install/operate, build apps on top, and offer those apps commercially to end users.
YasakProhibitedKaynak kodu kopyalamak/değiştirmek/dağıtmak, alt-lisanslamak/kiralamak/satmak, Orbion marka-logosunu izinsiz kullanmak, white-label ürün üretmek.Copying/modifying/distributing the source, sublicensing/renting/selling, using the Orbion brand without consent, white-labeling.
Change Date sonrasıAfter Change Date1 Ocak 2028'den itibaren ticari lisans gerekir (kuruluş + kullanıcı bazlı); en az 90 gün önce bildirim yapılır.From Jan 1, 2028 a commercial license is required (per organization + per user); at least 90 days' notice is given.
SorumlulukLiabilityYazılım "OLDUĞU GİBİ" sunulur; garanti yoktur. Yönetim: Türkiye / İstanbul. Lisans veren: İDE Teknoloji.Provided "AS IS"; no warranty. Governing law: Turkey / Istanbul. Licensor: İDE Teknoloji.

İşletimOperations

  • Files / Vieweryüklenen dosyalar ve görüntüleyici ayarları.uploaded files and viewer settings.
  • Loglar & sorun giderme — hata izleme ve tanılama.Logs & troubleshooting — error tracking and diagnostics.

Yedekleme & geri yüklemeBackup & restore

Sistem yöneticileri yapılandırma yedeklerini listeleyebilir, bir yedeği geri yükleyebilir veya silebilir.System administrators can list configuration backups, restore a backup, or delete one.

İşlemActionAnlamMeaning
ListeleListMevcut yedekleri tarih/ad ile görüntüler.Shows existing backups by date/name.
Geri yükleRestoreSeçili yedeği uygular (yapılandırmayı o ana döndürür).Applies the selected backup (rolls configuration to that point).
SilDeleteArtık gerekmeyen bir yedeği kaldırır.Removes a backup that is no longer needed.
⚠ Dikkat⚠ Caution Geri yükleme yapılandırmanın üzerine yazar. Önce mevcut durumun yedeğini aldığınızdan emin olun. A restore overwrites the configuration. Make sure you have a backup of the current state first.

A · SSS ve Sorun GidermeFAQ & Troubleshooting

BelirtiSymptomOlası neden / ÇözümLikely cause / Fix
Komponent veri göstermiyorComponent shows no dataBağlantı/tablo seçili mi, zorunlu alanlar (*) dolu mu, filtre eşlemesi doğru mu?Is the connection/table set, required (*) fields filled, and the filter mapping correct?
Filtreden seçince güncellenmiyorNot updating on filterLink Parameters'ta filtre alanı = Parent Field eşlemesi olmalı.The filter field must equal a Parent Field in Link Parameters.
Açılan pencere küçültülünce forma tıklanamıyorMinimized window blocks the formSayfayı sert yenileyin (Ctrl+Shift+R); güncel sürümde düzeltildi.Hard refresh (Ctrl+Shift+R); fixed in the current build.
Menü/öğe görünmüyorMenu/item not visibleKullanıcının grubu allowedGroups içinde mi?Is the user's group in allowedGroups?

DestekSupport

Sorununuzu yukarıdaki tablo veya kılavuzla çözemezseniz, lisans türünüze göre iki destek kanalı vardır:If the table or guide above doesn't resolve your issue, there are two support channels depending on your license:

🎫 Lisanslı kullanıcılarLicensed users Ticket (çağrı) sistemiTicket system Çağrı AçOpen Ticket 👷 Atanmış mühendisAssigned engineer Size atanan bir mühendis doğrudanAn engineer assigned to you will iletişime geçer ve çözüme kadarcontact you directly and follow up takip eder.until it's resolved. 💬 Community Edition Forum uygulaması — topluluk desteğiForum app — community support Foruma SorAsk on Forum 👥 Topluluk + mühendisCommunity + engineer Topluluk üyeleri yanıtlar; ayrıcaCommunity members answer; Orbion Orbion mühendisleri de forumdaengineers are also present on the destek verir.forum to help.
Şekil 24.Figure 24. İki destek kanalı: lisanslı kullanıcılar Ticket sisteminden çağrı açar ve atanmış bir mühendis doğrudan iletişime geçer; Community Edition kullanıcıları Forum uygulamasından topluluk desteği alır — forumda mühendis desteği de bulunur.Two support channels: licensed users open a ticket and an assigned engineer contacts them directly; Community Edition users get community support via the Forum app — where engineer support is also available.
LisansLicenseKanalChannelNasılHow
LisanslıLicensed🎫 Ticket sistemiTicket systemTicket sistemine girip çağrı açın; size atanmış bir mühendis kontak kurar ve çözüme kadar takip eder.Sign in to the ticket system and open a ticket; an assigned engineer contacts you and follows up to resolution.
Community Edition💬 Forum uygulamasıForum appForum uygulamasından topluluk desteği alın. Forumda ayrıca Orbion mühendisleri de destek verir.Get community support from the Forum app. Orbion engineers are also present on the forum to help.

B · Terimler SözlüğüGlossary

Kılavuzda geçen terimlerin tümü, konuya göre gruplanmıştır.All terms used in this guide, grouped by topic.

Genel & UygulamaGeneral & App

TerimTermAnlamMeaning
Low-codeMevcut veritabanları üzerine kod yazmadan uygulama kurma yaklaşımı.Building apps on existing databases without writing code.
AppFormları menü yapısı altında toplayan üst birim. App → Module → Menu item.The top unit that groups forms under a menu structure. App → Module → Menu item.
ModuleBir App içindeki menü grubu.A menu group within an App.
Menu itemBir forma bağlı menü öğesi; opsiyonel Query Preset ve allowedGroups taşır. Pratikte bir (Form + Preset) çiftidir.A menu entry linked to a form; carries an optional Query Preset and allowedGroups. Effectively a (Form + Preset) pair.
PortalSon kullanıcıların uygulamalara eriştiği ön yüz.The front end where end users access the apps.
allowedGroupsGörünürlüğü gruplara bağlayan liste (boş = herkes).List binding visibility to groups (empty = everyone).

Bağlantı & VeriConnection & Data

TerimTermAnlamMeaning
ConnectionKayıtlı veritabanı bağlantısı (DB Designer'da yönetilir).A saved database connection (managed in DB Designer).
Schema / Table / ColumnBağlantı içindeki şema, tablo ve kolon hiyerarşisi.The schema, table and column hierarchy within a connection.
DatasourceBir komponentin/formun bağlantı + tablo kaynağı.The connection + table source of a component/form.
Global VariableAçılır listeleri besleyen, anahtar/değer ve opsiyonel parent taşıyan paylaşılan değer kümesi.A shared key/value set (with optional parent) that feeds dropdowns.

Form & DesignerForm & Designer

TerimTermAnlamMeaning
FormVeriyi gösteren/düzenleten ekran; komponentlerden oluşur.A screen that displays/edits data; made of components.
DesignerFormu kuran üç bölmeli editör: Palet · Tuval · Özellikler.The three-pane editor for building a form: Palette · Canvas · Properties.
Design / LiveDesign = kurgu tuvali (komponentler yer-tutucu); Live = kaydedilmiş formun portaldaki gerçek görünümü.Design = build canvas (components are placeholders); Live = the saved form's real portal view.
Canvas12-kolonluk yerleşim ızgarası; her komponentin width ve order'ı vardır.The 12-column layout grid; each component has a width and order.
Component / ElementForma yerleştirilen yapı taşı (Field, Table, Chart, Calendar…).A building block placed on the form (Field, Table, Chart, Calendar…).
Link ParametersParent → Child kolon eşlemesi; süzme ve master-detay için.Parent → Child column mapping; for filtering and master-detail.

KomponentlerComponents

TerimTermAnlamMeaning
FieldTek alanlık giriş/gösterim komponenti; tipe göre (metin, sayı, tarih, dropdown, User/Group/Org…) davranır.A single-field input/display component; behaves by type (text, number, date, dropdown, User/Group/Org…).
Cascade (bağlı alan)Bir alanın seçenekleri başka bir alanın (parent) değerine göre süzülür.A field whose options are filtered by another field's (parent) value.
TableSatır/kolon listesi; cellFormat, rowRules ve hücre linkleriyle.A rows/columns grid; with cellFormat, rowRules and cell links.
cellFormatHücreyi koşula göre biçimleyen kural (pill/arka plan/yazı rengi).A rule that formats a cell by condition (pill/background/text color).
rowRulesKoşula göre satırı vurgulayan kural (accent renk).A rule that accents a whole row by condition.
ChartGrafik; tek alan veya dimensions (eksen/seri) + measures (COUNT/SUM/AVG…).A chart; single field or dimensions (axis/series) + measures (COUNT/SUM/AVG…).
BoardKart/sütun (kanban) görünümü.A card/column (kanban) view.
CalendarKayıtları takvimde gösteren komponent.A component that shows records on a calendar.
Spanning barTakvimde çok günlük kaydın tek çubuğu.A multi-day record as one bar on the calendar.
TreeParent/child hiyerarşisini gösteren ağaç komponenti.A tree component showing a parent/child hierarchy.
Re-parentTree'de bir düğümü sürükleyip parentId'sini değiştirme.Dragging a tree node to change its parentId.
ViewerDosya/belge görüntüleyici komponent.A file/document viewer component.
Panel / TabKomponentleri gruplayan kapsayıcı ve sekme yapısı.A container and tab structure that groups components.

Kurallar & SorgularRules & Queries

TerimTermAnlamMeaning
RuleTetik + koşul + aksiyon yapısı; alanları gösterir/gizler, doğrular, değer atar.A trigger + condition + action structure; shows/hides, validates, sets values.
Trigger (kural)Kuralı çalıştıran olay (onChange, Before save…).The event that runs a rule (onChange, Before save…).
ConditionKural/sorgu koşulu — User ve Field bazlı.A rule/query condition — User- and Field-based.
Action / elseActionsKoşul doğruysa çalışan aksiyonlar (Then) ve değilse çalışanlar (Else).Actions run when the condition is true (Then) and otherwise (Else).
{{old.}}Bir alanın değişmeden önceki değerine erişim (kurallarda).Access to a field's value before it changed (in rules).
QueryBir formun önceden filtrelenmiş görünümü; koşullardan oluşur.A pre-filtered view of a form's data; made of conditions.
Query PresetBir menü öğesine bağlanan adlandırılmış sorgu; menü açılınca form filtreli gelir.A named query attached to a menu item; the form opens filtered.
OperatorKoşul operatörü — Standard, Date-Relative, Date-Rolling grupları.A condition operator — Standard, Date-Relative, Date-Rolling groups.
Value sourceKoşul değerinin kaynağı — Fixed, Current user, My groups, My organizations.Source of a condition value — Fixed, Current user, My groups, My organizations.
Approval StateOnay-etkin formlarda onay durumuna göre süzme (Waiting/Approved/Rejected/All).On approval-enabled forms, filtering by approval state (Waiting/Approved/Rejected/All).

ButonlarButtons

TerimTermAnlamMeaning
Canvas buttonForma yerleştirilen buton.A button placed on the form.
Panel buttonFormun alt aksiyon çubuğundaki global buton (panelButtons; onayda approvalPanelButtons).A global button in the form's bottom action bar (panelButtons; approvalPanelButtons on approval).
Action typeButonun işi: Save · Delete · Navigate · Workflow · Approve/Reject/Cancel.What a button does: Save · Delete · Navigate · Workflow · Approve/Reject/Cancel.

İş AkışlarıWorkflows

TerimTermAnlamMeaning
WorkflowOlaylara bağlı çok adımlı otomasyon; node'lardan oluşur.A multi-step automation bound to events; made of nodes.
NodeAkıştaki tek adım (kutu); toolbox'tan eklenir.A single step (box) in the flow; added from the toolbox.
ToolboxNode paleti (Start, Query Records, For Each, Approval, End…).The node palette (Start, Query Records, For Each, Approval, End…).
Query RecordsSELECT çalıştırıp sonucu bir Output Variable'a yazan node.A node that runs a SELECT and writes the result to an Output Variable.
For EachSorgu sonucundaki her satır için döngü gövdesini çalıştıran node (⟳ Loop / ▶ Continue portları; {{row.Kolon}}).A node that loops its body over each query row (⟳ Loop / ▶ Continue ports; {{row.Column}}).
Condition (node)Koşullu dallanma — ✓ Evet / ✗ Hayır portları.Conditional branch — ✓ Yes / ✗ No ports.
Approval (node)İnsan onayı bekleyen node; ✓ Approved / ✗ Rejected dallanır. Mode: Sequential/All/Majority/Any one.A node that waits for human approval; branches ✓ Approved / ✗ Rejected. Mode: Sequential/All/Majority/Any one.
Approval InboxOnaylayanın karar verdiği gelen kutusu.The inbox where an approver makes the decision.
ScheduleZamanlanmış tetik — Interval (her N dk) veya Cron + Timezone + Fixed Inputs.A scheduled trigger — Interval (every N min) or Cron + Timezone + Fixed Inputs.
Trigger sourceÇalışmanın kaynağı — record · schedule · manual · approval · resume.A run's source — record · schedule · manual · approval · resume.
Execution LogsHer çalışmanın durum/süre/adım kaydı.Per-run record of status/duration/steps.
IntelliSense {{ }}Metin alanlarında değişken otomatik tamamlama.Variable autocomplete in text fields.

EntegrasyonlarIntegrations

TerimTermAnlamMeaning
Inbound (Ingest)Dış sistemin POST ile JSON gönderip tabloya satır yazdırdığı uç nokta.An endpoint where an external system POSTs JSON to write table rows.
OutboundBir tabloyu GET ile dışa açan salt-okunur (pull) API.A read-only (pull) API exposing a table via GET.
API Key / HTTP BasicKimlik doğrulama türleri; sırlar BCrypt ile özetlenir.Authentication types; secrets are BCrypt-hashed.
Rotate KeyYeni anahtar üretip eskisini geçersiz kılma.Issue a new key and invalidate the old one.
Field MappingJSON ile kolon arası eşleme — Selective veya All. Source Field → Target Column / JSON Alias.JSON-to-column mapping — Selective or All. Source Field → Target Column / JSON Alias.
Sequence (Seq Type)Sunucu tarafı anahtar üretimi — None / DB Internal (nextval) / Custom (MAX+1, ör. CAT-000001).Server-side key generation — None / DB Internal (nextval) / Custom (MAX+1, e.g. CAT-000001).
Error StrategyInbound hata davranışı — Stop (tümünü geri al) / Continue (hatalıyı atla).Inbound error behavior — Stop (roll back all) / Continue (skip failed).
Row FilterOutbound'da hangi satırların döneceği — All / Custom WHERE + dinamik ?where=.Which rows outbound returns — All / Custom WHERE + dynamic ?where=.

E-postaEmail

TerimTermAnlamMeaning
SMTPE-posta gönderim sunucusu yapılandırması (host/port/SSL/kimlik).The mail-sending server config (host/port/SSL/credentials).
Email ServiceKuyruğu tarayıp gönderen arka plan servisi; Check Interval tarama sıklığı.The background service that scans the queue and sends; Check Interval is the scan frequency.
Queue (Pending/Sent/Failed)E-posta hattı klasörleri; Failed'lar ↺ Retry ile tekrar denenir.Email pipeline folders; Failed ones can be re-tried via ↺ Retry.
Email TemplateKullanıcı olaylarında otomatik gönderilen Subject/Body şablonu (Active/Inactive).A Subject/Body template auto-sent on user events (Active/Inactive).
{{appName}} vb.Şablon değişkenleri — {{firstName}}, {{loginName}}, {{tempPassword}} (yalnız kurulum/sıfırlama), {{appName}} (From Name).Template variables — {{firstName}}, {{loginName}}, {{tempPassword}} (setup/reset only), {{appName}} (From Name).

Lisans & DestekLicense & Support

TerimTermAnlamMeaning
Community EditionAnahtarsız ücretsiz sürüm — 10 form ve 25 aktif kullanıcıya kadar.The free, no-key edition — up to 10 forms and 25 active users.
System IDKuruluma özgü kimlik; lisans anahtarı almak için sağlayıcıya verilir.The installation's unique id; shared with the provider to obtain a key.
License KeyForm/kullanıcı limitlerini yükselten ticari anahtar (Apply License).A commercial key that raises form/user limits (Apply License).
BSL 1.0Business Source License — 1 Ocak 2028'e (Change Date) kadar ücretsiz; sonra ticari lisans.Business Source License — free until Jan 1, 2028 (Change Date); commercial thereafter.
Ticket systemLisanslı kullanıcıların çağrı açtığı destek kanalı; atanmış mühendis kontak kurar.The support channel where licensed users open tickets; an assigned engineer responds.
ForumCommunity Edition için topluluk + mühendis destek uygulaması.The community + engineer support app for Community Edition.
Eşleşen bölüm bulunamadı. Aramayı temizleyin.No matching section. Clear the search.