مستندات PSScript / مرجع

موجودیت‌ها و پرس‌وجوها

موجودیت‌ها رکوردهای دادهٔ درجه‌یک PSScript هستند. PSEntity آن‌ها را می‌سازد و تغییر می‌دهد؛ PSEntityQuery آن‌ها را با یک سازندهٔ روان و زنجیرپذیر بازمی‌خواند.

ساخت موجودیت‌ها

یک موجودیت را از نام کلاسِ کاملاً مقیدش بسازید. موجودیت خالی آغاز می‌شود؛ آن را با متدهای زیر پر می‌کنید و سپس ذخیره‌اش می‌کنید.

var order = PSEntity("com.domain.commerce.Order");
order.identifier("ORD-2024-001");
PSEntity(typeName)

ساخت یک موجودیت جدیدِ ذخیره‌نشده از کلاس داده‌شده.

entity.identifier(idn)

تنظیم یک شناسانهٔ تجاریِ پایدار — کلیدی که بعداً به data$.load می‌دهید.

بارگذاری‌یا‌ساخت یک الگوی بسیار رایج، موجودیت را با شناسانه بارگذاری می‌کند و تنها زمانی که هنوز وجود ندارد یکی تازه می‌سازد، تا اسکریپت برای اجرای دوباره امن باشد:
var idn = "PROCESS_CATEGORY_BUSINESS";
var model = data$.load(idn);
if (model == null) {
    model = PSEntity("com.paradicshift.platform.automation.process.Category");
    model.identifier(idn);
}
model.text("name", "en", "Business");
data$.persist(model);

فیلدها و مقادیر

entity.val(field, value)

تنظیم یک فیلد اسکالر (رشته، عدد، بولی، …). ‏value نام مستعار val است.

entity.val(field)

یک فیلد را بازمی‌خواند؛ اگر تنظیم نشده باشد null برمی‌گرداند.

order.val("total", 149.99);
order.val("currency", "USD");
order.val("hidden", false);

context$.log("total = {}", order.val("total"));   // 149.99

متن چندزبانه

فیلدهای متنی به‌ازای هر لوکال ذخیره می‌شوند، بنابراین یک رکورد می‌تواند نام یا توضیح خود را هم‌زمان به چند زبان داشته باشد.

entity.text(field, locale, text)

تنظیم متن محلی‌شدهٔ یک فیلد. نام فیلد و لوکال بر اساس ترتیب خودکار تشخیص داده می‌شوند، پس هم ("name", "en", …) و هم ("en", "name", …) کار می‌کنند.

entity.text(field, locale)

یک مقدار محلی‌شده را بازمی‌خواند. خواندن لوکالی که هرگز تنظیم نشده خطای زمان اجراست، پس اول آن را نگهبانی یا تنظیم کنید.

component.text("name", "en", "Execute access");
component.text("name", "fa", "دسترسی اجرا");

هندسهٔ GIS

موجودیت‌ها می‌توانند فیلدهای مکانی را به‌صورت رشته‌های WKT نگه دارند. هندسه هنگام تنظیم تجزیه و اعتبارسنجی می‌شود.

entity.gis(field, wkt)

افزودن یک هندسه به یک فیلد از یک رشتهٔ WKT. ‏gisWkt نام مستعار است.

انواع هندسهٔ WKT پشتیبانی‌شده شامل نقطه‌ها، خط‌ها، چندضلعی‌ها و گونه‌های چندگانهٔ آن‌هاست:

e.gis("location", "POINT(%f %f)".formatted(lon, lat));
e.gis("area_1",   "POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))"
                  .formatted(lon, lat, lon2, lat, lon2, lat2, lon, lat2, lon, lat));
e.gis("path",     "LINESTRING(%f %f, %f %f, %f %f)"
                  .formatted(lon, lat, lon2, lat2, lon3, lat3));

کنترل دسترسی

entity.grantAll()

اعطای دسترسی باز به موجودیت — برای دادهٔ مشترک پلتفرم مانند دسته‌ها و ویژگی‌های مدل مفید است.

entity.openAccess(accessType)

باز کردن نوع مشخصی از دسترسی (برای نمونه «list») بدون اعطای همه‌چیز.

ذخیره و پیوند

ذخیره، حذف و مرتبط‌کردن موجودیت‌ها از طریق data$ انجام می‌شود (بخش اشیای سیستمی را ببینید). یک موجودیت یک delete سهل‌الوصول هم در اختیار می‌گذارد.

data$.persist(entity)  ·  data$.link(child, parent, relation)  ·  entity.delete()
data$.persist(subCat);
data$.link(subCat, model, "IN_PARENT_CATEGORY");

PSEntityQuery

یک پرس‌وجوی خواندنی روی یک کلاس پایه بسازید و بندهای select (چه چیزی برگردد)، بندهای filter (کدام سطرها) و بندهای پیمایش (دنبال‌کردن روابط) را زنجیر کنید. پرس‌وجوی آماده را به data$.query() بدهید.

var q = PSEntityQuery("com.domain.commerce.Order")
            .selectId()
            .selectVal("total")
            .filterVal("currency", "equals", "USD")
            .filterVal("total", "greater_than", 100);

var rows = data$.query(q);

بندهای انتخاب

.selectId()گنجاندن شناسهٔ داخلی
.selectIdentifier()گنجاندن شناسانهٔ تجاری
.selectVal(field)گنجاندن یک فیلد اسکالر
.selectText(field, locale)گنجاندن متن محلی‌شده
.selectCount(field)شمارشِ تجمیعی
.selectSumVal(field, alias)جمعِ تجمیعیِ یک فیلد

بندهای فیلتر

.filterId(value)تطبیق بر اساس شناسهٔ داخلی
.filterIdentifier(value, op)تطبیق بر اساس شناسانهٔ تجاری
.filterVal(field, op, value)تطبیق بر اساس یک فیلد اسکالر
.filterText(field, locale, op, value)تطبیق بر اساس متن محلی‌شده
.filter(name, op, value)عمومی: به‌طور خودکار به id / identifier / val مسیردهی می‌کند
.filterGIS(field, predicate, wkt)تطبیق مکانی در برابر یک هندسهٔ WKT (نام مستعار filterGis)

پیمایش

.forward(relation)دنبال‌کردن یک رابطه در جهت رو‌به‌جلو
.backward(relation)دنبال‌کردن یک رابطه در جهت معکوس

عملگرهای فیلتر

عملگر مقایسه در یک فیلتر به‌صورت یک رشته داده می‌شود:

رشتهٔ عملگرمعنی
"equals"برابر با
"not_equals"نابرابر با
"greater_than"بزرگ‌تر از
"greater_than_or_equals"بزرگ‌تر یا مساوی
"less_than"کوچک‌تر از
"less_than_or_equals"کوچک‌تر یا مساوی
مقادیر فیلتر یک مقدار فیلتر باید اسکالر (رشته، عدد، بولی، null) یا یک نگاشت باشد — موجودیت‌ها، پرس‌وجوها و اشیای سیستمی را نمی‌توان به‌عنوان مقدار فیلتر به‌کار برد.