الانتقال إلى المحتوى الرئيسي
كل كائن في Twenty يأتي مع مجموعة من الحقول النظامية التي لا تقوم بتعريفها بنفسك أبدًا. يتم إنشاؤها تلقائيًا بواسطة الخادم عندما يتم توفير الكائن: id, createdAt, updatedAt, deletedAt, createdBy, updatedBy, position, searchVector نظرًا لأنك لا تعرّف هذه الحقول باستخدام defineField()، فلا يوجد ثابت universalIdentifier لتقوم باستيراده. فكيف تُشير إلى createdAt كعمود في عرض؟

المشكلة

منذ Twenty 2.19، يتم اشتقاق المعرّف الشامل للحقل النظامي بشكل حتمي بواسطة الخادم من ثلاثة مُدخلات: المعرّف الشامل للتطبيق، والمعرّف الشامل للكائن، واسم الحقل. ابتكار معرّف (id) وتضمينه بشكل ثابت لن ينجح: لن يطابق أي شيء على الخادم، وسترفض المزامنة المرجع المعلّق:
Dev sync failed: viewField: INVALID_VIEW_DATA: Field metadata not found

الحل

يتوفر getFieldUniversalIdentifier في twenty-sdk بدءًا من الإصدار 2.21 فصاعدًا.
استخدم getFieldUniversalIdentifier لاشتقاق نفس القيمة تمامًا التي يستخدمها الخادم. يأخذ المُدخلات الثلاثة ويُرجِع المعرّف الشامل للحقل:
import { getFieldUniversalIdentifier } from 'twenty-sdk/define';

const createdAtFieldId = getFieldUniversalIdentifier({
  applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
  objectUniversalIdentifier: MY_OBJECT_UNIVERSAL_IDENTIFIER,
  name: 'createdAt',
});
  • applicationUniversalIdentifier هو معرّف تطبيقك، وهو نفسه الذي تمرّره إلى defineApplication().
  • objectUniversalIdentifier هو معرّف الكائن الذي ينتمي إليه الحقل.
  • name هو اسم الحقل النظامي، وهو إحدى القيم المُدرجة أعلاه.

مثال: عمود createdAt في عرض

الحالة النموذجية هي إضافة عمود createdAt إلى عرض لأحد الكائنات المخصّصة لديك. اشتقّ معرّف الحقل واستدعِه كما تستدعي أي fieldMetadataUniversalIdentifier آخر:
src/views/example-view.ts
import {
  defineView,
  getFieldUniversalIdentifier,
} from 'twenty-sdk/define';

const APPLICATION_UNIVERSAL_IDENTIFIER =
  '0b04e15c-27b2-4741-9046-b32e07469072';
const MY_OBJECT_UNIVERSAL_IDENTIFIER =
  'c782b61c-70fd-4c88-9cd6-4e61ab8d7591';

export default defineView({
  universalIdentifier: '70f10d44-144a-4da8-8c6f-3ec2422138c0',
  name: 'All records',
  objectUniversalIdentifier: MY_OBJECT_UNIVERSAL_IDENTIFIER,
  icon: 'IconList',
  position: 0,
  fields: [
    {
      universalIdentifier: '75a90bc4-d901-4df4-85e0-af29db5e0104',
      fieldMetadataUniversalIdentifier: getFieldUniversalIdentifier({
        applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
        objectUniversalIdentifier: MY_OBJECT_UNIVERSAL_IDENTIFIER,
        name: 'createdAt',
      }),
      position: 0,
      isVisible: true,
      size: 200,
    },
  ],
});
المعرّف المُشتقّ نفسه يعمل في أي مكان يُتوقَّع فيه fieldMetadataUniversalIdentifier: حقول العرض، عوامل التصفية، أوامر الفرز، المجموعات، وعناصر واجهة تخطيط الصفحة.
اشتقّ المعرّف، ولا تقُم بتضمينه بشكل ثابت. نظرًا لأن الخادم يشتق القيمة من معرّف التطبيق، ومعرّف الكائن، واسم الحقل، فإن استدعاء getFieldUniversalIdentifier يُبقي مرجعك صحيحًا حتى إذا تغيّرت تلك المُدخلات، ويتجنّب الانحراف إذا تطوّر أسلوب الاشتقاق في أي وقت.

الكائنات القياسية في Twenty

بالنسبة إلى كائن Twenty قياسي (Person، Company، Opportunity، …)، لا تحتاج إلى اشتقاق أي شيء: فمعرّفات الحقول النظامية هي ثوابت مُسبقة الحساب يمكنك استيرادها مباشرة.
import { STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS } from 'twenty-sdk/define';

// STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.company.fields.createdAt.universalIdentifier
// STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.fields.updatedAt.universalIdentifier
الجأ إلى getFieldUniversalIdentifier عندما يكون الكائن واحدًا مما يعرّفه تطبيقك باستخدام defineObject()، حيث لا يوجد مثل هذا الثابت.
name حقل افتراضي، وليس حقلًا نظاميًا. يحتفظ بمعرّفه الشامل الثابت الخاص به ولا يتم اشتقاقه عبر getFieldUniversalIdentifier. في الكائنات التي تعرّفها، استدعِ حقل name باستخدام المعرّف الذي منحته له في defineObject().