|
<< İçindekileri Görüntülemek İçin Tıklayın >> Yer: Teknik Kılavuzlar > IVEDI SQL Kullanıcı Kılavuzu > 9. Yerleşik kütüphane > 9.1 Paketler |
Bu paket yalnızca sabit içerir, fonksiyonu yoktur; sabitler parantezsiz okunur
(math.INT32_MAX).
| Sabitler | Tip |
|---|---|
INT8_MIN, INT8_MAX, UINT8_MAX | integer |
INT16_MIN, INT16_MAX, UINT16_MAX | integer |
INT32_MIN, INT32_MAX | integer |
UINT32_MAX, INT64_MIN, INT64_MAX | bigint |
UINT64_MAX, INT128_MIN, INT128_MAX | int128 |
UINT128_MAX, NUMBER_MIN, NUMBER_MAX | number |
NUMBER38_MIN, NUMBER38_MAX | number(38) |
DECIMAL_MIN, DECIMAL_MAX | decimal(18,2) |
FLOAT_MIN, FLOAT_MAX | float |
DOUBLE_MIN, DOUBLE_MAX | double |
| Üye | Notlar |
|---|---|
procedure Print(params args) | |
procedure PrintF(format string, params args) | {0}, {1} … yer tutucuları |
function GetLine() returns string | uygulanmamış |
Get/SetOutStream, Get/SetInStream, Get/SetErrorStream | Stream |
| Üye |
|---|
function FileExists(Dir Directory, FileName string) returns boolean |
function DeleteFile(Dir Directory, FileName string) returns boolean |
function RenameFile(oldDir, oldFileName, newDir, newFileName) returns boolean |
function MoveFile(oldDir, oldFileName, newDir, newFileName, overrd boolean = false) returns boolean |
İç tip FileSystem.FileStream (Stream'den türer): alanlar
Dir, FileName, mode, share; üyeler
openFile(), openFile(Dir, FileName, mode, share),
openTemp(). Sıralamalar: OpenMode (omRead, omWrite, omReadWrite),
ShareMode (smExclusive, smRead, smWrite, smReadWrite, smDelete); öndeğerler
omRead ve smExclusive.
| Üye | Durum |
|---|---|
base64_encode / base64_decode | çalışır (string/varbinary ve clob/blob aşırı yüklemeleri) |
hex_encode / hex_decode | çalışır (aynı aşırı yüklemeler) |
hash_crc32(data) returns bigint | çalışır; imzasız 32-bit değer, bu yüzden bigint |
hash_crc64(data) returns bigint | çalışır; bugünkü gerçekleme CRC-32 değerini döndürür |
hash(algo, len, data), hash_md5, hash_sha1,
hash_sha2_224/256/384/512 | uygulanmamış |
Kriptografik özet fonksiyonlarının hiçbiri uygulanmamıştır. Yalnızca CRC (bir sağlama toplamıdır, kriptografik değildir) ve kodlama/çözme çalışır. Parola özetleme ya da imza doğrulama için bu paket kullanılamaz.
Meta Graph API üzerinden mesaj gönderir. Asıl kullanım WhatsApp.Client tipidir:
execute block
as
c WhatsApp.Client;
id string;
begin
--// anahtar CREDENTIAL'da: create credential wa type HTTP identity '<numara kimliği>' password '<anahtar>'
c = WhatsApp.Client.FromCredential('wa');
id = c.SendText('905551112233', 'Merhaba');
id = c.SendTemplate('905551112233', 'hello_world', 'en_US');
id = c.SendDocument('905551112233', 'https://.../fatura.pdf', 'fatura.pdf');
c.MarkAsRead(id);
end;| Üye | Açıklama |
|---|---|
Client.FromCredential(ad) |
istemciyi bir TYPE HTTP credential'dan kurar: numara kimliği IDENTITY'den,
apiVersion/baseUrl/timeoutSec etiketlerden gelir. Anahtar alana yalnızca
credential:<ad> başvurusu olarak yazılır; gerçek anahtar istek anında çözülür, çağıranın
credential üzerinde USAGE hakkı olmalıdır. |
credential_info(ad) | credential'ın gizli olmayan alanları (JSON); parola içermez |
Client alanları | accessToken, phoneNumberId, businessAccountId,
apiVersion (öndeğer v23.0), baseUrl, timeoutSec (30),
maxDownloadBytes (100 MB); son isteğin lastStatus, lastResponse,
lastRetryAfter ve lastMimeType değerleri |
SendText, SendTemplate, SendImage,
SendDocument, SendMedia | mesaj kimliğini (wamid...) döndürür |
SendButtons(alıcı, metin, butonlar), SendList(alıcı, metin, buton, bölümler),
SendLocation(alıcı, enlem, boylam, ad, adres), SendContacts(alıcı, kişiler),
SendReaction(alıcı, wamid, emoji) |
etkileşimli butonlar ([{"id","title"}], 1–3), liste, konum, kişi kartı, tepki (boş emoji kaldırır) |
son parametre replyTo |
Send* metotlarında isteğe bağlı: yanıtlanan mesajın wamid'i (context.message_id) |
ListTemplates(maxCount), CreateTemplate(ad, dil, kategori, bileşenler), DeleteTemplate(ad) |
şablon yönetimi; businessAccountId (credential etiketi WABAID) gerekir. Ad
[a-z0-9_], kategori MARKETING/UTILITY/AUTHENTICATION. |
MarkAsRead(messageId), Post(govde json, replyTo) | okundu bildirimi; herhangi bir gövdeyi gönderme |
UploadMedia(fileName, mimeType, content Stream) |
medyayı yükler, medya kimliğini döndürür; akışın başından sonuna gönderilir, dosya belleğe alınmaz |
DownloadMedia(mediaId) → blob, MediaInfo(mediaId), DeleteMedia(mediaId) |
indirme iki adımlıdır (bilgi + bağlantı); Meta'nın sha256 özeti doğrulanır,
maxDownloadBytes aşılırsa indirmeden reddedilir; içerik türü lastMimeType'ta |
BuildText, BuildTemplate, BuildMedia, BuildButtons,
BuildList, BuildLocation, BuildContacts, BuildReaction,
BuildRead, WithReply(gövde, replyTo) |
ağa çıkmaz, yalnızca istek gövdesini (json) üretir |
MessageId(yanit), ErrorMessage(yanit), ErrorCode(yanit) | yanıt okuyucuları |
http_request(method, url, bearerToken, body, timeoutSec, out status, out retryAfter) |
alt düzey istek; GET, POST ya da DELETE; retryAfter yanıtın
Retry-After başlığıdır (saniye; yoksa NULL) |
http_upload(url, bearerToken, fileName, mimeType, content Stream, timeoutSec, out status),
http_download(url, bearerToken, expectedSha256, timeoutSec, out status, out mimeType, out errorBody) |
alt düzey multipart yükleme ve ikili indirme (blob; özet uyuşmazlığı hatadır) |
EnqueueText(credential, alıcı, metin), EnqueueTemplate(...), Enqueue(credential, gövde) |
giden kutusuna (ivd$whatsapp_outbox) yazar, kayıt kimliğini döndürür; credential o anda denetlenir |
ProcessOutbox(batchSize = 50, maxAttempts = 5, baseDelaySec = 30, maxDelaySec = 3600) |
zamanı gelmiş bekleyen kayıtları gönderir ve işlenen kayıt sayısını döndürür: başarı SENT (wamid),
geçici hata (ağ, 429, 5xx, Meta hız kodları; IsTransient) yeniden deneme (RetryDelay:
Retry-After ya da 30 sn × 2n, en çok 1 saat), aksi FAILED.
Her sonuç özerk işlemde yazılır; SQL depolu motorlarda özerk işlem bir kayıt noktasıdır. CancelOutbox(id)
bekleyeni iptal eder. |
OutboxJob |
Scheduler.Job alt tipi (alanlar batchSize, maxAttempts, baseDelaySec,
maxDelaySec; OnExecute → ProcessOutbox). Scheduler.attachJob ile
kaydedilir; veritabanının görev zamanlayıcısı açıkken (ALTER DATABASE … SET TASK SCHEDULER ON) iş
zamanlayıcı sürecinde koşar. attachJob alanları saklamaz; yeniden kurulan tipte öndeğerler geçerlidir. |
RecordEvent(eventKind, accountId, phoneNumberId, wamid, …, rawJson) |
webhook olayını (MESSAGE | STATUS) ivd$whatsapp_event tablosuna yazar; aynı
(tür, wamid, durum) satırı varsa yazmaz ve NULL döndürür |
--// dosyadan ya da tablodaki bir blob'dan medya yükleme
s Stream = Stream();
s.WriteRaw(icerik); --// icerik: blob / varbinary
mid = c.UploadMedia('fatura.pdf', 'application/pdf', s);
id = c.SendDocument('905551112233', mid, 'fatura.pdf');
b = c.DownloadMedia(mid);Bir blob, yukarıdaki gibi Stream() + WriteRaw ile kopyalanarak ya da
BlobStream(blob, omRead) ile kopyasız akışa alınır; dosya için
FileSystem.FileStream doğrudan verilir.
Medya için mediaRef http:// ya da https:// ile başlıyorsa bağlantı,
başlamıyorsa yüklenmiş medyanın kimliği sayılır. mediaType tam olarak
image, document, audio, video ya da
sticker yazılmalıdır.
Hatalar: WHATSAPP_NOT_CONFIGURED (anahtar ya da numara kimliği boş),
WHATSAPP_INVALID_ARGUMENT (zorunlu argüman boş ya da tür geçersiz),
WHATSAPP_API_ERROR (2xx dışı yanıt; ileti HTTP kodunu ve Meta'nın iletisini taşır).
TLS sertifikası her zaman doğrulanır ve yönlendirme izlenmez. Düz http yalnızca
localhost için kabul edilir. Erişim anahtarı hiçbir günlük satırına ya da hata iletisine
yazılmaz; anahtar kaynak koduna gömülmez, CREATE CREDENTIAL ile saklanır.
| Üye |
|---|
GetDomainName(), GetComputerName(), GetUserName() → string |
GetUserID(), GetGroupID() → integer; IsAdmin() → boolean |
GetSystemGUID() → guid |
GetOSType(), GetOSVersion() → string |
GetLastErrorCode() → integer; GetStatusText(status) → string;
RaiseLastOSError() |
ErrorLevel() → integer: son #SHELL komutunun çıkış kodu (bkz. bölüm 10) |
GetEnvironmentString(ad) → string; SetEnvironmentString(ad, değer) → boolean |
İç tip OS.Command: alanlar Dir, Executable,
Parameters, InStream, OutStream,
ErrorStream; üyeler Run(), Wait(TimeoutMS),
Terminate(ExitCode), GetExitCode(). Dir boş bırakılırsa
Executable işletim sisteminin arama yolundan (PATH) bulunur. Firebird
yedeği için OS.gbak (Command'dan türer) vardır: alanları (DatabaseFile,
BackupFile, Restore, UserName, Password …) Run()
sırasında gbak komut satırına çevrilir; gbak arama yolundan bulunur, Firebird'ün
bin dizini PATH'te olmalıdır.
OS.Command her iki platformda da çalışır. Kabuk
çağrılmaz: Windows'ta CreateProcess, POSIX'te fork +
execvp. Parameters POSIX'te motor tarafından bölünür: boşluk ve sekme
ayırır, yalnız çift tırnak özeldir (açar/kapar, argümana girmez; a"b c"d tek argüman
ab cd, "" boş argüman), tek tırnak ve ters bölü özel değildir. Windows'ta
motor bölmez: "<Executable>" <Parameters> satırı olduğu gibi
CreateProcess'e gider ve programın kendi çalışma zamanı Windows kuralıyla ayrıştırır.
Joker genişletme, yönlendirme ve boru gibi kabuk özellikleri yoktur; gerekiyorsa kabuk açıkça
çalıştırılır.
GetExitCode() sürecin çıkış kodunu verir. POSIX'te süreç bir
sinyalle sonlandıysa çıkış kodu yoktur; o durumda kabukların kuralı uygulanır ve
128 + sinyal numarası döner, örneğin Terminate() sonrası
143 (128 + SIGTERM). POSIX'te execvp'nin her hatası (bulunamayan
program dahil) 127 verir; Windows'ta bulunamayan program Run()'da hata
fırlatır. Terminate(ExitCode)'un ExitCode parametresi Windows'ta
TerminateProcess'e gider, POSIX'te karşılığı yoktur ve yok sayılır.
GetUserID() ve GetGroupID() POSIX kimlikleridir ve
Windows'ta -1 döner: Windows kimlikleri SID'dir, sayısal bir
kullanıcı/grup kimliği kavramı yoktur. IsAdmin() her iki platformda çalışır
(Windows'ta Administrators/Power Users üyeliği, POSIX'te etkin kullanıcının root
olması).
SetEnvironmentString ile yazılan bir değer GetEnvironmentString ile
sağlıklı geri okunamaz.
| Üye | Notlar |
|---|---|
GetTitle(), GetVersion(), GetVersionDate() | string; GetVersionDate bir derleme damgasıdır |
GetStartTime() | timestamp: sürecin başlangıç anı |
GetLogFileName(), GetConfigFileName() | string |
GetConfigValue(ad) | string |
GetLogLevel() | integer; salt okunur, SQL'den değiştirilemez |
isDebugMode() | boolean |
GetCPUType() | string |
Get/SetOutStream, Get/SetInStream, Get/SetErrorStream | Stream |
| Üye | Durum |
|---|---|
procedure Assert(cond boolean, msg string = null) | false ise ASSERT istisnası (yakalanabilir) |
WriteDebugOut(msg), WriteDebugOutF(fmt, params) | çalışır |
WriteMemoryDump(fileName, flags), WriteProcessDump(fileName) | çalışır |
DumpObject(objectName, fileName, options) | çalışır |
GetCallStack(skipFirstN, depth, withParamValues) | uygulanmamış |
EventLog.write(source, source_object_id, source_key, severity, event_type,
result, message, extra = null, data = null)Gövdesi kaydı in autonomous transaction do içinde yazar, yani çağıran geri
alsa bile kayıt kalır. severity sıralaması (ivd$EventLogSeverity):
Critical, Error, Warning, Information, Verbose. Kayıtlar
ivd$event_log tablosundadır; zaman ve kullanıcı kimliği otomatik yazılır.
Scheduler.Job tipinden türetip OnExecute() yordamını
geçersiz kılarak bir iş tanımlanır; sonra:
| Üye |
|---|
attachJob(j Job) / detachJob(job_name) |
enableJob(job_name) / disableJob(job_name) |
startJob(job_name) / stopJob(job_name) / resetJob(job_name) |
verifySchedule(schedule, out errorMsg) returns boolean |
calcNextRuntime(in out runtime, firstRun, schedule, out errorMsg) returns boolean |
jobCompleted(j Job, e Exception): koşucu her çalışmanın sonunda çağırır; sonucu ve bir sonraki zamanı ivd$scheduler_jobs'a yazar |
Job alanları: job_name, job_type (varsayılan
'PSQL'), start_date, repeat_interval,
schedule_limit, end_date, enabled,
auto_disable ('N', 'A' her zaman, 'S' başarıda,
'F' hatada), auto_disable_after, comments,
logging_level, execution_log_limit. Geçersiz zamanlama dizgisi
invalid_job_schedule, bulunamayan iş job_not_found istisnası verir.
Her işlem EventLog'a yazılır. Örnek zamanlama dizgisi:
'secondly; seconds=5,15,25,35,45,55'.
Paketin kendi fonksiyonu yoktur; beş iç tip vardır.
| Tip | İçerik |
|---|---|
NET.MailAddress | mailAddr, friendlyName; kurucu MailAddress(mailAddr, friendlyName = null) |
NET.MailAttachment | fileName, title, contentType, contentTransfer, charSet, contentDisposition, contentID, extraHeaders, content Stream |
NET.MailMessage | to/cc/bccRecipients, attachments, body (satır dizisi), fromAddr, subject, charSet ('UTF-8'), replyTo, receiptRecipient, priority (3), encoding (meDefault, meMIME, mePlainText) |
NET.SMTPClient | host, port = 25, useSSL, timeout = 60, authType (auDefault, auLogin, auPlain, auPlainC, auCramMD5, auDigestMD5, auXOAUTH, auXOAUTH2; öndeğer auLogin); connect(), authenticate(user, pass), send(), send(msg), AddMessage(msg), disconnect() |
NET.TCPClient | host, port, useSSL, zaman aşımları saniye cinsinden
(sendtimeout ve recvtimeout öndeğer 60; bağlanma için connecttimeout
öndeğer 10, 0 ise hizmetin yapılandırmasındaki değer kullanılır); connect(), connect(host, port, useSSL), Send(stream, len), Recv(stream, len), GetStream(), disconnect() |
Genel HTTP ve FTP istemci tipi yoktur. HTTP isteği yalnızca WhatsApp
paketinin http_request/http_upload/http_download giriş
noktalarıyla yapılabilir.
MessageQueue yalnızca bir zarf tipi bildirir
(MessageQueue.Message: destination, messageText,
MessageBody JSONType) ve yöntemi yoktur. Metadata paketi katalog
okuyucusudur: Attribute, Attributes, AllAttributes,
EffectiveAttribute, Description, Caption, ObjectInfo,
Columns, Relations, Search, UpgradeReportText
(bkz. 6.11). Utils paketi boştur; üyesi yoktur.