i18n - docs translations (#22865)
Created by Github action <!-- This is an auto-generated description by cubic. --> <a href="https://cubic.dev/pr/twentyhq/twenty/pull/22865?utm_source=github" target="_blank" rel="noopener noreferrer" data-no-image-dialog="true"><picture><source media="(prefers-color-scheme: dark)" srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img alt="Review in cubic" src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a> <!-- End of auto-generated description by cubic. --> Co-authored-by: github-actions <github-actions@twenty.com>
This commit is contained in:
committed by
GitHub
parent
bc1ccf526f
commit
c8c587ba2c
@@ -866,6 +866,7 @@
|
||||
"l/fr/developers/extend/apps/data/overview",
|
||||
"l/fr/developers/extend/apps/data/objects",
|
||||
"l/fr/developers/extend/apps/data/extending-objects",
|
||||
"l/fr/developers/extend/apps/data/system-fields",
|
||||
"l/fr/developers/extend/apps/data/relations"
|
||||
]
|
||||
},
|
||||
@@ -1318,6 +1319,7 @@
|
||||
"l/ar/developers/extend/apps/data/overview",
|
||||
"l/ar/developers/extend/apps/data/objects",
|
||||
"l/ar/developers/extend/apps/data/extending-objects",
|
||||
"l/ar/developers/extend/apps/data/system-fields",
|
||||
"l/ar/developers/extend/apps/data/relations"
|
||||
]
|
||||
},
|
||||
@@ -1770,6 +1772,7 @@
|
||||
"l/cs/developers/extend/apps/data/overview",
|
||||
"l/cs/developers/extend/apps/data/objects",
|
||||
"l/cs/developers/extend/apps/data/extending-objects",
|
||||
"l/cs/developers/extend/apps/data/system-fields",
|
||||
"l/cs/developers/extend/apps/data/relations"
|
||||
]
|
||||
},
|
||||
@@ -2222,6 +2225,7 @@
|
||||
"l/de/developers/extend/apps/data/overview",
|
||||
"l/de/developers/extend/apps/data/objects",
|
||||
"l/de/developers/extend/apps/data/extending-objects",
|
||||
"l/de/developers/extend/apps/data/system-fields",
|
||||
"l/de/developers/extend/apps/data/relations"
|
||||
]
|
||||
},
|
||||
@@ -2674,6 +2678,7 @@
|
||||
"l/es/developers/extend/apps/data/overview",
|
||||
"l/es/developers/extend/apps/data/objects",
|
||||
"l/es/developers/extend/apps/data/extending-objects",
|
||||
"l/es/developers/extend/apps/data/system-fields",
|
||||
"l/es/developers/extend/apps/data/relations"
|
||||
]
|
||||
},
|
||||
@@ -3126,6 +3131,7 @@
|
||||
"l/it/developers/extend/apps/data/overview",
|
||||
"l/it/developers/extend/apps/data/objects",
|
||||
"l/it/developers/extend/apps/data/extending-objects",
|
||||
"l/it/developers/extend/apps/data/system-fields",
|
||||
"l/it/developers/extend/apps/data/relations"
|
||||
]
|
||||
},
|
||||
@@ -3578,6 +3584,7 @@
|
||||
"l/ja/developers/extend/apps/data/overview",
|
||||
"l/ja/developers/extend/apps/data/objects",
|
||||
"l/ja/developers/extend/apps/data/extending-objects",
|
||||
"l/ja/developers/extend/apps/data/system-fields",
|
||||
"l/ja/developers/extend/apps/data/relations"
|
||||
]
|
||||
},
|
||||
@@ -4030,6 +4037,7 @@
|
||||
"l/ko/developers/extend/apps/data/overview",
|
||||
"l/ko/developers/extend/apps/data/objects",
|
||||
"l/ko/developers/extend/apps/data/extending-objects",
|
||||
"l/ko/developers/extend/apps/data/system-fields",
|
||||
"l/ko/developers/extend/apps/data/relations"
|
||||
]
|
||||
},
|
||||
@@ -4482,6 +4490,7 @@
|
||||
"l/pt/developers/extend/apps/data/overview",
|
||||
"l/pt/developers/extend/apps/data/objects",
|
||||
"l/pt/developers/extend/apps/data/extending-objects",
|
||||
"l/pt/developers/extend/apps/data/system-fields",
|
||||
"l/pt/developers/extend/apps/data/relations"
|
||||
]
|
||||
},
|
||||
@@ -4934,6 +4943,7 @@
|
||||
"l/ro/developers/extend/apps/data/overview",
|
||||
"l/ro/developers/extend/apps/data/objects",
|
||||
"l/ro/developers/extend/apps/data/extending-objects",
|
||||
"l/ro/developers/extend/apps/data/system-fields",
|
||||
"l/ro/developers/extend/apps/data/relations"
|
||||
]
|
||||
},
|
||||
@@ -5820,6 +5830,7 @@
|
||||
"l/tr/developers/extend/apps/data/overview",
|
||||
"l/tr/developers/extend/apps/data/objects",
|
||||
"l/tr/developers/extend/apps/data/extending-objects",
|
||||
"l/tr/developers/extend/apps/data/system-fields",
|
||||
"l/tr/developers/extend/apps/data/relations"
|
||||
]
|
||||
},
|
||||
@@ -6272,6 +6283,7 @@
|
||||
"l/zh/developers/extend/apps/data/overview",
|
||||
"l/zh/developers/extend/apps/data/objects",
|
||||
"l/zh/developers/extend/apps/data/extending-objects",
|
||||
"l/zh/developers/extend/apps/data/system-fields",
|
||||
"l/zh/developers/extend/apps/data/relations"
|
||||
]
|
||||
},
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
---
|
||||
title: استهداف الحقول النظامية
|
||||
description: استدعِ الحقول النظامية التي يتم إنشاؤها تلقائيًا مثل `createdAt` أو `updatedAt` من العروض والكائنات الأخرى باستخدام `getFieldUniversalIdentifier`.
|
||||
icon: gears
|
||||
---
|
||||
|
||||
كل كائن في Twenty يأتي مع مجموعة من **الحقول النظامية** التي لا تقوم بتعريفها بنفسك أبدًا. يتم إنشاؤها تلقائيًا بواسطة الخادم عندما يتم توفير الكائن:
|
||||
|
||||
`id`, `createdAt`, `updatedAt`, `deletedAt`, `createdBy`, `updatedBy`, `position`, `searchVector`
|
||||
|
||||
نظرًا لأنك لا تعرّف هذه الحقول باستخدام [`defineField()`](/l/ar/developers/extend/apps/data/extending-objects)، فلا يوجد ثابت `universalIdentifier` لتقوم باستيراده. فكيف تُشير إلى `createdAt` كعمود في [عرض](/l/ar/developers/extend/apps/layout/views)؟
|
||||
|
||||
## المشكلة
|
||||
|
||||
منذ Twenty 2.19، يتم اشتقاق المعرّف الشامل للحقل النظامي **بشكل حتمي** بواسطة الخادم من ثلاثة مُدخلات: المعرّف الشامل للتطبيق، والمعرّف الشامل للكائن، واسم الحقل. ابتكار معرّف (id) وتضمينه بشكل ثابت لن ينجح: لن يطابق أي شيء على الخادم، وسترفض المزامنة المرجع المعلّق:
|
||||
|
||||
```
|
||||
Dev sync failed: viewField: INVALID_VIEW_DATA: Field metadata not found
|
||||
```
|
||||
|
||||
## الحل
|
||||
|
||||
<Note>
|
||||
يتوفر `getFieldUniversalIdentifier` في `twenty-sdk` بدءًا من الإصدار 2.21 فصاعدًا.
|
||||
</Note>
|
||||
|
||||
استخدم `getFieldUniversalIdentifier` لاشتقاق نفس القيمة تمامًا التي يستخدمها الخادم. يأخذ المُدخلات الثلاثة ويُرجِع المعرّف الشامل للحقل:
|
||||
|
||||
```ts
|
||||
import { getFieldUniversalIdentifier } from 'twenty-sdk/define';
|
||||
|
||||
const createdAtFieldId = getFieldUniversalIdentifier({
|
||||
applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
|
||||
objectUniversalIdentifier: MY_OBJECT_UNIVERSAL_IDENTIFIER,
|
||||
name: 'createdAt',
|
||||
});
|
||||
```
|
||||
|
||||
* `applicationUniversalIdentifier` هو معرّف تطبيقك، وهو نفسه الذي تمرّره إلى [`defineApplication()`](/l/ar/developers/extend/apps/config/application).
|
||||
* `objectUniversalIdentifier` هو معرّف الكائن الذي ينتمي إليه الحقل.
|
||||
* `name` هو اسم الحقل النظامي، وهو إحدى القيم المُدرجة أعلاه.
|
||||
|
||||
## مثال: عمود `createdAt` في عرض
|
||||
|
||||
الحالة النموذجية هي إضافة عمود `createdAt` إلى عرض لأحد الكائنات المخصّصة لديك. اشتقّ معرّف الحقل واستدعِه كما تستدعي أي `fieldMetadataUniversalIdentifier` آخر:
|
||||
|
||||
```ts 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`: حقول العرض، عوامل التصفية، أوامر الفرز، المجموعات، وعناصر واجهة تخطيط الصفحة.
|
||||
|
||||
<Note>
|
||||
اشتقّ المعرّف، ولا تقُم بتضمينه بشكل ثابت. نظرًا لأن الخادم يشتق القيمة من معرّف التطبيق، ومعرّف الكائن، واسم الحقل، فإن استدعاء
|
||||
`getFieldUniversalIdentifier` يُبقي مرجعك صحيحًا حتى إذا تغيّرت تلك المُدخلات، ويتجنّب الانحراف إذا تطوّر أسلوب الاشتقاق في أي وقت.
|
||||
</Note>
|
||||
|
||||
## الكائنات القياسية في Twenty
|
||||
|
||||
بالنسبة إلى كائن Twenty **قياسي** (Person، Company، Opportunity، …)، لا تحتاج إلى اشتقاق أي شيء: فمعرّفات الحقول النظامية هي ثوابت مُسبقة الحساب يمكنك استيرادها مباشرة.
|
||||
|
||||
```ts
|
||||
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()`](/l/ar/developers/extend/apps/data/objects)، حيث لا يوجد مثل هذا الثابت.
|
||||
|
||||
<Note>
|
||||
`name` حقل **افتراضي**، وليس حقلًا نظاميًا. يحتفظ بمعرّفه الشامل الثابت الخاص به ولا يتم اشتقاقه عبر
|
||||
`getFieldUniversalIdentifier`. في الكائنات التي تعرّفها، استدعِ حقل
|
||||
`name` باستخدام المعرّف الذي منحته له في `defineObject()`.
|
||||
</Note>
|
||||
@@ -34,7 +34,7 @@ export default defineView({
|
||||
|
||||
* `objectUniversalIdentifier` يحدّد الكائن الذي ينطبق عليه هذا العرض. يمكن أن يكون كائنًا مخصصًا قمتَ بتعريفه أو كائن Twenty قياسيًا.
|
||||
* `key: ViewKey.INDEX` يحدد العرض بوصفه عرض القائمة الرئيسي للكائن (ذلك الذي يفتحه عنصر التنقل `OBJECT`).
|
||||
* يتحكّم `fields` في الأعمدة التي تظهر وترتيبها. يشير كل حقل إلى `fieldMetadataUniversalIdentifier`.
|
||||
* يتحكّم `fields` في الأعمدة التي تظهر وترتيبها. يشير كل حقل إلى `fieldMetadataUniversalIdentifier`. للإشارة إلى حقل نظام يتم إنشاؤه تلقائيًا مثل `createdAt`، راجع قسم [استهداف حقول النظام](/l/ar/developers/extend/apps/data/system-fields).
|
||||
* يمكنك أيضًا تعريف `filters` و`filterGroups` و`sorts` و`groups` و`fieldGroups` لتكوينات أكثر تقدمًا.
|
||||
* يتحكّم `position` في الترتيب عند وجود عدة عروض لنفس الكائن.
|
||||
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
---
|
||||
title: Cílení na systémová pole
|
||||
description: Odkazujte na automaticky vytvářená systémová pole, jako jsou createdAt nebo updatedAt, ve zobrazeních a dalších entitách pomocí getFieldUniversalIdentifier.
|
||||
icon: gears
|
||||
---
|
||||
|
||||
Každý objekt v Twenty je dodáván se sadou **systémových polí**, která sami nikdy nedefinujete. Tato pole jsou automaticky vytvářena serverem při zřízení objektu:
|
||||
|
||||
`id`, `createdAt`, `updatedAt`, `deletedAt`, `createdBy`, `updatedBy`, `position`, `searchVector`
|
||||
|
||||
Protože tato pole nedefinujete pomocí [`defineField()`](/l/cs/developers/extend/apps/data/extending-objects), neexistuje žádná konstanta `universalIdentifier`, kterou byste mohli importovat. Jak tedy odkážete na `createdAt` jako na sloupec ve [zobrazení](/l/cs/developers/extend/apps/layout/views)?
|
||||
|
||||
## Problém
|
||||
|
||||
Od Twenty 2.19 je univerzální identifikátor systémového pole **deterministicky odvozován** serverem ze tří vstupů: univerzálního identifikátoru aplikace, univerzálního identifikátoru objektu a názvu pole. Vymyslet si id a natvrdo ho zapsat nebude fungovat: neshoduje se s ničím na serveru a synchronizace zamítne osiřelý odkaz:
|
||||
|
||||
```
|
||||
Dev sync failed: viewField: INVALID_VIEW_DATA: Field metadata not found
|
||||
```
|
||||
|
||||
## Řešení
|
||||
|
||||
<Note>
|
||||
`getFieldUniversalIdentifier` je k dispozici od `twenty-sdk` verze 2.21 a vyšší.
|
||||
</Note>
|
||||
|
||||
Použijte `getFieldUniversalIdentifier` k odvození přesně stejné hodnoty, jakou používá server. Funkce přijímá tři vstupy a vrací univerzální identifikátor pole:
|
||||
|
||||
```ts
|
||||
import { getFieldUniversalIdentifier } from 'twenty-sdk/define';
|
||||
|
||||
const createdAtFieldId = getFieldUniversalIdentifier({
|
||||
applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
|
||||
objectUniversalIdentifier: MY_OBJECT_UNIVERSAL_IDENTIFIER,
|
||||
name: 'createdAt',
|
||||
});
|
||||
```
|
||||
|
||||
* `applicationUniversalIdentifier` je identifikátor vaší aplikace, ten, který předáváte do [`defineApplication()`](/l/cs/developers/extend/apps/config/application).
|
||||
* `objectUniversalIdentifier` je identifikátor objektu, ke kterému pole patří.
|
||||
* `name` je název systémového pole, jedna z výše uvedených hodnot.
|
||||
|
||||
## Příklad: sloupec createdAt v zobrazení
|
||||
|
||||
Typickým případem je přidání sloupce `createdAt` do zobrazení některého z vašich vlastních objektů. Odvoďte identifikátor pole a odkažte na něj stejně jako na jakýkoli jiný `fieldMetadataUniversalIdentifier`:
|
||||
|
||||
```ts 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,
|
||||
},
|
||||
],
|
||||
});
|
||||
```
|
||||
|
||||
Tentýž odvozený identifikátor funguje všude tam, kde se očekává `fieldMetadataUniversalIdentifier`: pole zobrazení, filtry, řazení, seskupování a widgety rozložení stránky.
|
||||
|
||||
<Note>
|
||||
Identifikátor odvozujte, neukládejte ho natvrdo. Protože server odvozuje hodnotu z
|
||||
ID aplikace, ID objektu a názvu pole, volání
|
||||
`getFieldUniversalIdentifier` udržuje odkaz správný i v případě, že se tyto
|
||||
vstupy změní, a předchází odchylkám, pokud se samotný způsob odvozování někdy změní.
|
||||
</Note>
|
||||
|
||||
## Standardní objekty Twenty
|
||||
|
||||
U **standardního** objektu Twenty (Person, Company, Opportunity, …) nemusíte nic odvozovat: identifikátory systémových polí jsou předpočítané konstanty, které můžete přímo importovat.
|
||||
|
||||
```ts
|
||||
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
|
||||
```
|
||||
|
||||
Použijte `getFieldUniversalIdentifier` v případě, kdy je objekt definován **vaší aplikací** pomocí [`defineObject()`](/l/cs/developers/extend/apps/data/objects) a žádná taková konstanta neexistuje.
|
||||
|
||||
<Note>
|
||||
`name` je **výchozí** pole, nikoli systémové pole. Má svůj vlastní natvrdo daný
|
||||
univerzální identifikátor a neodvozuje se pomocí
|
||||
`getFieldUniversalIdentifier`. U objektů, které definujete, odkazujte na pole
|
||||
`name` pomocí identifikátoru, který jste mu dali v `defineObject()`.
|
||||
</Note>
|
||||
@@ -34,7 +34,7 @@ export default defineView({
|
||||
|
||||
* `objectUniversalIdentifier` určuje, na který objekt se toto zobrazení vztahuje. Může to být vlastní objekt, který jste definovali, nebo standardní objekt Twenty.
|
||||
* `key: ViewKey.INDEX` označuje zobrazení jako hlavní seznamové zobrazení objektu (to, které se otevře po kliknutí na navigační položku `OBJECT`).
|
||||
* `fields` určuje, které sloupce se zobrazí a v jakém pořadí. Každé pole odkazuje na `fieldMetadataUniversalIdentifier`.
|
||||
* `fields` určuje, které sloupce se zobrazí a v jakém pořadí. Každé pole odkazuje na `fieldMetadataUniversalIdentifier`. Chcete-li odkazovat na automaticky vytvořené systémové pole, například `createdAt`, podívejte se na [Cílení na systémová pole](/l/cs/developers/extend/apps/data/system-fields).
|
||||
* Pro pokročilé konfigurace můžete také deklarovat `filters`, `filterGroups`, `sorts`, `groups` a `fieldGroups`.
|
||||
* `position` určuje pořadí, pokud pro stejný objekt existuje více zobrazení.
|
||||
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
---
|
||||
title: Systemfelder ansprechen
|
||||
description: Referenzieren Sie automatisch erstellte Systemfelder wie createdAt oder updatedAt aus Ansichten und anderen Entitäten mit getFieldUniversalIdentifier.
|
||||
icon: gears
|
||||
---
|
||||
|
||||
Jedes Objekt in Twenty wird mit einem Satz von **Systemfeldern** ausgeliefert, die Sie nie selbst deklarieren. Sie werden automatisch vom Server erstellt, wenn das Objekt bereitgestellt wird:
|
||||
|
||||
`id`, `createdAt`, `updatedAt`, `deletedAt`, `createdBy`, `updatedBy`, `position`, `searchVector`
|
||||
|
||||
Da Sie diese Felder nicht mit [`defineField()`](/l/de/developers/extend/apps/data/extending-objects) deklarieren, gibt es keine `universalIdentifier`-Konstante, die Sie importieren könnten. Wie referenzieren Sie also `createdAt` als Spalte in einer [Ansicht](/l/de/developers/extend/apps/layout/views)?
|
||||
|
||||
## Das Problem
|
||||
|
||||
Seit Twenty 2.19 wird die universelle Kennung eines Systemfelds **deterministisch abgeleitet** vom Server aus drei Eingaben: der universellen Kennung der Applikation, der universellen Kennung des Objekts und dem Feldnamen. Sich eine ID auszudenken und sie hart zu codieren, funktioniert nicht: Sie stimmt mit nichts auf dem Server überein, und die Synchronisierung lehnt die lose Referenz ab:
|
||||
|
||||
```
|
||||
Dev sync failed: viewField: INVALID_VIEW_DATA: Field metadata not found
|
||||
```
|
||||
|
||||
## Die Lösung
|
||||
|
||||
<Note>
|
||||
`getFieldUniversalIdentifier` ist ab `twenty-sdk` 2.21 verfügbar.
|
||||
</Note>
|
||||
|
||||
Verwenden Sie `getFieldUniversalIdentifier`, um genau denselben Wert aufzulösen, den der Server verwendet. Die Funktion nimmt die drei Eingaben entgegen und gibt die universelle Kennung des Feldes zurück:
|
||||
|
||||
```ts
|
||||
import { getFieldUniversalIdentifier } from 'twenty-sdk/define';
|
||||
|
||||
const createdAtFieldId = getFieldUniversalIdentifier({
|
||||
applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
|
||||
objectUniversalIdentifier: MY_OBJECT_UNIVERSAL_IDENTIFIER,
|
||||
name: 'createdAt',
|
||||
});
|
||||
```
|
||||
|
||||
* `applicationUniversalIdentifier` ist die Kennung Ihrer App, diejenige, die Sie an [`defineApplication()`](/l/de/developers/extend/apps/config/application) übergeben.
|
||||
* `objectUniversalIdentifier` ist die Kennung des Objekts, zu dem das Feld gehört.
|
||||
* `name` ist der Name des Systemfelds, einer der oben aufgeführten Werte.
|
||||
|
||||
## Beispiel: eine createdAt-Spalte in einer Ansicht
|
||||
|
||||
Der typische Anwendungsfall ist das Hinzufügen einer `createdAt`-Spalte zu einer Ansicht eines Ihrer benutzerdefinierten Objekte. Lösen Sie die Feld-ID auf und referenzieren Sie sie wie jeden anderen `fieldMetadataUniversalIdentifier`:
|
||||
|
||||
```ts 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,
|
||||
},
|
||||
],
|
||||
});
|
||||
```
|
||||
|
||||
Dieselbe aufgelöste ID funktioniert überall dort, wo ein `fieldMetadataUniversalIdentifier` erwartet wird: Ansichtsfelder, Filter, Sortierungen, Gruppierungen und Page-Layout-Widgets.
|
||||
|
||||
<Note>
|
||||
Lösen Sie die ID auf, statt sie hart zu codieren. Da der Server den Wert aus der Applikations-ID, der Objekt-ID und dem Feldnamen ableitet, hält ein Aufruf von
|
||||
`getFieldUniversalIdentifier` Ihre Referenz korrekt, selbst wenn sich diese
|
||||
Eingaben ändern, und verhindert Abweichungen, falls sich die Ableitung jemals weiterentwickelt.
|
||||
</Note>
|
||||
|
||||
## Standardobjekte von Twenty
|
||||
|
||||
Für ein **Standard**-Twenty-Objekt (Person, Company, Opportunity, …) müssen Sie nichts ableiten: Die Systemfeld-Kennungen sind vorab berechnete Konstanten, die Sie direkt importieren können.
|
||||
|
||||
```ts
|
||||
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
|
||||
```
|
||||
|
||||
Greifen Sie zu `getFieldUniversalIdentifier`, wenn es sich um ein Objekt handelt, das **Ihre App** mit [`defineObject()`](/l/de/developers/extend/apps/data/objects) definiert, für das es keine solche Konstante gibt.
|
||||
|
||||
<Note>
|
||||
`name` ist ein **Standard**-Feld, kein Systemfeld. Es behält seine eigene hart codierte
|
||||
universelle Kennung und wird nicht über
|
||||
`getFieldUniversalIdentifier` aufgelöst. Für Objekte, die Sie definieren, referenzieren Sie das
|
||||
`name`-Feld über die Kennung, die Sie ihm in `defineObject()` gegeben haben.
|
||||
</Note>
|
||||
@@ -34,7 +34,7 @@ export default defineView({
|
||||
|
||||
* `objectUniversalIdentifier` gibt an, auf welches Objekt diese Ansicht angewendet wird. Es kann sich um ein von Ihnen definiertes benutzerdefiniertes Objekt oder ein Standardobjekt von Twenty handeln.
|
||||
* `key: ViewKey.INDEX` markiert die Ansicht als die Hauptlistenansicht des Objekts (diejenige, die von einem `OBJECT`-Navigationselement geöffnet wird).
|
||||
* `fields` steuert, welche Spalten erscheinen und in welcher Reihenfolge. Jedes Feld referenziert einen `fieldMetadataUniversalIdentifier`.
|
||||
* `fields` steuert, welche Spalten erscheinen und in welcher Reihenfolge. Jedes Feld referenziert einen `fieldMetadataUniversalIdentifier`. Informationen zum Verweisen auf ein automatisch erstelltes Systemfeld wie `createdAt` finden Sie unter [Systemfelder ansteuern](/l/de/developers/extend/apps/data/system-fields).
|
||||
* Für erweiterte Konfigurationen können Sie außerdem `filters`, `filterGroups`, `sorts`, `groups` und `fieldGroups` deklarieren.
|
||||
* `position` steuert die Reihenfolge, wenn mehrere Ansichten für dasselbe Objekt existieren.
|
||||
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
---
|
||||
title: Apuntar a campos de sistema
|
||||
description: Haz referencia a los campos de sistema creados automáticamente, como createdAt o updatedAt, desde vistas y otras entidades con getFieldUniversalIdentifier.
|
||||
icon: gears
|
||||
---
|
||||
|
||||
Cada objeto en Twenty viene con un conjunto de **campos de sistema** que nunca declaras tú mismo. Los crea automáticamente el servidor cuando se aprovisiona el objeto:
|
||||
|
||||
`id`, `createdAt`, `updatedAt`, `deletedAt`, `createdBy`, `updatedBy`, `position`, `searchVector`
|
||||
|
||||
Como no declaras estos campos con [`defineField()`](/l/es/developers/extend/apps/data/extending-objects), no hay ninguna constante `universalIdentifier` que puedas importar. Entonces, ¿cómo haces referencia a `createdAt` como una columna en una [vista](/l/es/developers/extend/apps/layout/views)?
|
||||
|
||||
## Problema
|
||||
|
||||
Desde Twenty 2.19, el identificador universal de un campo de sistema se **deriva de forma determinista** en el servidor a partir de tres entradas: el identificador universal de la aplicación, el identificador universal del objeto y el nombre del campo. Inventar un id y ponerlo de forma fija en el código no funcionará: no coincide con nada en el servidor y la sincronización rechaza la referencia colgante:
|
||||
|
||||
```
|
||||
Dev sync failed: viewField: INVALID_VIEW_DATA: Field metadata not found
|
||||
```
|
||||
|
||||
## La solución
|
||||
|
||||
<Note>
|
||||
`getFieldUniversalIdentifier` está disponible a partir de `twenty-sdk` 2.21.
|
||||
</Note>
|
||||
|
||||
Usa `getFieldUniversalIdentifier` para resolver exactamente el mismo valor que utiliza el servidor. Toma las tres entradas y devuelve el identificador universal del campo:
|
||||
|
||||
```ts
|
||||
import { getFieldUniversalIdentifier } from 'twenty-sdk/define';
|
||||
|
||||
const createdAtFieldId = getFieldUniversalIdentifier({
|
||||
applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
|
||||
objectUniversalIdentifier: MY_OBJECT_UNIVERSAL_IDENTIFIER,
|
||||
name: 'createdAt',
|
||||
});
|
||||
```
|
||||
|
||||
* `applicationUniversalIdentifier` es el identificador de tu aplicación, el que pasas a [`defineApplication()`](/l/es/developers/extend/apps/config/application).
|
||||
* `objectUniversalIdentifier` es el identificador del objeto al que pertenece el campo.
|
||||
* `name` es el nombre del campo de sistema, uno de los valores enumerados arriba.
|
||||
|
||||
## Ejemplo: una columna createdAt en una vista
|
||||
|
||||
El caso típico es añadir una columna `createdAt` a una vista de uno de tus objetos personalizados. Resuelve el id del campo y haz referencia a él como a cualquier otro `fieldMetadataUniversalIdentifier`:
|
||||
|
||||
```ts 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,
|
||||
},
|
||||
],
|
||||
});
|
||||
```
|
||||
|
||||
El mismo id resuelto funciona en cualquier lugar donde se espere un `fieldMetadataUniversalIdentifier`: campos de vista, filtros, ordenaciones, agrupaciones y widgets de diseño de página.
|
||||
|
||||
<Note>
|
||||
Resuelve el id, no lo pongas de forma fija en el código. Como el servidor deriva el valor a partir
|
||||
del id de la aplicación, el id del objeto y el nombre del campo, llamar a
|
||||
`getFieldUniversalIdentifier` mantiene tu referencia correcta incluso si esas
|
||||
entradas cambian, y evita desviaciones si la derivación evoluciona en algún momento.
|
||||
</Note>
|
||||
|
||||
## Objetos estándar de Twenty
|
||||
|
||||
Para un objeto **estándar** de Twenty (Persona, Compañía, Oportunidad, …), no necesitas derivar nada: los identificadores de los campos de sistema son constantes precalculadas que puedes importar directamente.
|
||||
|
||||
```ts
|
||||
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
|
||||
```
|
||||
|
||||
Recurre a `getFieldUniversalIdentifier` cuando el objeto es uno que **tu aplicación** define con [`defineObject()`](/l/es/developers/extend/apps/data/objects), donde no existe tal constante.
|
||||
|
||||
<Note>
|
||||
`name` es un campo **predeterminado**, no un campo de sistema. Conserva su propio identificador universal fijo
|
||||
y no se resuelve mediante
|
||||
`getFieldUniversalIdentifier`. En los objetos que defines, haz referencia al campo
|
||||
`name` mediante el identificador que le diste en `defineObject()`.
|
||||
</Note>
|
||||
@@ -34,7 +34,7 @@ export default defineView({
|
||||
|
||||
* `objectUniversalIdentifier` especifica a qué objeto se aplica esta vista. Puede ser un objeto personalizado que hayas definido o un objeto estándar de Twenty.
|
||||
* `key: ViewKey.INDEX` marca la vista como la vista de lista principal del objeto (la que abre un elemento de navegación `OBJECT`).
|
||||
* `fields` controla qué columnas aparecen y en qué orden. Cada campo referencia un `fieldMetadataUniversalIdentifier`.
|
||||
* `fields` controla qué columnas aparecen y en qué orden. Cada campo referencia un `fieldMetadataUniversalIdentifier`. Para hacer referencia a un campo del sistema creado automáticamente, como `createdAt`, consulta [Referencia a campos del sistema](/l/es/developers/extend/apps/data/system-fields).
|
||||
* También puedes definir `filters`, `filterGroups`, `sorts`, `groups` y `fieldGroups` para configuraciones avanzadas.
|
||||
* `position` controla el orden cuando existen múltiples vistas para el mismo objeto.
|
||||
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
---
|
||||
title: Ciblage des champs système
|
||||
description: Faites référence aux champs système auto-créés comme createdAt ou updatedAt à partir des vues et d'autres entités avec getFieldUniversalIdentifier.
|
||||
icon: gears
|
||||
---
|
||||
|
||||
Chaque objet dans Twenty est livré avec un ensemble de **champs système** que vous ne déclarez jamais vous-même. Ils sont créés automatiquement par le serveur lorsque l'objet est provisionné :
|
||||
|
||||
`id`, `createdAt`, `updatedAt`, `deletedAt`, `createdBy`, `updatedBy`, `position`, `searchVector`
|
||||
|
||||
Comme vous ne déclarez pas ces champs avec [`defineField()`](/l/fr/developers/extend/apps/data/extending-objects), il n'existe pas de constante `universalIdentifier` que vous puissiez importer. Alors, comment référencer `createdAt` en tant que colonne dans une [vue](/l/fr/developers/extend/apps/layout/views) ?
|
||||
|
||||
## Le problème
|
||||
|
||||
Depuis Twenty 2.19, l'identifiant universel d'un champ système est **dérivé de manière déterministe** par le serveur à partir de trois entrées : l'identifiant universel de l'application, l'identifiant universel de l'objet et le nom du champ. Inventer un id et le coder en dur ne fonctionnera pas : il ne correspond à rien sur le serveur, et la synchronisation rejette la référence orpheline :
|
||||
|
||||
```
|
||||
Dev sync failed: viewField: INVALID_VIEW_DATA: Field metadata not found
|
||||
```
|
||||
|
||||
## La solution
|
||||
|
||||
<Note>
|
||||
`getFieldUniversalIdentifier` est disponible à partir de `twenty-sdk` 2.21.
|
||||
</Note>
|
||||
|
||||
Utilisez `getFieldUniversalIdentifier` pour résoudre exactement la même valeur que celle utilisée par le serveur. Elle prend les trois entrées et renvoie l'identifiant universel du champ :
|
||||
|
||||
```ts
|
||||
import { getFieldUniversalIdentifier } from 'twenty-sdk/define';
|
||||
|
||||
const createdAtFieldId = getFieldUniversalIdentifier({
|
||||
applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
|
||||
objectUniversalIdentifier: MY_OBJECT_UNIVERSAL_IDENTIFIER,
|
||||
name: 'createdAt',
|
||||
});
|
||||
```
|
||||
|
||||
* `applicationUniversalIdentifier` est l'identifiant de votre application, celui que vous transmettez à [`defineApplication()`](/l/fr/developers/extend/apps/config/application).
|
||||
* `objectUniversalIdentifier` est l'identifiant de l'objet auquel le champ appartient.
|
||||
* `name` est le nom du champ système, l'une des valeurs listées ci-dessus.
|
||||
|
||||
## Exemple : une colonne createdAt dans une vue
|
||||
|
||||
Le cas typique consiste à ajouter une colonne `createdAt` à une vue de l'un de vos objets personnalisés. Résolvez l'id du champ et référencez-le comme n'importe quel autre `fieldMetadataUniversalIdentifier` :
|
||||
|
||||
```ts 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,
|
||||
},
|
||||
],
|
||||
});
|
||||
```
|
||||
|
||||
Le même id résolu fonctionne partout où un `fieldMetadataUniversalIdentifier` est attendu : champs de vue, filtres, tris, regroupements et widgets de mise en page.
|
||||
|
||||
<Note>
|
||||
Résolvez l'id, ne le codez pas en dur. Parce que le serveur dérive la valeur à partir de
|
||||
l'id de l'application, de l'id de l'objet et du nom du champ, appeler
|
||||
`getFieldUniversalIdentifier` garde votre référence correcte même si ces
|
||||
entrées changent, et évite les divergences si la dérivation évolue un jour.
|
||||
</Note>
|
||||
|
||||
## Objets standard de Twenty
|
||||
|
||||
Pour un objet Twenty **standard** (Person, Company, Opportunity, …), vous n'avez rien à dériver : les identifiants des champs système sont des constantes pré-calculées que vous pouvez importer directement.
|
||||
|
||||
```ts
|
||||
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
|
||||
```
|
||||
|
||||
Utilisez `getFieldUniversalIdentifier` lorsque l'objet est l'un de ceux que **votre application** définit avec [`defineObject()`](/l/fr/developers/extend/apps/data/objects), et pour lesquels il n'existe pas une telle constante.
|
||||
|
||||
<Note>
|
||||
`name` est un champ **par défaut**, pas un champ système. Il conserve son propre identifiant universel codé en dur et n'est pas résolu via
|
||||
`getFieldUniversalIdentifier`. Sur les objets que vous définissez, référencez le champ
|
||||
`name` avec l'identifiant que vous lui avez donné dans `defineObject()`.
|
||||
</Note>
|
||||
@@ -34,7 +34,7 @@ export default defineView({
|
||||
|
||||
* `objectUniversalIdentifier` spécifie à quel objet cette vue s'applique. Il peut s’agir d’un objet personnalisé que vous avez défini ou d’un objet Twenty standard.
|
||||
* `key: ViewKey.INDEX` marque la vue comme la vue de liste principale de l’objet (celle qu’un élément de navigation `OBJECT` ouvre).
|
||||
* `fields` contrôle les colonnes affichées et leur ordre. Chaque champ référence un `fieldMetadataUniversalIdentifier`.
|
||||
* `fields` contrôle les colonnes affichées et leur ordre. Chaque champ référence un `fieldMetadataUniversalIdentifier`. Pour faire référence à un champ système créé automatiquement tel que `createdAt`, voir [Ciblage des champs système](/l/fr/developers/extend/apps/data/system-fields).
|
||||
* Vous pouvez également définir `filters`, `filterGroups`, `sorts`, `groups` et `fieldGroups` pour des configurations plus avancées.
|
||||
* `position` contrôle l’ordre lorsqu’il existe plusieurs vues pour le même objet.
|
||||
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
---
|
||||
title: Fare riferimento ai campi di sistema
|
||||
description: Fai riferimento ai campi di sistema creati automaticamente, come createdAt o updatedAt, nelle viste e in altre entità con getFieldUniversalIdentifier.
|
||||
icon: gears
|
||||
---
|
||||
|
||||
Ogni oggetto in Twenty viene distribuito con un insieme di **campi di sistema** che non dichiari mai esplicitamente. Vengono creati automaticamente dal server quando viene effettuato il provisioning dell'oggetto:
|
||||
|
||||
`id`, `createdAt`, `updatedAt`, `deletedAt`, `createdBy`, `updatedBy`, `position`, `searchVector`
|
||||
|
||||
Poiché non dichiari questi campi con [`defineField()`](/l/it/developers/extend/apps/data/extending-objects), non esiste alcuna costante `universalIdentifier` da importare. Quindi, come fai a fare riferimento a `createdAt` come colonna in una [vista](/l/it/developers/extend/apps/layout/views)?
|
||||
|
||||
## Il problema
|
||||
|
||||
A partire da Twenty 2.19, l'identificatore universale di un campo di sistema viene derivato in modo deterministico dal server sulla base di tre input: l'identificatore universale dell'applicazione, l'identificatore universale dell'oggetto e il nome del campo. Inventare un id e hardcodarlo non funziona: non corrisponde a nulla sul server e la sincronizzazione rifiuta il riferimento orfano:
|
||||
|
||||
```
|
||||
Dev sync failed: viewField: INVALID_VIEW_DATA: Field metadata not found
|
||||
```
|
||||
|
||||
## La soluzione
|
||||
|
||||
<Note>
|
||||
`getFieldUniversalIdentifier` è disponibile da `twenty-sdk` 2.21 in poi.
|
||||
</Note>
|
||||
|
||||
Usa `getFieldUniversalIdentifier` per ottenere esattamente lo stesso valore utilizzato dal server. Accetta i tre input e restituisce l'identificatore universale del campo:
|
||||
|
||||
```ts
|
||||
import { getFieldUniversalIdentifier } from 'twenty-sdk/define';
|
||||
|
||||
const createdAtFieldId = getFieldUniversalIdentifier({
|
||||
applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
|
||||
objectUniversalIdentifier: MY_OBJECT_UNIVERSAL_IDENTIFIER,
|
||||
name: 'createdAt',
|
||||
});
|
||||
```
|
||||
|
||||
* `applicationUniversalIdentifier` è l'identificatore della tua app, quello che passi a [`defineApplication()`](/l/it/developers/extend/apps/config/application).
|
||||
* `objectUniversalIdentifier` è l'identificatore dell'oggetto a cui il campo appartiene.
|
||||
* `name` è il nome del campo di sistema, uno dei valori elencati sopra.
|
||||
|
||||
## Esempio: una colonna createdAt in una vista
|
||||
|
||||
Il caso tipico è aggiungere una colonna `createdAt` a una vista di uno dei tuoi oggetti personalizzati. Risolvi l'id del campo e usalo come qualsiasi altro `fieldMetadataUniversalIdentifier`:
|
||||
|
||||
```ts 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,
|
||||
},
|
||||
],
|
||||
});
|
||||
```
|
||||
|
||||
Lo stesso id risolto funziona ovunque ci si aspetti un `fieldMetadataUniversalIdentifier`: campi di vista, filtri, ordinamenti, raggruppamenti e widget di layout di pagina.
|
||||
|
||||
<Note>
|
||||
Risolvi l'id, non hardcodarlo. Poiché il server deriva il valore
|
||||
dall'id dell'applicazione, dall'id dell'oggetto e dal nome del campo, chiamare
|
||||
`getFieldUniversalIdentifier` mantiene corretto il riferimento anche se questi
|
||||
input cambiano ed evita discrepanze se la modalità di derivazione dovesse mai evolvere.
|
||||
</Note>
|
||||
|
||||
## Oggetti standard di Twenty
|
||||
|
||||
Per un oggetto **standard** di Twenty (Person, Company, Opportunity, …), non hai bisogno di derivare nulla: gli identificatori dei campi di sistema sono costanti pre-calcolate che puoi importare direttamente.
|
||||
|
||||
```ts
|
||||
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
|
||||
```
|
||||
|
||||
Usa `getFieldUniversalIdentifier` quando l'oggetto è uno che **la tua app** definisce con [`defineObject()`](/l/it/developers/extend/apps/data/objects), per cui non esiste alcuna costante di questo tipo.
|
||||
|
||||
<Note>
|
||||
`name` è un campo **predefinito**, non un campo di sistema. Mantiene un proprio identificatore universale hardcoded e non viene risolto tramite
|
||||
`getFieldUniversalIdentifier`. Sugli oggetti che definisci tu, fai riferimento al campo
|
||||
`name` tramite l'identificatore che gli hai assegnato in `defineObject()`.
|
||||
</Note>
|
||||
@@ -34,7 +34,7 @@ export default defineView({
|
||||
|
||||
* `objectUniversalIdentifier` specifica a quale oggetto si applica questa vista. Può essere un oggetto personalizzato che hai definito o un oggetto Twenty standard.
|
||||
* `key: ViewKey.INDEX` contrassegna la vista come vista elenco principale dell'oggetto (quella che un elemento di navigazione `OBJECT` apre).
|
||||
* `fields` controlla quali colonne compaiono e in quale ordine. Ogni campo fa riferimento a un `fieldMetadataUniversalIdentifier`.
|
||||
* `fields` controlla quali colonne compaiono e in quale ordine. Ogni campo fa riferimento a un `fieldMetadataUniversalIdentifier`. Per fare riferimento a un campo di sistema creato automaticamente come `createdAt`, vedi [Targeting System Fields](/l/it/developers/extend/apps/data/system-fields).
|
||||
* Puoi anche definire `filters`, `filterGroups`, `sorts`, `groups` e `fieldGroups` per configurazioni più avanzate.
|
||||
* `position` controlla l'ordinamento quando esistono più viste per lo stesso oggetto.
|
||||
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
---
|
||||
title: システムフィールドのターゲット指定
|
||||
description: ビューやその他のエンティティから `createdAt` や `updatedAt` のような自動作成されるシステムフィールドを、`getFieldUniversalIdentifier` を使って参照します。
|
||||
icon: gears
|
||||
---
|
||||
|
||||
Twenty のすべてのオブジェクトには、あなたが自分で宣言する必要のない **システムフィールド** のセットがあらかじめ用意されています。 これらは、オブジェクトがプロビジョニングされるときにサーバーによって自動的に作成されます。
|
||||
|
||||
`id`, `createdAt`, `updatedAt`, `deletedAt`, `createdBy`, `updatedBy`, `position`, `searchVector`
|
||||
|
||||
[`defineField()`](/l/ja/developers/extend/apps/data/extending-objects) でこれらのフィールドを宣言しないため、インポートできる `universalIdentifier` 定数は存在しません。 では、[view](/l/ja/developers/extend/apps/layout/views) で `createdAt` をカラムとしてどのように参照すればよいのでしょうか。
|
||||
|
||||
## 問題
|
||||
|
||||
Twenty 2.19 以降、システムフィールドのユニバーサル識別子は、アプリケーションのユニバーサル識別子、オブジェクトのユニバーサル識別子、およびフィールド名という 3 つの入力からサーバーによって **決定的に導出** されます。 id を独自に作成してハードコードしても機能しません。サーバー上のどの値とも一致せず、同期時にそのぶら下がった参照は拒否されます。
|
||||
|
||||
```
|
||||
Dev sync failed: viewField: INVALID_VIEW_DATA: Field metadata not found
|
||||
```
|
||||
|
||||
## 解決策
|
||||
|
||||
<Note>
|
||||
`getFieldUniversalIdentifier` は `twenty-sdk` 2.21 以降で利用可能です。
|
||||
</Note>
|
||||
|
||||
`getFieldUniversalIdentifier` を使用して、サーバーが使用するものとまったく同じ値を解決します。 この関数は 3 つの入力を受け取り、フィールドのユニバーサル識別子を返します。
|
||||
|
||||
```ts
|
||||
import { getFieldUniversalIdentifier } from 'twenty-sdk/define';
|
||||
|
||||
const createdAtFieldId = getFieldUniversalIdentifier({
|
||||
applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
|
||||
objectUniversalIdentifier: MY_OBJECT_UNIVERSAL_IDENTIFIER,
|
||||
name: 'createdAt',
|
||||
});
|
||||
```
|
||||
|
||||
* `applicationUniversalIdentifier` はあなたのアプリの識別子であり、[`defineApplication()`](/l/ja/developers/extend/apps/config/application) に渡すものです。
|
||||
* `objectUniversalIdentifier` は、そのフィールドが属するオブジェクトの識別子です。
|
||||
* `name` はシステムフィールド名であり、上に挙げた値のいずれかです。
|
||||
|
||||
## 例: ビュー内の createdAt カラム
|
||||
|
||||
典型的なケースは、カスタムオブジェクトの 1 つのビューに `createdAt` カラムを追加することです。 フィールド id を解決し、他の `fieldMetadataUniversalIdentifier` と同様にそれを参照します。
|
||||
|
||||
```ts 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,
|
||||
},
|
||||
],
|
||||
});
|
||||
```
|
||||
|
||||
同じように解決された id は、`fieldMetadataUniversalIdentifier` が必要とされるあらゆる場所、すなわちビューのフィールド、フィルター、ソート、グループ、ページレイアウトウィジェットでそのまま使用できます。
|
||||
|
||||
<Note>
|
||||
id は解決して、ハードコードしないでください。 サーバーはその値をアプリケーション id、オブジェクト id、フィールド名から導出するため、`getFieldUniversalIdentifier` を呼び出すことで、それらの入力が変更された場合でも参照を正しい状態に保ち、導出方法が将来変わった場合のずれも防ぐことができます。
|
||||
</Note>
|
||||
|
||||
## 標準の Twenty オブジェクト
|
||||
|
||||
**標準** の Twenty オブジェクト(Person、Company、Opportunity など)の場合、何も導出する必要はありません。システムフィールドの識別子はあらかじめ計算された定数として用意されており、直接インポートできます。
|
||||
|
||||
```ts
|
||||
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
|
||||
```
|
||||
|
||||
[`defineObject()`](/l/ja/developers/extend/apps/data/objects) で **あなたのアプリ** が定義するオブジェクトのように、そのような定数が存在しない場合にこそ、`getFieldUniversalIdentifier` を使用してください。
|
||||
|
||||
<Note>
|
||||
`name` はシステムフィールドではなく、**デフォルト** フィールドです。 このフィールドは独自のハードコードされたユニバーサル識別子を持ち、`getFieldUniversalIdentifier` で解決されることはありません。 あなたが定義したオブジェクトでは、`name` フィールドは `defineObject()` で与えた識別子で参照してください。
|
||||
</Note>
|
||||
@@ -34,7 +34,7 @@ export default defineView({
|
||||
|
||||
* `objectUniversalIdentifier` は、このビューを適用するオブジェクトを指定します。 定義したカスタムオブジェクトでも、Twenty の標準オブジェクトでも可能です。
|
||||
* `key: ViewKey.INDEX` は、そのビューがオブジェクトのメイン一覧ビュー(`OBJECT` ナビゲーション項目を開いたときに表示されるビュー)であることを示します。
|
||||
* `fields` は、どの列をどの順序で表示するかを制御します。 各フィールドは `fieldMetadataUniversalIdentifier` を参照します。
|
||||
* `fields` は、どの列をどの順序で表示するかを制御します。 各フィールドは `fieldMetadataUniversalIdentifier` を参照します。 `createdAt` などの自動作成システムフィールドの参照方法については、[システムフィールドのターゲット指定](/l/ja/developers/extend/apps/data/system-fields)を参照してください。
|
||||
* さらに高度な構成のために、`filters`、`filterGroups`、`sorts`、`groups`、`fieldGroups` も定義できます。
|
||||
* 同じオブジェクトに複数のビューがある場合、`position` が表示順を制御します。
|
||||
|
||||
|
||||
@@ -0,0 +1,103 @@
|
||||
---
|
||||
title: 시스템 필드 대상 지정
|
||||
description: 뷰와 다른 엔티티에서 `getFieldUniversalIdentifier`를 사용하여 `createdAt` 또는 `updatedAt` 같은 자동 생성 시스템 필드를 참조하세요.
|
||||
icon: gears
|
||||
---
|
||||
|
||||
Twenty의 모든 객체에는 여러분이 직접 선언하지 않아도 되는 **시스템 필드** 세트가 함께 제공됩니다. 이 필드들은 객체가 프로비저닝될 때 서버에 의해 자동으로 생성됩니다:
|
||||
|
||||
`id`, `createdAt`, `updatedAt`, `deletedAt`, `createdBy`, `updatedBy`, `position`, `searchVector`
|
||||
|
||||
[`defineField()`](/l/ko/developers/extend/apps/data/extending-objects)로 이러한 필드를 선언하지 않기 때문에, 가져올 수 있는 `universalIdentifier` 상수가 없습니다. 그렇다면 [view](/l/ko/developers/extend/apps/layout/views)에서 `createdAt`을 컬럼으로 어떻게 참조할 수 있을까요?
|
||||
|
||||
## 문제
|
||||
|
||||
Twenty 2.19부터 시스템 필드의 유니버설 식별자는 애플리케이션 유니버설 식별자, 객체 유니버설 식별자, 필드 이름이라는 세 가지 입력값으로부터 서버에서 결정론적으로 도출됩니다. id를 임의로 만들고 하드코딩해도 동작하지 않습니다. 서버에서 어떤 것과도 일치하지 않으며, 동기화에서 이러한 끊어진 참조를 거부합니다:
|
||||
|
||||
```
|
||||
Dev sync failed: viewField: INVALID_VIEW_DATA: Field metadata not found
|
||||
```
|
||||
|
||||
## 해결책
|
||||
|
||||
<Note>
|
||||
`getFieldUniversalIdentifier`는 `twenty-sdk` 2.21부터 사용할 수 있습니다.
|
||||
</Note>
|
||||
|
||||
`getFieldUniversalIdentifier`를 사용해 서버가 사용하는 것과 정확히 동일한 값을 해석하세요. 이 함수는 세 가지 입력값을 받아 필드의 유니버설 식별자를 반환합니다:
|
||||
|
||||
```ts
|
||||
import { getFieldUniversalIdentifier } from 'twenty-sdk/define';
|
||||
|
||||
const createdAtFieldId = getFieldUniversalIdentifier({
|
||||
applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
|
||||
objectUniversalIdentifier: MY_OBJECT_UNIVERSAL_IDENTIFIER,
|
||||
name: 'createdAt',
|
||||
});
|
||||
```
|
||||
|
||||
* `applicationUniversalIdentifier`는 [`defineApplication()`](/l/ko/developers/extend/apps/config/application)에 전달하는, 앱의 식별자입니다.
|
||||
* `objectUniversalIdentifier`는 필드가 속한 객체의 식별자입니다.
|
||||
* `name`은 시스템 필드 이름이며, 위에 나열된 값들 중 하나입니다.
|
||||
|
||||
## 예시: 뷰의 createdAt 컬럼
|
||||
|
||||
일반적인 사용 사례는 커스텀 객체 중 하나의 뷰에 `createdAt` 컬럼을 추가하는 것입니다. 필드 id를 해석한 다음, 다른 `fieldMetadataUniversalIdentifier`와 동일한 방식으로 참조하세요:
|
||||
|
||||
```ts 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,
|
||||
},
|
||||
],
|
||||
});
|
||||
```
|
||||
|
||||
이렇게 해석된 동일한 id는 `fieldMetadataUniversalIdentifier`가 필요한 모든 곳에서 사용할 수 있습니다. 예를 들어 view 필드, 필터, 정렬, 그룹, 페이지 레이아웃 위젯 등입니다.
|
||||
|
||||
<Note>
|
||||
id를 해석해서 사용하고, 하드코딩하지 마세요. 서버는 애플리케이션 id, 객체 id, 필드 이름으로부터 값을 도출하기 때문에,
|
||||
`getFieldUniversalIdentifier`를 호출하면 이 입력값들이 변경되더라도 참조를 올바르게 유지할 수 있고, 도출 방식이 바뀌더라도 드리프트를 방지할 수 있습니다.
|
||||
</Note>
|
||||
|
||||
## 표준 Twenty 객체
|
||||
|
||||
**표준** Twenty 객체(Person, Company, Opportunity 등)의 경우 어떤 것도 도출할 필요가 없습니다. 시스템 필드 식별자는 미리 계산된 상수이므로 바로 import해서 사용할 수 있습니다.
|
||||
|
||||
```ts
|
||||
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
|
||||
```
|
||||
|
||||
[`defineObject()`](/l/ko/developers/extend/apps/data/objects)로 **앱에서 직접 정의한** 객체처럼, 그러한 상수가 존재하지 않는 경우에 `getFieldUniversalIdentifier`를 사용하세요.
|
||||
|
||||
<Note>
|
||||
`name`은 시스템 필드가 아니라 **기본(default)** 필드입니다. 이 필드는 자체 하드코딩된 유니버설 식별자를 유지하며,
|
||||
`getFieldUniversalIdentifier`를 통해 해석되지 않습니다. 여러분이 정의한 객체에서는 `defineObject()`에서 부여한 식별자를 사용해 `name` 필드를 참조하세요.
|
||||
</Note>
|
||||
@@ -34,7 +34,7 @@ export default defineView({
|
||||
|
||||
* `objectUniversalIdentifier`는 이 뷰가 적용되는 객체를 지정합니다. 이 객체는 사용자가 정의한 커스텀 객체일 수도 있고, 표준 Twenty 객체일 수도 있습니다.
|
||||
* `key: ViewKey.INDEX`는 뷰를 객체의 기본 목록 보기( `OBJECT` 내비게이션 항목이 여는 보기)로 표시합니다.
|
||||
* `fields`는 어떤 열을 어떤 순서로 표시할지를 제어합니다. 각 필드는 `fieldMetadataUniversalIdentifier`를 참조합니다.
|
||||
* `fields`는 어떤 열을 어떤 순서로 표시할지를 제어합니다. 각 필드는 `fieldMetadataUniversalIdentifier`를 참조합니다. 자동 생성된 시스템 필드(예: `createdAt`)를 참조하는 방법은 [시스템 필드 대상으로 지정하기](/l/ko/developers/extend/apps/data/system-fields)를 참조하세요.
|
||||
* 또한 더 고급 구성을 위해 `filters`, `filterGroups`, `sorts`, `groups`, `fieldGroups`를 선언할 수 있습니다.
|
||||
* `position`은 동일한 객체에 여러 뷰가 있을 때의 정렬 순서를 제어합니다.
|
||||
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
---
|
||||
title: Referenciando campos de sistema
|
||||
description: Referencie campos de sistema gerados automaticamente, como createdAt ou updatedAt, a partir de visualizações e de outras entidades com getFieldUniversalIdentifier.
|
||||
icon: gears
|
||||
---
|
||||
|
||||
Todo objeto no Twenty é fornecido com um conjunto de **campos de sistema** que você nunca declara manualmente. Eles são criados automaticamente pelo servidor quando o objeto é provisionado:
|
||||
|
||||
`id`, `createdAt`, `updatedAt`, `deletedAt`, `createdBy`, `updatedBy`, `position`, `searchVector`
|
||||
|
||||
Como você não declara esses campos com [`defineField()`](/l/pt/developers/extend/apps/data/extending-objects), não existe nenhuma constante `universalIdentifier` para você importar. Então, como você referencia `createdAt` como uma coluna em uma [visualização](/l/pt/developers/extend/apps/layout/views)?
|
||||
|
||||
## O Problema
|
||||
|
||||
Desde o Twenty 2.19, o identificador universal de um campo de sistema é **derivado deterministicamente** pelo servidor a partir de três entradas: o identificador universal do aplicativo, o identificador universal do objeto e o nome do campo. Inventar um id e deixá-lo hardcoded não funciona: ele não corresponde a nada no servidor, e a sincronização rejeita a referência pendente:
|
||||
|
||||
```
|
||||
Dev sync failed: viewField: INVALID_VIEW_DATA: Field metadata not found
|
||||
```
|
||||
|
||||
## A Solução
|
||||
|
||||
<Note>
|
||||
`getFieldUniversalIdentifier` está disponível a partir do `twenty-sdk` 2.21.
|
||||
</Note>
|
||||
|
||||
Use `getFieldUniversalIdentifier` para resolver exatamente o mesmo valor que o servidor usa. Ela recebe as três entradas e retorna o identificador universal do campo:
|
||||
|
||||
```ts
|
||||
import { getFieldUniversalIdentifier } from 'twenty-sdk/define';
|
||||
|
||||
const createdAtFieldId = getFieldUniversalIdentifier({
|
||||
applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
|
||||
objectUniversalIdentifier: MY_OBJECT_UNIVERSAL_IDENTIFIER,
|
||||
name: 'createdAt',
|
||||
});
|
||||
```
|
||||
|
||||
* `applicationUniversalIdentifier` é o identificador do seu app, aquele que você passa para [`defineApplication()`](/l/pt/developers/extend/apps/config/application).
|
||||
* `objectUniversalIdentifier` é o identificador do objeto ao qual o campo pertence.
|
||||
* `name` é o nome do campo de sistema, um dos valores listados acima.
|
||||
|
||||
## Exemplo: uma coluna createdAt em uma visualização
|
||||
|
||||
O caso típico é adicionar uma coluna `createdAt` a uma visualização de um dos seus objetos personalizados. Resolva o id do campo e referencie-o como qualquer outro `fieldMetadataUniversalIdentifier`:
|
||||
|
||||
```ts 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,
|
||||
},
|
||||
],
|
||||
});
|
||||
```
|
||||
|
||||
O mesmo id resolvido funciona em qualquer lugar onde se espera um `fieldMetadataUniversalIdentifier`: campos de visualização, filtros, ordenações, agrupamentos e widgets de layout de página.
|
||||
|
||||
<Note>
|
||||
Resolva o id, não o deixe hardcoded. Como o servidor deriva o valor a partir do
|
||||
id do aplicativo, do id do objeto e do nome do campo, chamar
|
||||
`getFieldUniversalIdentifier` mantém a sua referência correta mesmo que essas
|
||||
entradas mudem, e evita divergências se a derivação evoluir no futuro.
|
||||
</Note>
|
||||
|
||||
## Objetos Padrão do Twenty
|
||||
|
||||
Para um objeto **padrão** do Twenty (Person, Company, Opportunity, …), você não precisa derivar nada: os identificadores de campos de sistema são constantes pré-computadas que você pode importar diretamente.
|
||||
|
||||
```ts
|
||||
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
|
||||
```
|
||||
|
||||
Use `getFieldUniversalIdentifier` quando o objeto é um que **seu app** define com [`defineObject()`](/l/pt/developers/extend/apps/data/objects), em que não existe tal constante.
|
||||
|
||||
<Note>
|
||||
`name` é um campo **padrão**, não um campo de sistema. Ele mantém seu próprio identificador universal
|
||||
hardcoded e não é resolvido por meio de
|
||||
`getFieldUniversalIdentifier`. Em objetos que você define, referencie o campo
|
||||
`name` pelo identificador que você atribuiu a ele em `defineObject()`.
|
||||
</Note>
|
||||
@@ -34,7 +34,7 @@ export default defineView({
|
||||
|
||||
* `objectUniversalIdentifier` especifica a qual objeto esta visualização se aplica. Pode ser um objeto personalizado que você definiu ou um objeto padrão do Twenty.
|
||||
* `key: ViewKey.INDEX` marca a visualização como a visualização principal de lista do objeto (aquela que um item de navegação `OBJECT` abre).
|
||||
* `fields` controla quais colunas aparecem e em que ordem. Cada campo referencia um `fieldMetadataUniversalIdentifier`.
|
||||
* `fields` controla quais colunas aparecem e em que ordem. Cada campo referencia um `fieldMetadataUniversalIdentifier`. Para fazer referência a um campo de sistema criado automaticamente, como `createdAt`, consulte [Direcionamento de campos do sistema](/l/pt/developers/extend/apps/data/system-fields).
|
||||
* Você também pode declarar `filters`, `filterGroups`, `sorts`, `groups` e `fieldGroups` para configurações avançadas.
|
||||
* `position` controla a ordenação quando existem várias visualizações para o mesmo objeto.
|
||||
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
---
|
||||
title: Țintirea câmpurilor de sistem
|
||||
description: Folosind `getFieldUniversalIdentifier`, poți face referire la câmpuri de sistem create automat, precum `createdAt` sau `updatedAt`, din vizualizări și alte entități.
|
||||
icon: gears
|
||||
---
|
||||
|
||||
Fiecare obiect din Twenty este livrat cu un set de **câmpuri de sistem** pe care nu le declari tu însuți. Acestea sunt create automat de server atunci când obiectul este provizionat:
|
||||
|
||||
`id`, `createdAt`, `updatedAt`, `deletedAt`, `createdBy`, `updatedBy`, `position`, `searchVector`
|
||||
|
||||
Deoarece nu declari aceste câmpuri cu [`defineField()`](/l/ro/developers/extend/apps/data/extending-objects), nu există niciun `universalIdentifier` constant pe care să-l imporți. Deci cum faci referire la `createdAt` ca o coloană într-o [vizualizare](/l/ro/developers/extend/apps/layout/views)?
|
||||
|
||||
## Problema
|
||||
|
||||
Începând cu Twenty 2.19, identificatorul universal al unui câmp de sistem este **derivat deterministic** de server din trei intrări: identificatorul universal al aplicației, identificatorul universal al obiectului și numele câmpului. Inventarea unui id și hardcodarea lui nu va funcționa: acesta nu se potrivește cu nimic de pe server, iar sincronizarea respinge referința rămasă în aer:
|
||||
|
||||
```
|
||||
Dev sync failed: viewField: INVALID_VIEW_DATA: Field metadata not found
|
||||
```
|
||||
|
||||
## Soluția
|
||||
|
||||
<Note>
|
||||
`getFieldUniversalIdentifier` este disponibil începând cu `twenty-sdk` 2.21.
|
||||
</Note>
|
||||
|
||||
Folosește `getFieldUniversalIdentifier` pentru a obține exact aceeași valoare pe care o folosește serverul. Aceasta primește cele trei intrări și returnează identificatorul universal al câmpului:
|
||||
|
||||
```ts
|
||||
import { getFieldUniversalIdentifier } from 'twenty-sdk/define';
|
||||
|
||||
const createdAtFieldId = getFieldUniversalIdentifier({
|
||||
applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
|
||||
objectUniversalIdentifier: MY_OBJECT_UNIVERSAL_IDENTIFIER,
|
||||
name: 'createdAt',
|
||||
});
|
||||
```
|
||||
|
||||
* `applicationUniversalIdentifier` este identificatorul aplicației tale, cel pe care îl transmiți către [`defineApplication()`](/l/ro/developers/extend/apps/config/application).
|
||||
* `objectUniversalIdentifier` este identificatorul obiectului căruia îi aparține câmpul.
|
||||
* `name` este numele câmpului de sistem, una dintre valorile listate mai sus.
|
||||
|
||||
## Exemplu: o coloană createdAt într-o vizualizare
|
||||
|
||||
Cazul tipic este adăugarea unei coloane `createdAt` la o vizualizare a unuia dintre obiectele tale personalizate. Calculează id-ul câmpului și fă referire la el ca la orice alt `fieldMetadataUniversalIdentifier`:
|
||||
|
||||
```ts 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,
|
||||
},
|
||||
],
|
||||
});
|
||||
```
|
||||
|
||||
Același id calculat funcționează oriunde este așteptat un `fieldMetadataUniversalIdentifier`: câmpuri de vizualizare, filtre, sortări, grupări și widget-uri de tip page-layout.
|
||||
|
||||
<Note>
|
||||
Calculează id-ul, nu îl hardcoda. Deoarece serverul derivă valoarea din
|
||||
id-ul aplicației, id-ul obiectului și numele câmpului, apelarea
|
||||
`getFieldUniversalIdentifier` menține referința corectă chiar dacă aceste
|
||||
intrări se schimbă și evită divergența dacă metoda de derivare evoluează vreodată.
|
||||
</Note>
|
||||
|
||||
## Obiecte standard Twenty
|
||||
|
||||
Pentru un obiect Twenty **standard** (Person, Company, Opportunity, …), nu trebuie să derivezi nimic: identificatorii câmpurilor de sistem sunt constante pre-calculate pe care le poți importa direct.
|
||||
|
||||
```ts
|
||||
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
|
||||
```
|
||||
|
||||
Apelează la `getFieldUniversalIdentifier` atunci când obiectul este unul pe care **aplicația ta** îl definește cu [`defineObject()`](/l/ro/developers/extend/apps/data/objects), unde nu există o astfel de constantă.
|
||||
|
||||
<Note>
|
||||
`name` este un câmp **implicit**, nu un câmp de sistem. Acesta își păstrează propriul identificator universal
|
||||
hardcodat și nu este obținut prin
|
||||
`getFieldUniversalIdentifier`. În obiectele pe care le definești, fă referire la câmpul
|
||||
`name` prin identificatorul pe care i l-ai dat în `defineObject()`.
|
||||
</Note>
|
||||
@@ -34,7 +34,7 @@ export default defineView({
|
||||
|
||||
* `objectUniversalIdentifier` specifică la ce obiect se aplică această vizualizare. Poate fi un obiect personalizat pe care l-ați definit sau un obiect standard Twenty.
|
||||
* `key: ViewKey.INDEX` marchează vizualizarea ca vizualizarea principală de listă a obiectului (cea pe care o deschide un element de navigare `OBJECT`).
|
||||
* `fields` controlează ce coloane apar și ordinea acestora. Fiecare câmp face referire la un `fieldMetadataUniversalIdentifier`.
|
||||
* `fields` controlează ce coloane apar și ordinea acestora. Fiecare câmp face referire la un `fieldMetadataUniversalIdentifier`. Pentru a face referire la un câmp de sistem creat automat, cum ar fi `createdAt`, consultă [Țintirea câmpurilor de sistem](/l/ro/developers/extend/apps/data/system-fields).
|
||||
* Puteți declara, de asemenea, `filters`, `filterGroups`, `sorts`, `groups` și `fieldGroups` pentru configurații avansate.
|
||||
* `position` controlează ordonarea atunci când există mai multe vizualizări pentru același obiect.
|
||||
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
---
|
||||
title: Sistem Alanlarını Hedefleme
|
||||
description: "`createdAt` veya `updatedAt` gibi otomatik oluşturulan sistem alanlarına görünümlerden ve diğer varlıklardan `getFieldUniversalIdentifier` ile referans verin."
|
||||
icon: gears
|
||||
---
|
||||
|
||||
Twenty içindeki her nesne, kendiniz asla tanımlamadığınız bir dizi **sistem alanı** ile birlikte gelir. Bunlar, nesne sağlandığında sunucu tarafından otomatik olarak oluşturulur:
|
||||
|
||||
`id`, `createdAt`, `updatedAt`, `deletedAt`, `createdBy`, `updatedBy`, `position`, `searchVector`
|
||||
|
||||
Bu alanları [`defineField()`](/l/tr/developers/extend/apps/data/extending-objects) ile tanımlamadığınız için, içe aktarabileceğiniz bir `universalIdentifier` sabiti yoktur. Peki bir [görünümde](/l/tr/developers/extend/apps/layout/views) `createdAt` alanına sütun olarak nasıl referans verirsiniz?
|
||||
|
||||
## Sorun
|
||||
|
||||
Twenty 2.19'dan beri, bir sistem alanının evrensel tanımlayıcısı, sunucu tarafından üç girdiden **deterministik olarak türetilir**: uygulama evrensel tanımlayıcısı, nesne evrensel tanımlayıcısı ve alan adı. Rastgele bir id uydurup onu hardcode etmek işe yaramaz: sunucudaki hiçbir şeyle eşleşmez ve senkronizasyon, askıda kalan referansı reddeder:
|
||||
|
||||
```
|
||||
Dev sync failed: viewField: INVALID_VIEW_DATA: Field metadata not found
|
||||
```
|
||||
|
||||
## Çözüm
|
||||
|
||||
<Note>
|
||||
`getFieldUniversalIdentifier`, `twenty-sdk` 2.21 sürümünden itibaren kullanılabilir.
|
||||
</Note>
|
||||
|
||||
Sunucunun kullandığıyla tamamen aynı değeri elde etmek için `getFieldUniversalIdentifier` kullanın. Üç girdiyi alır ve alanın evrensel tanımlayıcısını döndürür:
|
||||
|
||||
```ts
|
||||
import { getFieldUniversalIdentifier } from 'twenty-sdk/define';
|
||||
|
||||
const createdAtFieldId = getFieldUniversalIdentifier({
|
||||
applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
|
||||
objectUniversalIdentifier: MY_OBJECT_UNIVERSAL_IDENTIFIER,
|
||||
name: 'createdAt',
|
||||
});
|
||||
```
|
||||
|
||||
* `applicationUniversalIdentifier`, uygulamanızın tanımlayıcısıdır; [`defineApplication()`](/l/tr/developers/extend/apps/config/application) çağrısına aktardığınız tanımlayıcı.
|
||||
* `objectUniversalIdentifier`, alanın ait olduğu nesnenin tanımlayıcısıdır.
|
||||
* `name`, sistem alan adıdır; yukarıda listelenen değerlerden biridir.
|
||||
|
||||
## Örnek: bir görünümde createdAt sütunu
|
||||
|
||||
Tipik durum, özel nesnelerinizden birinin görünümüne bir `createdAt` sütunu eklemektir. Alan id'sini çözümleyin ve ona, herhangi bir `fieldMetadataUniversalIdentifier` gibi referans verin:
|
||||
|
||||
```ts 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,
|
||||
},
|
||||
],
|
||||
});
|
||||
```
|
||||
|
||||
Aynı çözümlenen id, bir `fieldMetadataUniversalIdentifier` beklendiği her yerde çalışır: görünüm alanları, filtreler, sıralamalar, gruplar ve sayfa düzeni bileşenleri.
|
||||
|
||||
<Note>
|
||||
Id'yi çözümleyin, hardcode etmeyin. Sunucu değeri uygulama id'si, nesne id'si ve alan adından
|
||||
türettiği için, `getFieldUniversalIdentifier` çağrısı, bu girdiler değişse bile referansınızı doğru tutar ve türetme zaman içinde gelişirse sapmayı önler.
|
||||
</Note>
|
||||
|
||||
## Standart Twenty nesneleri
|
||||
|
||||
**Standart** bir Twenty nesnesi (Person, Company, Opportunity, …) için hiçbir şey türetmeniz gerekmez: sistem alanı tanımlayıcıları, doğrudan içe aktarabileceğiniz önceden hesaplanmış sabitlerdir.
|
||||
|
||||
```ts
|
||||
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
|
||||
```
|
||||
|
||||
[`defineObject()`](/l/tr/developers/extend/apps/data/objects) ile **uygulamanızın** tanımladığı, böyle bir sabitin olmadığı nesnelerde `getFieldUniversalIdentifier` yöntemine başvurun.
|
||||
|
||||
<Note>
|
||||
`name`, bir sistem alanı değil, bir **varsayılan** alandır. Kendi hardcode edilmiş
|
||||
evrensel tanımlayıcısını korur ve
|
||||
`getFieldUniversalIdentifier` ile çözülmez. Tanımladığınız nesnelerde, `name` alanına `defineObject()` içinde ona verdiğiniz tanımlayıcı ile referans verin.
|
||||
</Note>
|
||||
@@ -34,7 +34,7 @@ export default defineView({
|
||||
|
||||
* `objectUniversalIdentifier`, bu görünümün hangi nesneye uygulanacağını belirtir. Bu, tanımladığınız özel bir nesne veya standart bir Twenty nesnesi olabilir.
|
||||
* `key: ViewKey.INDEX` görünümü nesnenin ana liste görünümü olarak işaretler (bir `OBJECT` gezinme öğesinin açtığı görünüm).
|
||||
* `fields`, hangi sütunların görüneceğini ve hangi sırayla görüneceğini kontrol eder. Her alan bir `fieldMetadataUniversalIdentifier` öğesine referans verir.
|
||||
* `fields`, hangi sütunların görüneceğini ve hangi sırayla görüneceğini kontrol eder. Her alan bir `fieldMetadataUniversalIdentifier` öğesine referans verir. Otomatik oluşturulan `createdAt` gibi bir sistem alanına başvurmak için, bkz. [Sistem Alanlarını Hedefleme](/l/tr/developers/extend/apps/data/system-fields).
|
||||
* Daha gelişmiş yapılandırmalar için `filters`, `filterGroups`, `sorts`, `groups` ve `fieldGroups` da tanımlayabilirsiniz.
|
||||
* `position`, aynı nesne için birden fazla görünüm olduğunda sıralamayı kontrol eder.
|
||||
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
---
|
||||
title: 定位系统字段
|
||||
description: 在视图和其他实体中,使用 getFieldUniversalIdentifier 引用自动创建的系统字段,例如 createdAt 或 updatedAt。
|
||||
icon: gears
|
||||
---
|
||||
|
||||
Twenty 中的每个对象都带有一组你无需自行声明的**系统字段**。 这些字段在对象初始化时由服务器自动创建:
|
||||
|
||||
`id`, `createdAt`, `updatedAt`, `deletedAt`, `createdBy`, `updatedBy`, `position`, `searchVector`
|
||||
|
||||
由于你不会使用 [`defineField()`](/l/zh/developers/extend/apps/data/extending-objects) 来声明这些字段,因此也没有可供你导入的 `universalIdentifier` 常量。 那么,如何在[视图](/l/zh/developers/extend/apps/layout/views)中将 `createdAt` 作为一列来引用呢?
|
||||
|
||||
## 问题
|
||||
|
||||
从 Twenty 2.19 起,系统字段的通用标识符由服务器根据三个输入**确定性派生**:应用通用标识符、对象通用标识符以及字段名称。 自行构造一个 id 并将其硬编码是行不通的:它在服务器上不会匹配任何内容,同步时会拒绝这个悬空引用:
|
||||
|
||||
```
|
||||
Dev sync failed: viewField: INVALID_VIEW_DATA: Field metadata not found
|
||||
```
|
||||
|
||||
## 解决方案
|
||||
|
||||
<Note>
|
||||
`getFieldUniversalIdentifier` 从 `twenty-sdk` 2.21 版本开始可用。
|
||||
</Note>
|
||||
|
||||
使用 `getFieldUniversalIdentifier` 来解析与服务器使用的值完全相同的字段标识符。 它接收这三个输入,并返回字段的通用标识符:
|
||||
|
||||
```ts
|
||||
import { getFieldUniversalIdentifier } from 'twenty-sdk/define';
|
||||
|
||||
const createdAtFieldId = getFieldUniversalIdentifier({
|
||||
applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
|
||||
objectUniversalIdentifier: MY_OBJECT_UNIVERSAL_IDENTIFIER,
|
||||
name: 'createdAt',
|
||||
});
|
||||
```
|
||||
|
||||
* `applicationUniversalIdentifier` 是你的应用标识符,也就是你传递给 [`defineApplication()`](/l/zh/developers/extend/apps/config/application) 的那个。
|
||||
* `objectUniversalIdentifier` 是该字段所属对象的标识符。
|
||||
* `name` 是系统字段名称,为上面列出的值之一。
|
||||
|
||||
## 示例:视图中的 createdAt 列
|
||||
|
||||
典型场景是:为你某个自定义对象的视图添加一列 `createdAt`。 解析字段 id,并像引用其他 `fieldMetadataUniversalIdentifier` 一样引用它:
|
||||
|
||||
```ts 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,
|
||||
},
|
||||
],
|
||||
});
|
||||
```
|
||||
|
||||
同一个解析得到的 id 可在任何需要 `fieldMetadataUniversalIdentifier` 的地方使用:视图字段、筛选器、排序、分组以及页面布局挂件。
|
||||
|
||||
<Note>
|
||||
解析 id,而不是将其硬编码。 由于服务器是根据应用 id、对象 id 和字段名来派生该值的,调用
|
||||
`getFieldUniversalIdentifier` 能在这些输入发生变化时仍保持引用正确,并在派生逻辑演进时避免偏差。
|
||||
</Note>
|
||||
|
||||
## 标准 Twenty 对象
|
||||
|
||||
对于**标准** Twenty 对象(Person、Company、Opportunity 等),你不需要进行任何派生:系统字段标识符是预先计算好的常量,你可以直接导入。
|
||||
|
||||
```ts
|
||||
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
|
||||
```
|
||||
|
||||
当对象是由**你的应用**使用 [`defineObject()`](/l/zh/developers/extend/apps/data/objects) 定义、且不存在此类常量时,再使用 `getFieldUniversalIdentifier`。
|
||||
|
||||
<Note>
|
||||
`name` 是一个**默认**字段,而不是系统字段。 它保留自己的硬编码
|
||||
通用标识符,而不是通过
|
||||
`getFieldUniversalIdentifier` 解析。 在你定义的对象上,请使用你在 `defineObject()` 中赋予它的标识符来引用
|
||||
`name` 字段。
|
||||
</Note>
|
||||
@@ -34,7 +34,7 @@ export default defineView({
|
||||
|
||||
* `objectUniversalIdentifier` 指定此视图适用于哪个对象。 它可以是你定义的自定义对象,也可以是标准的 Twenty 对象。
|
||||
* `key: ViewKey.INDEX` 将该视图标记为对象的主列表视图(`OBJECT` 导航项打开的那个)。
|
||||
* `fields` 控制显示哪些列以及它们的顺序。 每个字段引用一个 `fieldMetadataUniversalIdentifier`。
|
||||
* `fields` 控制显示哪些列以及它们的顺序。 每个字段引用一个 `fieldMetadataUniversalIdentifier`。 若要引用自动创建的系统字段(例如 `createdAt`),请参阅[定位系统字段](/l/zh/developers/extend/apps/data/system-fields)。
|
||||
* 你还可以声明 `filters`、`filterGroups`、`sorts`、`groups` 和 `fieldGroups` 以进行更高级的配置。
|
||||
* 当同一对象存在多个视图时,`position` 控制其排序。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user