i18n - docs translations (#20083)
Created by Github action Co-authored-by: github-actions <github-actions@twenty.com>
This commit is contained in:
committed by
GitHub
parent
ec893c2767
commit
13aaea597e
@@ -94,15 +94,16 @@ const handler = async (event: RoutePayload) => {
|
||||
|
||||
يحتوي نوع `RoutePayload` على البنية التالية:
|
||||
|
||||
| الخاصية | النوع | الوصف | مثال |
|
||||
| ---------------------------- | ------------------------------------------------------- | ------------------------------------------------------------ | -------------------------------------------------------------------------- |
|
||||
| `headers` | `Record\<string, string \| undefined>` | رؤوس HTTP (فقط تلك المدرجة في `forwardedRequestHeaders`) | انظر القسم أدناه |
|
||||
| `queryStringParameters` | `Record\<string, string \| undefined>` | معلمات سلسلة الاستعلام (تُضمّ القيم المتعددة باستخدام فواصل) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
|
||||
| `pathParameters` | `Record\<string, string \| undefined>` | معلمات المسار المستخرجة من نمط المسار | `/users/:id`, `/users/123` -> `{ id: '123' }` |
|
||||
| `body` | `object \| null` | جسم الطلب المُحلَّل (JSON) | `{ id: 1 }` -> `{ id: 1 }` |
|
||||
| `isBase64Encoded` | `boolean` | ما إذا كان جسم الطلب مُرمَّزًا بترميز base64 | |
|
||||
| `requestContext.http.method` | `string` | طريقة HTTP (GET, POST, PUT, PATCH, DELETE) | |
|
||||
| `requestContext.http.path` | `string` | المسار الخام للطلب | |
|
||||
| الخاصية | النوع | الوصف | مثال |
|
||||
| ---------------------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
|
||||
| `headers` | `Record\<string, string \| undefined>` | رؤوس HTTP (فقط تلك المدرجة في `forwardedRequestHeaders`) | انظر القسم أدناه |
|
||||
| `queryStringParameters` | `Record\<string, string \| undefined>` | معلمات سلسلة الاستعلام (تُضمّ القيم المتعددة باستخدام فواصل) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
|
||||
| `pathParameters` | `Record\<string, string \| undefined>` | معلمات المسار المستخرجة من نمط المسار | `/users/:id`, `/users/123` -> `{ id: '123' }` |
|
||||
| `body` | `object \| null` | جسم الطلب المُحلَّل (JSON) | `{ id: 1 }` -> `{ id: 1 }` |
|
||||
| `rawBody` | `string \| undefined` | Original UTF-8 request body, before JSON parsing. Useful for verifying HMAC-style webhook signatures (e.g. GitHub's `X-Hub-Signature-256`, Stripe). `undefined` when the runtime did not preserve it. | |
|
||||
| `isBase64Encoded` | `boolean` | ما إذا كان جسم الطلب مُرمَّزًا بترميز base64 | |
|
||||
| `requestContext.http.method` | `string` | طريقة HTTP (GET, POST, PUT, PATCH, DELETE) | |
|
||||
| `requestContext.http.path` | `string` | المسار الخام للطلب | |
|
||||
|
||||
|
||||
#### forwardedRequestHeaders
|
||||
|
||||
@@ -19,7 +19,7 @@ description: تعرّف على خطط تسعير Twenty وكيفية التبد
|
||||
* دعم قياسي
|
||||
|
||||
<Note>
|
||||
الميزات المتميزة (SSO وأذونات على مستوى الصف) غير مشمولة في خطة Pro.
|
||||
Premium features (SSO, row-level permissions and AI usage data) are not included in the Pro plan.
|
||||
</Note>
|
||||
|
||||
### المؤسسة (سحابي)
|
||||
@@ -27,7 +27,7 @@ description: تعرّف على خطط تسعير Twenty وكيفية التبد
|
||||
للفرق الأكبر ذات الاحتياجات المتقدّمة:
|
||||
|
||||
* كل ما في Pro
|
||||
* **ميزات متميزة**: تكامل SSO وأذونات على مستوى الصف
|
||||
* **Premium features**: SSO integration, row-level permissions and AI usage data
|
||||
* دعم متميز
|
||||
|
||||
## خطط الاستضافة الذاتية
|
||||
@@ -45,7 +45,7 @@ description: تعرّف على خطط تسعير Twenty وكيفية التبد
|
||||
للفرق التي تحتاج إلى ميزات متميزة أثناء الاستضافة الذاتية:
|
||||
|
||||
* جميع ميزات Pro
|
||||
* **ميزات متميزة**: تكامل SSO وأذونات على مستوى الصف
|
||||
* **Premium features**: SSO integration, row-level permissions and AI usage data
|
||||
* دعم فريق Twenty
|
||||
* لا يُشترط نشر الشيفرة المخصّصة كمفتوح المصدر قبل التوزيع
|
||||
|
||||
@@ -55,6 +55,7 @@ description: تعرّف على خطط تسعير Twenty وكيفية التبد
|
||||
|
||||
* **تكامل SSO**: تسجيل دخول أحادي مع موفّر الهوية لديك
|
||||
* **أذونات على مستوى الصف**: تحكّم دقيق في الوصول على مستوى السجل
|
||||
* **AI usage data**: Track AI consumption across the workspace
|
||||
|
||||
## التبديل بين الخطط
|
||||
|
||||
@@ -77,3 +78,15 @@ description: تعرّف على خطط تسعير Twenty وكيفية التبد
|
||||
### التبديل إلى الفوترة الشهرية
|
||||
|
||||
تواصل مع الدعم للعودة إلى الفوترة الشهرية.
|
||||
|
||||
## Obtain an Enterprise Key for Organization (Self-Hosted)
|
||||
|
||||
To use the Organization (Self-Hosted) plan, you need to obtain an Enterprise key:
|
||||
|
||||
1. Go to **Settings → Admin Panel → Enterprise**
|
||||
|
||||
<img src="/images/user-guide/billing/enterprise-key.png" alt="Enterprise key" />
|
||||
|
||||
2. Click **Get Enterprise Key**
|
||||
3. When you are redirected to Stripe, enter your payment details and confirm
|
||||
4. When your Enterprise key is displayed, paste it into the Enterprise settings page and activate the Organization license
|
||||
|
||||
@@ -16,6 +16,11 @@ description: الأسئلة الشائعة حول تسعير Twenty والفوت
|
||||
لا تتوفر الميزات المتميزة إلا في خطط Organization (السحابة أو الاستضافة الذاتية):
|
||||
* **تكامل SSO**: تسجيل الدخول الأحادي مع موفر الهوية لديك
|
||||
* **أذونات على مستوى السجل**: تحكم دقيق في الوصول على مستوى السجل
|
||||
* **AI usage data**: Track AI consumption across the workspace
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Is Organization plan on cloud and Organization plan on self-hosted the same?">
|
||||
They offer the same premium features. However, a cloud subscription cannot be used for self-hosted deployments. Self-hosted requires an Enterprise key.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="هل تقدمون مقاعد مجانية للمستخدمين العارضين فقط؟">
|
||||
|
||||
+34
-39
@@ -53,38 +53,45 @@ People ←→ Project Assignments ←→ Projects
|
||||
1. اذهب إلى **الإعدادات → نموذج البيانات**
|
||||
2. انقر **+ كائن جديد**
|
||||
3. سمِّه تسمية وصفية (مثلًا: "تعيين مشروع"، "عضو فريق"، "طلب منتج")
|
||||
4. انقر على **حفظ**
|
||||
4. Toggle "Skip creating a Name field" on
|
||||
|
||||
<img src="/images/user-guide/fields/new-pivot-object.png" alt="New pivot object" />
|
||||
|
||||
5. انقر على **حفظ**
|
||||
|
||||
<Tip>
|
||||
**اتفاقية التسمية**: استخدم اسمًا يصف العلاقة، مثل "تعيين مشروع" أو "عضوية الفريق". هذا يجعل نموذج البيانات أسهل في الفهم.
|
||||
</Tip>
|
||||
|
||||
## الخطوة 2: إنشاء علاقات من كائن الربط
|
||||
## Step 2: Create Relations Between Objects and the Junction
|
||||
|
||||
أضِف حقول علاقة من كائن الربط إلى كلا الكائنين اللذين تريد ربطهما.
|
||||
Add relation fields from each of your two objects to the junction object.
|
||||
|
||||
### العلاقة الأولى (كائن الربط → الكائن A)
|
||||
### First Relation (Object A → Junction)
|
||||
|
||||
1. حدِّد كائن الربط في **الإعدادات → نموذج البيانات**
|
||||
2. انقر **+ إضافة حقل**
|
||||
3. اختر **العلاقة** كنوع الحقل
|
||||
4. اختر الكائن الأول (مثلًا، "الأشخاص")
|
||||
5. عيِّن نوع العلاقة إلى **متعدد-إلى-واحد** (يمكن لعديد من التعيينات الارتباط بشخص واحد)
|
||||
6. قم بتسمية الحقول:
|
||||
* الحقل على كائن الربط: مثلًا، "شخص"
|
||||
* الحقل على الأشخاص: مثلًا، "تعيينات المشروع"
|
||||
7. انقر على **حفظ**
|
||||
|
||||
### العلاقة الثانية (كائن الربط → الكائن B)
|
||||
|
||||
1. وأنت ما زلت في كائن الربط، انقر **+ إضافة حقل**
|
||||
2. اختر **العلاقة** كنوع الحقل
|
||||
3. اختر الكائن الثاني (مثلًا، "المشاريع")
|
||||
4. عيِّن نوع العلاقة إلى **متعدد-إلى-واحد**
|
||||
1. Select your first object in **Settings → Data Model**
|
||||
2. Click **+ Add Relation**
|
||||
3. Select the junction object (e.g., "Project Assignments")
|
||||
4. Set the relation type to **One-To-Many** (one person can link to many assignments)
|
||||
5. قم بتسمية الحقول:
|
||||
* الحقل على الأشخاص: مثلًا، "تعيينات المشروع"
|
||||
* الحقل على كائن الربط: مثلًا، "شخص"
|
||||
6. انقر على **حفظ**
|
||||
|
||||
### Second Relation (Object B → Junction)
|
||||
|
||||
1. Select your second object in **Settings → Data Model**
|
||||
2. Click **+ Add Relation**
|
||||
3. Select the junction object (e.g., "Project Assignments")
|
||||
4. Set the relation type to **One-To-Many** (one project can link to many assignments)
|
||||
5. فعّل **"هذه علاقة بكائن ربط"**
|
||||
|
||||
<img src="/images/user-guide/fields/junction-relation-toggle.png" style={{width:'100%'}} />
|
||||
|
||||
6. قم بتسمية الحقول:
|
||||
* الحقل على كائن الربط: مثلًا، "مشروع"
|
||||
* الحقل على المشاريع: مثلًا، "أعضاء الفريق"
|
||||
6. انقر على **حفظ**
|
||||
7. انقر على **حفظ**
|
||||
|
||||
## الخطوة 3: ضبط عرض علاقة الربط
|
||||
|
||||
@@ -98,18 +105,6 @@ People ←→ Project Assignments ←→ Projects
|
||||
6. حدِّد **العلاقة الهدف** (مثلًا، "مشروع" — الحقل على كائن الربط الذي يشير إلى الجانب الآخر)
|
||||
7. انقر على **حفظ**
|
||||
|
||||
{/* TODO: Add image
|
||||
<img src="/images/user-guide/fields/junction-relation-toggle.png" style={{width:'100%'}}/>
|
||||
*/}
|
||||
|
||||
كرِّر على الكائن الآخر:
|
||||
|
||||
1. اختر "المشاريع" في نموذج البيانات
|
||||
2. حرِّر حقل العلاقة "أعضاء الفريق"
|
||||
3. فعّل مفتاح الربط
|
||||
4. حدِّد "شخص" كالعلاقة الهدف
|
||||
5. حفظ
|
||||
|
||||
## النتيجة
|
||||
|
||||
بعد التكوين:
|
||||
@@ -130,15 +125,15 @@ People ←→ Project Assignments ←→ Projects
|
||||
|
||||
### إضافة علاقات
|
||||
|
||||
1. **تعيين مشروع → الأشخاص**
|
||||
* النوع: متعدد-إلى-واحد
|
||||
* الحقل على التعيين: "شخص"
|
||||
1. **People → Project Assignment**
|
||||
* Type: One-to-Many
|
||||
* الحقل على الأشخاص: "تعيينات المشروع"
|
||||
* الحقل على التعيين: "شخص"
|
||||
|
||||
2. **تعيين مشروع → المشاريع**
|
||||
* النوع: متعدد-إلى-واحد
|
||||
* الحقل على التعيين: "مشروع"
|
||||
2. **Projects → Project Assignment**
|
||||
* Type: One-to-Many
|
||||
* الحقل على المشاريع: "أعضاء الفريق"
|
||||
* الحقل على التعيين: "مشروع"
|
||||
|
||||
### ضبط عرض علاقة الربط
|
||||
|
||||
|
||||
@@ -30,3 +30,9 @@ description: خصص الشريط الجانبي الأيسر ليتوافق مع
|
||||
## قائمة الأوامر
|
||||
|
||||
اضغط `Cmd+K` (أو `Ctrl+K`) لفتح قائمة الأوامر — شريط بحث للوصول السريع يتيح لك الانتقال إلى أي سجل أو طريقة عرض أو إجراء دون التنقل عبر الشريط الجانبي.
|
||||
|
||||
## تخصيص الشريط الجانبي
|
||||
|
||||
لتخصيص الشريط الجانبي، مرّر المؤشر فوق قسم "مساحة العمل" في الشريط الجانبي وانقر على أيقونة مفتاح الربط.
|
||||
|
||||
<img src="/images/user-guide/layout/navigation-edit-icon.png" alt="Navigation edit icon" />
|
||||
|
||||
@@ -3,6 +3,8 @@ title: صفحات السجل
|
||||
description: خصص تخطيط صفحات تفاصيل السجلات باستخدام علامات تبويب وأدوات.
|
||||
---
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
عند فتح سجل في Twenty، تتكون صفحة التفاصيل من **علامات تبويب** و**أدوات**. كلاهما قابل للتخصيص بالكامل حسب نوع الكائن.
|
||||
|
||||
## علامات التبويب
|
||||
@@ -38,12 +40,20 @@ description: خصص تخطيط صفحات تفاصيل السجلات باستخ
|
||||
|
||||
1. افتح أي سجل
|
||||
2. اضغط على `Cmd+K` وابحث عن "تحرير تخطيط صفحة السجل"
|
||||
|
||||
أو
|
||||
|
||||
1. انتقل إلى الإعدادات > نموذج البيانات > الكائن الذي تختاره > التخطيط
|
||||
|
||||
2. انقر على الزر "تخصيص صفحة السجل" لذلك الكائن
|
||||
|
||||
3. أنت الآن في وضع التخصيص:
|
||||
* **أضف أدوات** من منتقي الأدوات
|
||||
* **اسحب الأدوات** لإعادة وضعها على الشبكة
|
||||
* **غيّر حجم الأدوات** بسحب حوافها
|
||||
* **اضبط الحقول** المعروضة داخل كل أداة
|
||||
* **أدِر علامات التبويب** — أضف، أزل، أعد التسمية، وأعد الترتيب
|
||||
|
||||
4. احفظ تغييراتك — سيتم تطبيقها على جميع السجلات لذلك النوع من الكائنات
|
||||
|
||||
## ظهور الحقول
|
||||
|
||||
@@ -95,15 +95,16 @@ const handler = async (event: RoutePayload) => {
|
||||
|
||||
Typ `RoutePayload` má následující strukturu:
|
||||
|
||||
| Vlastnost | Typ | Popis | Příklad |
|
||||
| ---------------------------- | ------------------------------------------------------- | ----------------------------------------------------------- | -------------------------------------------------------------------------- |
|
||||
| `headers` | `Record\<string, string \| undefined>` | Záhlaví HTTP (pouze ta uvedená v `forwardedRequestHeaders`) | viz sekci níže |
|
||||
| `queryStringParameters` | `Record\<string, string \| undefined>` | Parametry query stringu (více hodnot spojených čárkami) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
|
||||
| `pathParameters` | `Record\<string, string \| undefined>` | Parametry cesty extrahované ze vzoru trasy | `/users/:id`, `/users/123` -> `{ id: '123' }` |
|
||||
| `body` | `object \| null` | Parsované tělo požadavku (JSON) | `{ id: 1 }` -> `{ id: 1 }` |
|
||||
| `isBase64Encoded` | `boolean` | Zda je tělo kódováno base64 | |
|
||||
| `requestContext.http.method` | `string` | Metoda HTTP (GET, POST, PUT, PATCH, DELETE) | |
|
||||
| `requestContext.http.path` | `string` | Nezpracovaná cesta požadavku | |
|
||||
| Vlastnost | Typ | Popis | Příklad |
|
||||
| ---------------------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
|
||||
| `headers` | `Record\<string, string \| undefined>` | Záhlaví HTTP (pouze ta uvedená v `forwardedRequestHeaders`) | viz sekci níže |
|
||||
| `queryStringParameters` | `Record\<string, string \| undefined>` | Parametry query stringu (více hodnot spojených čárkami) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
|
||||
| `pathParameters` | `Record\<string, string \| undefined>` | Parametry cesty extrahované ze vzoru trasy | `/users/:id`, `/users/123` -> `{ id: '123' }` |
|
||||
| `body` | `object \| null` | Parsované tělo požadavku (JSON) | `{ id: 1 }` -> `{ id: 1 }` |
|
||||
| `rawBody` | `string \| undefined` | Original UTF-8 request body, before JSON parsing. Useful for verifying HMAC-style webhook signatures (e.g. GitHub's `X-Hub-Signature-256`, Stripe). `undefined` when the runtime did not preserve it. | |
|
||||
| `isBase64Encoded` | `boolean` | Zda je tělo kódováno base64 | |
|
||||
| `requestContext.http.method` | `string` | Metoda HTTP (GET, POST, PUT, PATCH, DELETE) | |
|
||||
| `requestContext.http.path` | `string` | Nezpracovaná cesta požadavku | |
|
||||
|
||||
|
||||
#### forwardedRequestHeaders
|
||||
|
||||
@@ -19,7 +19,7 @@ Pro týmy připravené škálovat:
|
||||
* Standardní podpora
|
||||
|
||||
<Note>
|
||||
Prémiové funkce (SSO a oprávnění na úrovni řádků) nejsou součástí plánu Pro.
|
||||
Premium features (SSO, row-level permissions and AI usage data) are not included in the Pro plan.
|
||||
</Note>
|
||||
|
||||
### Organizace (Cloud)
|
||||
@@ -27,7 +27,7 @@ Prémiové funkce (SSO a oprávnění na úrovni řádků) nejsou součástí pl
|
||||
Pro větší týmy s pokročilými potřebami:
|
||||
|
||||
* Vše z plánu Pro
|
||||
* **Prémiové funkce**: integrace SSO a oprávnění na úrovni řádků
|
||||
* **Premium features**: SSO integration, row-level permissions and AI usage data
|
||||
* Prioritní podpora
|
||||
|
||||
## Plány pro self‑hosting
|
||||
@@ -45,7 +45,7 @@ Hostujte Twenty na vlastní infrastruktuře bez poplatků:
|
||||
Pro týmy, které při self‑hostingu potřebují prémiové funkce:
|
||||
|
||||
* Všechny funkce plánu Pro
|
||||
* **Prémiové funkce**: integrace SSO a oprávnění na úrovni řádků
|
||||
* **Premium features**: SSO integration, row-level permissions and AI usage data
|
||||
* Podpora týmu Twenty
|
||||
* Není vyžadováno zveřejnit vlastní kód jako open‑source před distribucí
|
||||
|
||||
@@ -55,6 +55,7 @@ Prémiové funkce jsou dostupné pouze v plánech Organizace (Cloud nebo self‑
|
||||
|
||||
* **Integrace SSO**: jednotné přihlášení s vaším poskytovatelem identity
|
||||
* **Oprávnění na úrovni řádků**: jemně odstupňované řízení přístupu na úrovni záznamu
|
||||
* **AI usage data**: Track AI consumption across the workspace
|
||||
|
||||
## Přepínání plánů
|
||||
|
||||
@@ -77,3 +78,15 @@ Chcete-li přejít na nižší plán, kontaktujte podporu.
|
||||
### Přepnout na měsíční fakturaci
|
||||
|
||||
Chcete-li přepnout zpět na měsíční fakturaci, kontaktujte podporu.
|
||||
|
||||
## Obtain an Enterprise Key for Organization (Self-Hosted)
|
||||
|
||||
To use the Organization (Self-Hosted) plan, you need to obtain an Enterprise key:
|
||||
|
||||
1. Go to **Settings → Admin Panel → Enterprise**
|
||||
|
||||
<img src="/images/user-guide/billing/enterprise-key.png" alt="Enterprise key" />
|
||||
|
||||
2. Click **Get Enterprise Key**
|
||||
3. When you are redirected to Stripe, enter your payment details and confirm
|
||||
4. When your Enterprise key is displayed, paste it into the Enterprise settings page and activate the Organization license
|
||||
|
||||
@@ -16,6 +16,11 @@ Pokud chcete hostovat sami a potřebujete prémiové funkce (SSO a oprávnění
|
||||
Prémiové funkce jsou dostupné pouze v plánech Organization (Cloud nebo Self-Hosted):
|
||||
* **Integrace SSO**: Jednotné přihlášení s vaším poskytovatelem identity
|
||||
* **Oprávnění na úrovni řádků**: Jemně granulované řízení přístupu na úrovni záznamu
|
||||
* **AI usage data**: Track AI consumption across the workspace
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Is Organization plan on cloud and Organization plan on self-hosted the same?">
|
||||
They offer the same premium features. However, a cloud subscription cannot be used for self-hosted deployments. Self-hosted requires an Enterprise key.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Nabízíte volná místa pro uživatele pouze s přístupem ke čtení?">
|
||||
|
||||
+34
-39
@@ -53,38 +53,45 @@ Nejprve vytvořte mezilehlý objekt, který bude uchovávat propojení.
|
||||
1. Přejděte do **Nastavení → Datový model**
|
||||
2. Klikněte na **+ New object**
|
||||
3. Pojmenujte jej výstižně (např. "Project Assignment", "Team Member", "Product Order")
|
||||
4. Klikněte na **Uložit**
|
||||
4. Toggle "Skip creating a Name field" on
|
||||
|
||||
<img src="/images/user-guide/fields/new-pivot-object.png" alt="New pivot object" />
|
||||
|
||||
5. Klikněte na **Uložit**
|
||||
|
||||
<Tip>
|
||||
**Konvence pojmenování**: Použijte název, který popisuje vztah, například "Project Assignment" nebo "Team Membership". Tím bude datový model srozumitelnější.
|
||||
</Tip>
|
||||
|
||||
## Krok 2: Vytvořte vztahy ze spojovacího objektu
|
||||
## Step 2: Create Relations Between Objects and the Junction
|
||||
|
||||
Přidejte relační pole ze spojovacího objektu do obou objektů, které chcete propojit.
|
||||
Add relation fields from each of your two objects to the junction object.
|
||||
|
||||
### První vztah (Junction → Objekt A)
|
||||
### First Relation (Object A → Junction)
|
||||
|
||||
1. Vyberte svůj spojovací objekt v **Settings → Data Model**
|
||||
2. Klikněte na **+ Add Field**
|
||||
3. Zvolte **Relation** jako typ pole
|
||||
4. Vyberte první objekt (např. "People")
|
||||
5. Nastavte typ vztahu na **Many-to-One** (mnoho přiřazení může odkazovat na jednu osobu)
|
||||
6. Pojmenujte pole:
|
||||
* Pole na spojovacím objektu: např. "Person"
|
||||
* Pole na People: např. "Project Assignments"
|
||||
7. Klikněte na **Uložit**
|
||||
|
||||
### Druhý vztah (Junction → Objekt B)
|
||||
|
||||
1. Stále na spojovacím objektu klikněte na **+ Add Field**
|
||||
2. Zvolte **Relation** jako typ pole
|
||||
3. Vyberte druhý objekt (např. "Projects")
|
||||
4. Nastavte typ vztahu na **Many-to-One**
|
||||
1. Select your first object in **Settings → Data Model**
|
||||
2. Click **+ Add Relation**
|
||||
3. Select the junction object (e.g., "Project Assignments")
|
||||
4. Set the relation type to **One-To-Many** (one person can link to many assignments)
|
||||
5. Pojmenujte pole:
|
||||
* Pole na People: např. "Project Assignments"
|
||||
* Pole na spojovacím objektu: např. "Person"
|
||||
6. Klikněte na **Uložit**
|
||||
|
||||
### Second Relation (Object B → Junction)
|
||||
|
||||
1. Select your second object in **Settings → Data Model**
|
||||
2. Click **+ Add Relation**
|
||||
3. Select the junction object (e.g., "Project Assignments")
|
||||
4. Set the relation type to **One-To-Many** (one project can link to many assignments)
|
||||
5. Povolte **"This is a relation to a Junction Object"**
|
||||
|
||||
<img src="/images/user-guide/fields/junction-relation-toggle.png" style={{width:'100%'}} />
|
||||
|
||||
6. Pojmenujte pole:
|
||||
* Pole na spojovacím objektu: např. "Project"
|
||||
* Pole na Projects: např. "Team Members"
|
||||
6. Klikněte na **Uložit**
|
||||
7. Klikněte na **Uložit**
|
||||
|
||||
## Krok 3: Nakonfigurujte zobrazení vztahu přes spojovací objekt
|
||||
|
||||
@@ -98,18 +105,6 @@ Nyní nakonfigurujte zdrojové objekty tak, aby zobrazovaly propojené záznamy
|
||||
6. Vyberte **Target relation** (např. "Project" — pole na spojovacím objektu, které ukazuje na druhou stranu)
|
||||
7. Klikněte na **Uložit**
|
||||
|
||||
{/* TODO: Add image
|
||||
<img src="/images/user-guide/fields/junction-relation-toggle.png" style={{width:'100%'}}/>
|
||||
*/}
|
||||
|
||||
Opakujte pro druhý objekt:
|
||||
|
||||
1. Vyberte "Projects" v Data Model
|
||||
2. Upravte relační pole "Team Members"
|
||||
3. Povolte přepínač pro vztah přes spojovací objekt
|
||||
4. Vyberte "Person" jako cílový vztah
|
||||
5. Uložit
|
||||
|
||||
## Výsledek
|
||||
|
||||
Po konfiguraci:
|
||||
@@ -130,15 +125,15 @@ Zde je kompletní postup:
|
||||
|
||||
### Přidejte vztahy
|
||||
|
||||
1. **Project Assignment → People**
|
||||
* Typ: Many-to-One
|
||||
* Pole na Assignment: "Person"
|
||||
1. **People → Project Assignment**
|
||||
* Type: One-to-Many
|
||||
* Pole na People: "Project Assignments"
|
||||
* Pole na Assignment: "Person"
|
||||
|
||||
2. **Project Assignment → Projects**
|
||||
* Typ: Many-to-One
|
||||
* Pole na Assignment: "Project"
|
||||
2. **Projects → Project Assignment**
|
||||
* Type: One-to-Many
|
||||
* Pole na Projects: "Team Members"
|
||||
* Pole na Assignment: "Project"
|
||||
|
||||
### Nakonfigurujte zobrazení spojovacího objektu
|
||||
|
||||
|
||||
@@ -30,3 +30,9 @@ Přidejte odkazy na externí nástroje přímo do postranního panelu. Užitečn
|
||||
## Nabídka příkazů
|
||||
|
||||
Stiskněte `Cmd+K` (nebo `Ctrl+K`) pro otevření nabídky příkazů — rychlá vyhledávací lišta pro přechod na libovolný záznam, zobrazení nebo akci bez procházení postranního panelu.
|
||||
|
||||
## Přizpůsobení postranního panelu
|
||||
|
||||
Chcete-li přizpůsobit postranní panel, najeďte myší na sekci "Pracovní prostor" v postranním panelu a klikněte na ikonu klíče.
|
||||
|
||||
<img src="/images/user-guide/layout/navigation-edit-icon.png" alt="Navigation edit icon" />
|
||||
|
||||
@@ -3,6 +3,8 @@ title: Stránky záznamů
|
||||
description: Přizpůsobte rozvržení jednotlivých stránek detailu záznamu pomocí karet a widgetů.
|
||||
---
|
||||
|
||||
## Přehled
|
||||
|
||||
Když v Twenty otevřete záznam, stránka detailu se skládá z **karet** a **widgetů**. Obojí lze pro každý typ objektu plně přizpůsobit.
|
||||
|
||||
## Karty
|
||||
@@ -38,12 +40,20 @@ Widgety jsou stavební prvky uvnitř každé karty. Mezi dostupné typy widgetů
|
||||
|
||||
1. Otevřete libovolný záznam
|
||||
2. Stiskněte `Cmd+K` a vyhledejte "Upravit rozložení stránky záznamu"
|
||||
|
||||
nebo
|
||||
|
||||
1. Go to Settings > Data model > object of your choice > Layout
|
||||
|
||||
2. Click the "Customize record page" button for that object
|
||||
|
||||
3. Nyní jste v režimu přizpůsobení:
|
||||
* **Přidávejte widgety** z výběru widgetů
|
||||
* **Přetahujte widgety** pro jejich přemístění v mřížce
|
||||
* **Změňte velikost widgetů** tažením jejich okrajů
|
||||
* **Nakonfigurujte pole** zobrazovaná v jednotlivých widgetech
|
||||
* **Spravujte karty** — přidávejte, odebírejte, přejmenovávejte, měňte pořadí
|
||||
|
||||
4. Uložte změny — budou platit pro všechny záznamy daného typu objektu
|
||||
|
||||
## Viditelnost polí
|
||||
|
||||
@@ -94,15 +94,16 @@ const handler = async (event: RoutePayload) => {
|
||||
|
||||
Der Typ `RoutePayload` hat die folgende Struktur:
|
||||
|
||||
| Eigenschaft | Typ | Beschreibung | Beispiel |
|
||||
| ---------------------------- | ------------------------------------------------------- | ---------------------------------------------------------------- | -------------------------------------------------------------------------- |
|
||||
| `headers` | `Record\<string, string \| undefined>` | HTTP-Header (nur die in `forwardedRequestHeaders` aufgelisteten) | siehe Abschnitt unten |
|
||||
| `queryStringParameters` | `Record\<string, string \| undefined>` | Query-String-Parameter (mehrere Werte mit Kommas verbunden) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
|
||||
| `pathParameters` | `Record\<string, string \| undefined>` | Aus dem Routenmuster extrahierte Pfadparameter | `/users/:id`, `/users/123` -> `{ id: '123' }` |
|
||||
| `body` | `object \| null` | Geparster Request-Body (JSON) | `{ id: 1 }` -> `{ id: 1 }` |
|
||||
| `isBase64Encoded` | `boolean` | Gibt an, ob der Body Base64-codiert ist | |
|
||||
| `requestContext.http.method` | `Zeichenkette` | HTTP-Methode (GET, POST, PUT, PATCH, DELETE) | |
|
||||
| `requestContext.http.path` | `Zeichenkette` | Rohpfad der Anfrage | |
|
||||
| Eigenschaft | Typ | Beschreibung | Beispiel |
|
||||
| ---------------------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
|
||||
| `headers` | `Record\<string, string \| undefined>` | HTTP-Header (nur die in `forwardedRequestHeaders` aufgelisteten) | siehe Abschnitt unten |
|
||||
| `queryStringParameters` | `Record\<string, string \| undefined>` | Query-String-Parameter (mehrere Werte mit Kommas verbunden) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
|
||||
| `pathParameters` | `Record\<string, string \| undefined>` | Aus dem Routenmuster extrahierte Pfadparameter | `/users/:id`, `/users/123` -> `{ id: '123' }` |
|
||||
| `body` | `object \| null` | Geparster Request-Body (JSON) | `{ id: 1 }` -> `{ id: 1 }` |
|
||||
| `rawBody` | `string \| undefined` | Original UTF-8 request body, before JSON parsing. Useful for verifying HMAC-style webhook signatures (e.g. GitHub's `X-Hub-Signature-256`, Stripe). `undefined` when the runtime did not preserve it. | |
|
||||
| `isBase64Encoded` | `boolean` | Gibt an, ob der Body Base64-codiert ist | |
|
||||
| `requestContext.http.method` | `Zeichenkette` | HTTP-Methode (GET, POST, PUT, PATCH, DELETE) | |
|
||||
| `requestContext.http.path` | `Zeichenkette` | Rohpfad der Anfrage | |
|
||||
|
||||
|
||||
#### forwardedRequestHeaders
|
||||
|
||||
@@ -19,7 +19,7 @@ Für Teams, die bereit sind zu skalieren:
|
||||
* Standard-Support
|
||||
|
||||
<Note>
|
||||
Premiumfunktionen (SSO und Berechtigungen auf Zeilenebene) sind im Pro-Plan nicht enthalten.
|
||||
Premium features (SSO, row-level permissions and AI usage data) are not included in the Pro plan.
|
||||
</Note>
|
||||
|
||||
### Organisation (Cloud)
|
||||
@@ -27,7 +27,7 @@ Premiumfunktionen (SSO und Berechtigungen auf Zeilenebene) sind im Pro-Plan nich
|
||||
Für größere Teams mit erweiterten Anforderungen:
|
||||
|
||||
* Alles aus Pro
|
||||
* **Premiumfunktionen**: SSO-Integration und Berechtigungen auf Zeilenebene
|
||||
* **Premium features**: SSO integration, row-level permissions and AI usage data
|
||||
* Vorrangiger Support
|
||||
|
||||
## Selbstgehostete Pläne
|
||||
@@ -45,7 +45,7 @@ Hosten Sie Twenty auf Ihrer eigenen Infrastruktur kostenlos:
|
||||
Für Teams, die beim Selbsthosting Premiumfunktionen benötigen:
|
||||
|
||||
* Alle Pro-Funktionen
|
||||
* **Premiumfunktionen**: SSO-Integration und Berechtigungen auf Zeilenebene
|
||||
* **Premium features**: SSO integration, row-level permissions and AI usage data
|
||||
* Support durch das Twenty-Team
|
||||
* Keine Verpflichtung, benutzerdefinierten Code vor der Weitergabe als Open Source zu veröffentlichen
|
||||
|
||||
@@ -55,6 +55,7 @@ Premiumfunktionen sind nur in den Organisation-Plänen (Cloud oder Selbstgehoste
|
||||
|
||||
* **SSO-Integration**: Single Sign-On mit Ihrem Identitätsanbieter
|
||||
* **Berechtigungen auf Zeilenebene**: Feingranulare Zugriffskontrolle auf Datensatzebene
|
||||
* **AI usage data**: Track AI consumption across the workspace
|
||||
|
||||
## Pläne wechseln
|
||||
|
||||
@@ -77,3 +78,15 @@ Wenden Sie sich an den Support, um Ihren Plan herabzustufen.
|
||||
### Zur monatlichen Abrechnung wechseln
|
||||
|
||||
Wenden Sie sich an den Support, um wieder zur monatlichen Abrechnung zu wechseln.
|
||||
|
||||
## Obtain an Enterprise Key for Organization (Self-Hosted)
|
||||
|
||||
To use the Organization (Self-Hosted) plan, you need to obtain an Enterprise key:
|
||||
|
||||
1. Go to **Settings → Admin Panel → Enterprise**
|
||||
|
||||
<img src="/images/user-guide/billing/enterprise-key.png" alt="Enterprise key" />
|
||||
|
||||
2. Click **Get Enterprise Key**
|
||||
3. When you are redirected to Stripe, enter your payment details and confirm
|
||||
4. When your Enterprise key is displayed, paste it into the Enterprise settings page and activate the Organization license
|
||||
|
||||
@@ -16,6 +16,11 @@ Wenn Sie selbst hosten möchten und die Premium-Funktionen (SSO und Berechtigung
|
||||
Premium-Funktionen sind nur in den Organization-Tarifen (Cloud oder Self-Hosted) verfügbar:
|
||||
* **SSO-Integration**: Single Sign-On mit Ihrem Identitätsanbieter
|
||||
* **Berechtigungen auf Zeilenebene**: feingranulare Zugriffskontrolle auf Datensatzebene
|
||||
* **AI usage data**: Track AI consumption across the workspace
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Is Organization plan on cloud and Organization plan on self-hosted the same?">
|
||||
They offer the same premium features. However, a cloud subscription cannot be used for self-hosted deployments. Self-hosted requires an Enterprise key.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Bieten Sie kostenlose Plätze für Nur-Ansicht-Benutzer an?">
|
||||
|
||||
+34
-39
@@ -53,38 +53,45 @@ Erstellen Sie zunächst das Zwischenobjekt, das die Verknüpfungen speichert.
|
||||
1. Gehen Sie zu **Einstellungen → Datenmodell**
|
||||
2. Klicken Sie auf **+ Neues Objekt**
|
||||
3. Benennen Sie es aussagekräftig (z. B. "Projektzuweisung", "Teammitglied", "Produktbestellung")
|
||||
4. Klicken Sie auf **Speichern**
|
||||
4. Toggle "Skip creating a Name field" on
|
||||
|
||||
<img src="/images/user-guide/fields/new-pivot-object.png" alt="New pivot object" />
|
||||
|
||||
5. Klicken Sie auf **Speichern**
|
||||
|
||||
<Tip>
|
||||
**Namenskonvention**: Verwenden Sie einen Namen, der die Beziehung beschreibt, z. B. "Projektzuweisung" oder "Teammitgliedschaft". Das macht das Datenmodell leichter verständlich.
|
||||
</Tip>
|
||||
|
||||
## Schritt 2: Beziehungen vom Verknüpfungsobjekt erstellen
|
||||
## Step 2: Create Relations Between Objects and the Junction
|
||||
|
||||
Fügen Sie vom Verknüpfungsobjekt aus Beziehungsfelder zu beiden Objekten hinzu, die Sie verbinden möchten.
|
||||
Add relation fields from each of your two objects to the junction object.
|
||||
|
||||
### Erste Beziehung (Verknüpfung → Objekt A)
|
||||
### First Relation (Object A → Junction)
|
||||
|
||||
1. Wählen Sie Ihr Verknüpfungsobjekt unter **Einstellungen → Datenmodell** aus
|
||||
2. Klicken Sie auf **+ Feld hinzufügen**
|
||||
3. Wählen Sie **Relation** als Feldtyp
|
||||
4. Wählen Sie das erste Objekt aus (z. B. "Personen")
|
||||
5. Legen Sie den Beziehungstyp auf **Viele-zu-Eins** fest (viele Zuweisungen können mit einer Person verknüpft werden)
|
||||
6. Benennen Sie die Felder:
|
||||
* Feld auf der Verknüpfung: z. B. "Person"
|
||||
* Feld bei Personen: z. B. "Projektzuweisungen"
|
||||
7. Klicken Sie auf **Speichern**
|
||||
|
||||
### Zweite Beziehung (Verknüpfung → Objekt B)
|
||||
|
||||
1. Bleiben Sie im Verknüpfungsobjekt und klicken Sie auf **+ Feld hinzufügen**
|
||||
2. Wählen Sie **Relation** als Feldtyp
|
||||
3. Wählen Sie das zweite Objekt aus (z. B. "Projekte")
|
||||
4. Legen Sie den Beziehungstyp auf **Viele-zu-Eins** fest
|
||||
1. Select your first object in **Settings → Data Model**
|
||||
2. Click **+ Add Relation**
|
||||
3. Select the junction object (e.g., "Project Assignments")
|
||||
4. Set the relation type to **One-To-Many** (one person can link to many assignments)
|
||||
5. Benennen Sie die Felder:
|
||||
* Feld bei Personen: z. B. "Projektzuweisungen"
|
||||
* Feld auf der Verknüpfung: z. B. "Person"
|
||||
6. Klicken Sie auf **Speichern**
|
||||
|
||||
### Second Relation (Object B → Junction)
|
||||
|
||||
1. Select your second object in **Settings → Data Model**
|
||||
2. Click **+ Add Relation**
|
||||
3. Select the junction object (e.g., "Project Assignments")
|
||||
4. Set the relation type to **One-To-Many** (one project can link to many assignments)
|
||||
5. Aktivieren Sie **"Dies ist eine Beziehung zu einem Verknüpfungsobjekt"**
|
||||
|
||||
<img src="/images/user-guide/fields/junction-relation-toggle.png" style={{width:'100%'}} />
|
||||
|
||||
6. Benennen Sie die Felder:
|
||||
* Feld auf der Verknüpfung: z. B. "Projekt"
|
||||
* Feld bei Projekten: z. B. "Teammitglieder"
|
||||
6. Klicken Sie auf **Speichern**
|
||||
7. Klicken Sie auf **Speichern**
|
||||
|
||||
## Schritt 3: Anzeige der Verknüpfungsbeziehung konfigurieren
|
||||
|
||||
@@ -98,18 +105,6 @@ Konfigurieren Sie nun die Quellobjekte so, dass verknüpfte Datensätze direkt a
|
||||
6. Wählen Sie die **Zielbeziehung** aus (z. B. "Projekt" — das Feld an der Verknüpfung, das auf die andere Seite zeigt)
|
||||
7. Klicken Sie auf **Speichern**
|
||||
|
||||
{/* TODO: Add image
|
||||
<img src="/images/user-guide/fields/junction-relation-toggle.png" style={{width:'100%'}}/>
|
||||
*/}
|
||||
|
||||
Wiederholen Sie dies für das andere Objekt:
|
||||
|
||||
1. Wählen Sie "Projekte" im Datenmodell aus
|
||||
2. Bearbeiten Sie das Beziehungsfeld "Teammitglieder"
|
||||
3. Aktivieren Sie den Verknüpfungsschalter
|
||||
4. Wählen Sie "Person" als Zielbeziehung aus
|
||||
5. Speichern
|
||||
|
||||
## Ergebnis
|
||||
|
||||
Nach der Konfiguration:
|
||||
@@ -130,15 +125,15 @@ Hier ist eine vollständige Schritt-für-Schritt-Anleitung:
|
||||
|
||||
### Beziehungen hinzufügen
|
||||
|
||||
1. **Projektzuweisung → Personen**
|
||||
* Typ: Viele-zu-Eins
|
||||
* Feld bei Zuweisung: "Person"
|
||||
1. **People → Project Assignment**
|
||||
* Type: One-to-Many
|
||||
* Feld bei Personen: "Projektzuweisungen"
|
||||
* Feld bei Zuweisung: "Person"
|
||||
|
||||
2. **Projektzuweisung → Projekte**
|
||||
* Typ: Viele-zu-Eins
|
||||
* Feld bei Zuweisung: "Projekt"
|
||||
2. **Projects → Project Assignment**
|
||||
* Type: One-to-Many
|
||||
* Feld bei Projekten: "Teammitglieder"
|
||||
* Feld bei Zuweisung: "Projekt"
|
||||
|
||||
### Verknüpfungsanzeige konfigurieren
|
||||
|
||||
|
||||
@@ -30,3 +30,9 @@ Fügen Sie Links zu externen Tools direkt in der Seitenleiste hinzu. Nützlich,
|
||||
## Befehlsmenü
|
||||
|
||||
Drücken Sie `Cmd+K` (oder `Ctrl+K`), um das Befehlsmenü zu öffnen — eine Suchleiste für den Schnellzugriff, mit der Sie zu jedem Datensatz, jeder Ansicht oder Aktion springen können, ohne durch die Seitenleiste zu navigieren.
|
||||
|
||||
## Anpassung der Seitenleiste
|
||||
|
||||
Um die Seitenleiste anzupassen, bewegen Sie den Mauszeiger über den Abschnitt "Arbeitsbereich" in der Seitenleiste und klicken Sie auf das Schraubenschlüssel-Symbol.
|
||||
|
||||
<img src="/images/user-guide/layout/navigation-edit-icon.png" alt="Navigation edit icon" />
|
||||
|
||||
@@ -3,6 +3,8 @@ title: Datensatzseiten
|
||||
description: Passen Sie das Layout einzelner Datensatz-Detailseiten mit Tabs und Widgets an.
|
||||
---
|
||||
|
||||
## Übersicht
|
||||
|
||||
Wenn Sie in Twenty einen Datensatz öffnen, besteht die Detailseite aus **Tabs** und **Widgets**. Beide lassen sich je Objekttyp vollständig anpassen.
|
||||
|
||||
## Registerkarten
|
||||
@@ -38,12 +40,20 @@ Widgets sind die Bausteine in jedem Tab. Zu den verfügbaren Widget-Typen gehör
|
||||
|
||||
1. Öffnen Sie einen beliebigen Datensatz
|
||||
2. Drücken Sie `Cmd+K` und suchen Sie nach "Layout der Datensatzseite bearbeiten"
|
||||
|
||||
oder
|
||||
|
||||
1. Go to Settings > Data model > object of your choice > Layout
|
||||
|
||||
2. Click the "Customize record page" button for that object
|
||||
|
||||
3. Sie befinden sich jetzt im Anpassungsmodus:
|
||||
* **Widgets hinzufügen** aus der Widget-Auswahl
|
||||
* **Widgets ziehen**, um sie im Raster neu zu positionieren
|
||||
* **Widgets in der Größe ändern**, indem Sie ihre Ränder ziehen
|
||||
* **Felder konfigurieren**, die in jedem Widget angezeigt werden
|
||||
* **Tabs verwalten** — hinzufügen, entfernen, umbenennen, neu anordnen
|
||||
|
||||
4. Speichern Sie Ihre Änderungen — sie gelten für alle Datensätze dieses Objekttyps
|
||||
|
||||
## Feldsichtbarkeit
|
||||
|
||||
@@ -94,15 +94,16 @@ const handler = async (event: RoutePayload) => {
|
||||
|
||||
Il tipo `RoutePayload` ha la seguente struttura:
|
||||
|
||||
| Proprietà | Tipo | Descrizione | Esempio |
|
||||
| ---------------------------- | ------------------------------------------------------- | --------------------------------------------------------------------- | -------------------------------------------------------------------------- |
|
||||
| `headers` | `Record\<string, string \| undefined>` | Intestazioni HTTP (solo quelle elencate in `forwardedRequestHeaders`) | vedi la sezione sotto |
|
||||
| `queryStringParameters` | `Record\<string, string \| undefined>` | Parametri della query string (valori multipli uniti da virgole) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
|
||||
| `pathParameters` | `Record\<string, string \| undefined>` | Parametri di percorso estratti dal pattern della route | `/users/:id`, `/users/123` -> `{ id: '123' }` |
|
||||
| `body` | `object \| null` | Corpo della richiesta analizzato (JSON) | `{ id: 1 }` -> `{ id: 1 }` |
|
||||
| `isBase64Encoded` | `boolean` | Indica se il corpo è codificato in base64 | |
|
||||
| `requestContext.http.method` | `string` | Metodo HTTP (GET, POST, PUT, PATCH, DELETE) | |
|
||||
| `requestContext.http.path` | `string` | Percorso della richiesta non elaborato | |
|
||||
| Proprietà | Tipo | Descrizione | Esempio |
|
||||
| ---------------------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
|
||||
| `headers` | `Record\<string, string \| undefined>` | Intestazioni HTTP (solo quelle elencate in `forwardedRequestHeaders`) | vedi la sezione sotto |
|
||||
| `queryStringParameters` | `Record\<string, string \| undefined>` | Parametri della query string (valori multipli uniti da virgole) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
|
||||
| `pathParameters` | `Record\<string, string \| undefined>` | Parametri di percorso estratti dal pattern della route | `/users/:id`, `/users/123` -> `{ id: '123' }` |
|
||||
| `body` | `object \| null` | Corpo della richiesta analizzato (JSON) | `{ id: 1 }` -> `{ id: 1 }` |
|
||||
| `rawBody` | `string \| undefined` | Original UTF-8 request body, before JSON parsing. Useful for verifying HMAC-style webhook signatures (e.g. GitHub's `X-Hub-Signature-256`, Stripe). `undefined` when the runtime did not preserve it. | |
|
||||
| `isBase64Encoded` | `boolean` | Indica se il corpo è codificato in base64 | |
|
||||
| `requestContext.http.method` | `string` | Metodo HTTP (GET, POST, PUT, PATCH, DELETE) | |
|
||||
| `requestContext.http.path` | `string` | Percorso della richiesta non elaborato | |
|
||||
|
||||
|
||||
#### forwardedRequestHeaders
|
||||
|
||||
@@ -19,7 +19,7 @@ Per i team pronti a scalare:
|
||||
* Supporto standard
|
||||
|
||||
<Note>
|
||||
Le funzionalità premium (SSO e autorizzazioni a livello di riga) non sono incluse nel piano Pro.
|
||||
Premium features (SSO, row-level permissions and AI usage data) are not included in the Pro plan.
|
||||
</Note>
|
||||
|
||||
### Organizzazione (Cloud)
|
||||
@@ -27,7 +27,7 @@ Le funzionalità premium (SSO e autorizzazioni a livello di riga) non sono inclu
|
||||
Per i team più numerosi con esigenze avanzate:
|
||||
|
||||
* Tutto ciò che è incluso in Pro
|
||||
* **Funzionalità premium**: integrazione SSO e autorizzazioni a livello di riga
|
||||
* **Premium features**: SSO integration, row-level permissions and AI usage data
|
||||
* Supporto prioritario
|
||||
|
||||
## Piani self‑hosted
|
||||
@@ -45,7 +45,7 @@ Esegui Twenty sulla tua infrastruttura senza costi:
|
||||
Per i team che necessitano di funzionalità premium con il self‑hosting:
|
||||
|
||||
* Tutte le funzionalità di Pro
|
||||
* **Funzionalità premium**: integrazione SSO e autorizzazioni a livello di riga
|
||||
* **Premium features**: SSO integration, row-level permissions and AI usage data
|
||||
* Supporto del team di Twenty
|
||||
* Nessun requisito di pubblicare il codice personalizzato come open source prima della distribuzione
|
||||
|
||||
@@ -55,6 +55,7 @@ Le funzionalità premium sono disponibili solo nei piani Organizzazione (Cloud o
|
||||
|
||||
* **Integrazione SSO**: Single Sign‑On con il tuo provider di identità
|
||||
* **Autorizzazioni a livello di riga**: controllo degli accessi granulare a livello di record
|
||||
* **AI usage data**: Track AI consumption across the workspace
|
||||
|
||||
## Cambio piano
|
||||
|
||||
@@ -77,3 +78,15 @@ Contatta il supporto per eseguire il downgrade del tuo piano.
|
||||
### Passa alla fatturazione mensile
|
||||
|
||||
Contatta il supporto per tornare alla fatturazione mensile.
|
||||
|
||||
## Obtain an Enterprise Key for Organization (Self-Hosted)
|
||||
|
||||
To use the Organization (Self-Hosted) plan, you need to obtain an Enterprise key:
|
||||
|
||||
1. Go to **Settings → Admin Panel → Enterprise**
|
||||
|
||||
<img src="/images/user-guide/billing/enterprise-key.png" alt="Enterprise key" />
|
||||
|
||||
2. Click **Get Enterprise Key**
|
||||
3. When you are redirected to Stripe, enter your payment details and confirm
|
||||
4. When your Enterprise key is displayed, paste it into the Enterprise settings page and activate the Organization license
|
||||
|
||||
@@ -16,6 +16,11 @@ Se vuoi effettuare il self-hosting e hai bisogno delle funzionalità Premium (SS
|
||||
Le funzionalità Premium sono disponibili solo nei piani Organization (Cloud o Self-Hosted):
|
||||
* **Integrazione SSO**: Single Sign-On con il tuo provider di identità
|
||||
* **Autorizzazioni a livello di riga**: controllo degli accessi granulare a livello di record
|
||||
* **AI usage data**: Track AI consumption across the workspace
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Is Organization plan on cloud and Organization plan on self-hosted the same?">
|
||||
They offer the same premium features. However, a cloud subscription cannot be used for self-hosted deployments. Self-hosted requires an Enterprise key.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Offrite posti gratuiti per utenti solo visualizzazione?">
|
||||
|
||||
+34
-39
@@ -53,38 +53,45 @@ Per prima cosa, crea l'oggetto intermedio che conterrà i collegamenti.
|
||||
1. Vai a **Impostazioni → Modello dati**
|
||||
2. Fai clic su **+ Nuovo oggetto**
|
||||
3. Assegnagli un nome descrittivo (ad es., "Assegnazione al progetto", "Membro del team", "Ordine del prodotto")
|
||||
4. Clicca su **Salva**
|
||||
4. Toggle "Skip creating a Name field" on
|
||||
|
||||
<img src="/images/user-guide/fields/new-pivot-object.png" alt="New pivot object" />
|
||||
|
||||
5. Clicca su **Salva**
|
||||
|
||||
<Tip>
|
||||
**Convenzione di denominazione**: Usa un nome che descriva la relazione, come "Assegnazione al progetto" o "Appartenenza al team". Questo rende il modello di dati più facile da comprendere.
|
||||
</Tip>
|
||||
|
||||
## Passaggio 2: Crea le relazioni dall'oggetto di giunzione
|
||||
## Step 2: Create Relations Between Objects and the Junction
|
||||
|
||||
Aggiungi campi di relazione dall'oggetto di giunzione a entrambi gli oggetti che desideri collegare.
|
||||
Add relation fields from each of your two objects to the junction object.
|
||||
|
||||
### Prima relazione (Giunzione → Oggetto A)
|
||||
### First Relation (Object A → Junction)
|
||||
|
||||
1. Seleziona il tuo oggetto di giunzione in **Impostazioni → Modello dati**
|
||||
2. Fai clic su **+ Aggiungi campo**
|
||||
3. Scegli **Relazione** come tipo di campo
|
||||
4. Seleziona il primo oggetto (ad es., "Persone")
|
||||
5. Imposta il tipo di relazione su **Molti-a-uno** (molte assegnazioni possono collegarsi a una persona)
|
||||
6. Assegna un nome ai campi:
|
||||
* Campo sull'oggetto di giunzione: ad es., "Persona"
|
||||
* Campo su Persone: ad es., "Assegnazioni ai progetti"
|
||||
7. Clicca su **Salva**
|
||||
|
||||
### Seconda relazione (Giunzione → Oggetto B)
|
||||
|
||||
1. Sempre sull'oggetto di giunzione, fai clic su **+ Aggiungi campo**
|
||||
2. Scegli **Relazione** come tipo di campo
|
||||
3. Seleziona il secondo oggetto (ad es., "Progetti")
|
||||
4. Imposta il tipo di relazione su **Molti-a-uno**
|
||||
1. Select your first object in **Settings → Data Model**
|
||||
2. Click **+ Add Relation**
|
||||
3. Select the junction object (e.g., "Project Assignments")
|
||||
4. Set the relation type to **One-To-Many** (one person can link to many assignments)
|
||||
5. Assegna un nome ai campi:
|
||||
* Campo su Persone: ad es., "Assegnazioni ai progetti"
|
||||
* Campo sull'oggetto di giunzione: ad es., "Persona"
|
||||
6. Clicca su **Salva**
|
||||
|
||||
### Second Relation (Object B → Junction)
|
||||
|
||||
1. Select your second object in **Settings → Data Model**
|
||||
2. Click **+ Add Relation**
|
||||
3. Select the junction object (e.g., "Project Assignments")
|
||||
4. Set the relation type to **One-To-Many** (one project can link to many assignments)
|
||||
5. Abilita **"Questa è una relazione con un oggetto di giunzione"**
|
||||
|
||||
<img src="/images/user-guide/fields/junction-relation-toggle.png" style={{width:'100%'}} />
|
||||
|
||||
6. Assegna un nome ai campi:
|
||||
* Campo sull'oggetto di giunzione: ad es., "Progetto"
|
||||
* Campo su Progetti: ad es., "Membri del team"
|
||||
6. Clicca su **Salva**
|
||||
7. Clicca su **Salva**
|
||||
|
||||
## Passaggio 3: Configura la visualizzazione della relazione di giunzione
|
||||
|
||||
@@ -98,18 +105,6 @@ Ora configura gli oggetti sorgente per visualizzare direttamente i record colleg
|
||||
6. Seleziona la **Relazione di destinazione** (ad es., "Progetto" — il campo sull'oggetto di giunzione che punta all'altro lato)
|
||||
7. Clicca su **Salva**
|
||||
|
||||
{/* TODO: Add image
|
||||
<img src="/images/user-guide/fields/junction-relation-toggle.png" style={{width:'100%'}}/>
|
||||
*/}
|
||||
|
||||
Ripeti per l'altro oggetto:
|
||||
|
||||
1. Seleziona "Progetti" in Modello dati
|
||||
2. Modifica il campo di relazione "Membri del team"
|
||||
3. Abilita l'interruttore di giunzione
|
||||
4. Seleziona "Persona" come relazione di destinazione
|
||||
5. Salva
|
||||
|
||||
## Risultato
|
||||
|
||||
Dopo la configurazione:
|
||||
@@ -130,15 +125,15 @@ Ecco una procedura completa:
|
||||
|
||||
### Aggiungi relazioni
|
||||
|
||||
1. **Assegnazione al progetto → Persone**
|
||||
* Tipo: Molti-a-uno
|
||||
* Campo su Assegnazione: "Persona"
|
||||
1. **People → Project Assignment**
|
||||
* Type: One-to-Many
|
||||
* Campo su Persone: "Assegnazioni ai progetti"
|
||||
* Campo su Assegnazione: "Persona"
|
||||
|
||||
2. **Assegnazione al progetto → Progetti**
|
||||
* Tipo: Molti-a-uno
|
||||
* Campo su Assegnazione: "Progetto"
|
||||
2. **Projects → Project Assignment**
|
||||
* Type: One-to-Many
|
||||
* Campo su Progetti: "Membri del team"
|
||||
* Campo su Assegnazione: "Progetto"
|
||||
|
||||
### Configura la visualizzazione della giunzione
|
||||
|
||||
|
||||
@@ -30,3 +30,9 @@ Aggiungi collegamenti a strumenti esterni direttamente nella barra laterale. Uti
|
||||
## Menu Comandi
|
||||
|
||||
Premi `Cmd+K` (o `Ctrl+K`) per aprire il menu comandi — una barra di ricerca ad accesso rapido per passare a qualsiasi record, vista o azione senza usare la barra laterale.
|
||||
|
||||
## Personalizzare la barra laterale
|
||||
|
||||
Per personalizzare la barra laterale, passa il mouse sulla sezione "Workspace" nella barra laterale e fai clic sull'icona a forma di chiave inglese.
|
||||
|
||||
<img src="/images/user-guide/layout/navigation-edit-icon.png" alt="Navigation edit icon" />
|
||||
|
||||
@@ -3,6 +3,8 @@ title: Pagine dei record
|
||||
description: Personalizza il layout delle singole pagine di dettaglio dei record con schede e widget.
|
||||
---
|
||||
|
||||
## Panoramica
|
||||
|
||||
Quando apri un record in Twenty, la pagina di dettaglio è composta da **schede** e **widget**. Entrambi sono completamente personalizzabili per ciascun tipo di oggetto.
|
||||
|
||||
## Schede
|
||||
@@ -38,12 +40,20 @@ I widget sono gli elementi costitutivi all'interno di ogni scheda. Tipi di widge
|
||||
|
||||
1. Apri un record qualsiasi
|
||||
2. Premi `Cmd+K` e cerca "Modifica il layout della pagina del record"
|
||||
|
||||
o
|
||||
|
||||
1. Go to Settings > Data model > object of your choice > Layout
|
||||
|
||||
2. Click the "Customize record page" button for that object
|
||||
|
||||
3. Ora sei in modalità di personalizzazione:
|
||||
* **Aggiungi widget** dal selettore di widget
|
||||
* **Trascina i widget** per riposizionarli sulla griglia
|
||||
* **Ridimensiona i widget** trascinando i bordi
|
||||
* **Configura i campi** mostrati all'interno di ciascun widget
|
||||
* **Gestisci le schede** — aggiungi, rimuovi, rinomina, riordina
|
||||
|
||||
4. Salva le modifiche — si applicano a tutti i record di quel tipo di oggetto
|
||||
|
||||
## Visibilità dei campi
|
||||
|
||||
@@ -94,15 +94,16 @@ const handler = async (event: RoutePayload) => {
|
||||
|
||||
O tipo `RoutePayload` tem a seguinte estrutura:
|
||||
|
||||
| Propriedade | Tipo | Descrição | Exemplo |
|
||||
| ---------------------------- | ------------------------------------------------------- | ---------------------------------------------------------------------- | -------------------------------------------------------------------------- |
|
||||
| `headers` | `Record\<string, string \| undefined>` | Cabeçalhos HTTP (apenas aqueles listados em `forwardedRequestHeaders`) | veja a seção abaixo |
|
||||
| `queryStringParameters` | `Record\<string, string \| undefined>` | Parâmetros de query string (valores múltiplos unidos por vírgulas) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
|
||||
| `pathParameters` | `Record\<string, string \| undefined>` | Parâmetros de caminho extraídos do padrão de rota | `/users/:id`, `/users/123` -> `{ id: '123' }` |
|
||||
| `body` | `object \| null` | Corpo da requisição analisado (JSON) | `{ id: 1 }` -> `{ id: 1 }` |
|
||||
| `isBase64Encoded` | `boolean` | Se o corpo está codificado em base64 | |
|
||||
| `requestContext.http.method` | `string` | Método HTTP (GET, POST, PUT, PATCH, DELETE) | |
|
||||
| `requestContext.http.path` | `string` | Caminho bruto da requisição | |
|
||||
| Propriedade | Tipo | Descrição | Exemplo |
|
||||
| ---------------------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
|
||||
| `headers` | `Record\<string, string \| undefined>` | Cabeçalhos HTTP (apenas aqueles listados em `forwardedRequestHeaders`) | veja a seção abaixo |
|
||||
| `queryStringParameters` | `Record\<string, string \| undefined>` | Parâmetros de query string (valores múltiplos unidos por vírgulas) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
|
||||
| `pathParameters` | `Record\<string, string \| undefined>` | Parâmetros de caminho extraídos do padrão de rota | `/users/:id`, `/users/123` -> `{ id: '123' }` |
|
||||
| `body` | `object \| null` | Corpo da requisição analisado (JSON) | `{ id: 1 }` -> `{ id: 1 }` |
|
||||
| `rawBody` | `string \| undefined` | Original UTF-8 request body, before JSON parsing. Useful for verifying HMAC-style webhook signatures (e.g. GitHub's `X-Hub-Signature-256`, Stripe). `undefined` when the runtime did not preserve it. | |
|
||||
| `isBase64Encoded` | `boolean` | Se o corpo está codificado em base64 | |
|
||||
| `requestContext.http.method` | `string` | Método HTTP (GET, POST, PUT, PATCH, DELETE) | |
|
||||
| `requestContext.http.path` | `string` | Caminho bruto da requisição | |
|
||||
|
||||
|
||||
#### forwardedRequestHeaders
|
||||
|
||||
@@ -19,7 +19,7 @@ Para equipes prontas para escalar:
|
||||
* Suporte padrão
|
||||
|
||||
<Note>
|
||||
Recursos premium (SSO e permissões em nível de linha) não estão incluídos no plano Pro.
|
||||
Premium features (SSO, row-level permissions and AI usage data) are not included in the Pro plan.
|
||||
</Note>
|
||||
|
||||
### Organização (Nuvem)
|
||||
@@ -27,7 +27,7 @@ Recursos premium (SSO e permissões em nível de linha) não estão incluídos n
|
||||
Para equipes maiores com necessidades avançadas:
|
||||
|
||||
* Tudo do Pro
|
||||
* **Recursos premium**: integração SSO e permissões em nível de linha
|
||||
* **Premium features**: SSO integration, row-level permissions and AI usage data
|
||||
* Suporte prioritário
|
||||
|
||||
## Planos auto-hospedados
|
||||
@@ -45,7 +45,7 @@ Hospede o Twenty na sua própria infraestrutura sem custo:
|
||||
Para equipes que precisam de recursos premium enquanto se auto-hospedam:
|
||||
|
||||
* Todos os recursos do Pro
|
||||
* **Recursos premium**: integração SSO e permissões em nível de linha
|
||||
* **Premium features**: SSO integration, row-level permissions and AI usage data
|
||||
* Suporte da equipe Twenty
|
||||
* Sem necessidade de publicar código personalizado como código aberto antes de distribuir
|
||||
|
||||
@@ -55,6 +55,7 @@ Os recursos premium estão disponíveis apenas nos planos Organização (Nuvem o
|
||||
|
||||
* **Integração SSO**: Single Sign-On com seu provedor de identidade
|
||||
* **Permissões em nível de linha**: controle de acesso granular no nível de registro
|
||||
* **AI usage data**: Track AI consumption across the workspace
|
||||
|
||||
## Mudança de planos
|
||||
|
||||
@@ -77,3 +78,15 @@ Entre em contato com o suporte para fazer downgrade do seu plano.
|
||||
### Mudar para faturamento mensal
|
||||
|
||||
Entre em contato com o suporte para voltar ao faturamento mensal.
|
||||
|
||||
## Obtain an Enterprise Key for Organization (Self-Hosted)
|
||||
|
||||
To use the Organization (Self-Hosted) plan, you need to obtain an Enterprise key:
|
||||
|
||||
1. Go to **Settings → Admin Panel → Enterprise**
|
||||
|
||||
<img src="/images/user-guide/billing/enterprise-key.png" alt="Enterprise key" />
|
||||
|
||||
2. Click **Get Enterprise Key**
|
||||
3. When you are redirected to Stripe, enter your payment details and confirm
|
||||
4. When your Enterprise key is displayed, paste it into the Enterprise settings page and activate the Organization license
|
||||
|
||||
@@ -16,6 +16,11 @@ Se você quiser hospedar por conta própria e precisar dos recursos Premium (SSO
|
||||
Os recursos Premium estão disponíveis apenas nos planos Organization (Cloud ou Self-Hosted):
|
||||
* **Integração de SSO**: Single Sign-On com seu provedor de identidade
|
||||
* **Permissões em nível de linha**: Controle de acesso granular no nível de registro
|
||||
* **AI usage data**: Track AI consumption across the workspace
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Is Organization plan on cloud and Organization plan on self-hosted the same?">
|
||||
They offer the same premium features. However, a cloud subscription cannot be used for self-hosted deployments. Self-hosted requires an Enterprise key.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Você oferece assentos gratuitos para usuários apenas visualizadores?">
|
||||
|
||||
+34
-39
@@ -53,38 +53,45 @@ Primeiro, crie o objeto intermediário que manterá as conexões.
|
||||
1. Vá a **Definições → Modelo de Dados**
|
||||
2. Clique em **+ Novo objeto**
|
||||
3. Dê um nome descritivo (por exemplo, "Atribuição de Projeto", "Membro da Equipe", "Pedido de Produto")
|
||||
4. Clique em **Salvar**
|
||||
4. Toggle "Skip creating a Name field" on
|
||||
|
||||
<img src="/images/user-guide/fields/new-pivot-object.png" alt="New pivot object" />
|
||||
|
||||
5. Clique em **Salvar**
|
||||
|
||||
<Tip>
|
||||
**Convenção de nomenclatura**: Use um nome que descreva a relação, como "Atribuição de Projeto" ou "Participação na Equipe". Isso torna o modelo de dados mais fácil de entender.
|
||||
</Tip>
|
||||
|
||||
## Etapa 2: Criar Relações a partir do Objeto de Junção
|
||||
## Step 2: Create Relations Between Objects and the Junction
|
||||
|
||||
Adicione campos de relação do objeto de junção para ambos os objetos que deseja conectar.
|
||||
Add relation fields from each of your two objects to the junction object.
|
||||
|
||||
### Primeira Relação (Junção → Objeto A)
|
||||
### First Relation (Object A → Junction)
|
||||
|
||||
1. Selecione seu objeto de junção em **Settings → Data Model**
|
||||
2. Clique em **+ Adicionar campo**
|
||||
3. Escolha **Relação** como o tipo de campo
|
||||
4. Selecione o primeiro objeto (por exemplo, "Pessoas")
|
||||
5. Defina o tipo de relação como **Muitos-para-um** (muitas atribuições podem se vincular a uma pessoa)
|
||||
6. Nomeie os campos:
|
||||
* Campo na junção: por exemplo, "Pessoa"
|
||||
* Campo em Pessoas: por exemplo, "Atribuições de Projeto"
|
||||
7. Clique em **Salvar**
|
||||
|
||||
### Segunda Relação (Junção → Objeto B)
|
||||
|
||||
1. Ainda no objeto de junção, clique em **+ Add Field**
|
||||
2. Escolha **Relação** como o tipo de campo
|
||||
3. Selecione o segundo objeto (por exemplo, "Projetos")
|
||||
4. Defina o tipo de relação como **Muitos-para-um**
|
||||
1. Select your first object in **Settings → Data Model**
|
||||
2. Click **+ Add Relation**
|
||||
3. Select the junction object (e.g., "Project Assignments")
|
||||
4. Set the relation type to **One-To-Many** (one person can link to many assignments)
|
||||
5. Nomeie os campos:
|
||||
* Campo em Pessoas: por exemplo, "Atribuições de Projeto"
|
||||
* Campo na junção: por exemplo, "Pessoa"
|
||||
6. Clique em **Salvar**
|
||||
|
||||
### Second Relation (Object B → Junction)
|
||||
|
||||
1. Select your second object in **Settings → Data Model**
|
||||
2. Click **+ Add Relation**
|
||||
3. Select the junction object (e.g., "Project Assignments")
|
||||
4. Set the relation type to **One-To-Many** (one project can link to many assignments)
|
||||
5. Ative **"Esta é uma relação com um objeto de junção"**
|
||||
|
||||
<img src="/images/user-guide/fields/junction-relation-toggle.png" style={{width:'100%'}} />
|
||||
|
||||
6. Nomeie os campos:
|
||||
* Campo na junção: por exemplo, "Projeto"
|
||||
* Campo em Projetos: por exemplo, "Membros da Equipe"
|
||||
6. Clique em **Salvar**
|
||||
7. Clique em **Salvar**
|
||||
|
||||
## Etapa 3: Configurar a Exibição da Relação de Junção
|
||||
|
||||
@@ -98,18 +105,6 @@ Agora configure os objetos de origem para exibir diretamente os registros vincul
|
||||
6. Selecione a **Relação de destino** (por exemplo, "Projeto" — o campo na junção que aponta para o outro lado)
|
||||
7. Clique em **Salvar**
|
||||
|
||||
{/* TODO: Add image
|
||||
<img src="/images/user-guide/fields/junction-relation-toggle.png" style={{width:'100%'}}/>
|
||||
*/}
|
||||
|
||||
Repita para o outro objeto:
|
||||
|
||||
1. Selecione "Projetos" em Data Model
|
||||
2. Edite o campo de relação "Membros da Equipe"
|
||||
3. Ative o alternador de junção
|
||||
4. Selecione "Pessoa" como a relação de destino
|
||||
5. Salvar
|
||||
|
||||
## Resultado
|
||||
|
||||
Após a configuração:
|
||||
@@ -130,15 +125,15 @@ Aqui está um passo a passo completo:
|
||||
|
||||
### Adicionar Relações
|
||||
|
||||
1. **Atribuição de Projeto → Pessoas**
|
||||
* Tipo: Muitos-para-um
|
||||
* Campo em Atribuição: "Pessoa"
|
||||
1. **People → Project Assignment**
|
||||
* Type: One-to-Many
|
||||
* Campo em Pessoas: "Atribuições de Projeto"
|
||||
* Campo em Atribuição: "Pessoa"
|
||||
|
||||
2. **Atribuição de Projeto → Projetos**
|
||||
* Tipo: Muitos-para-um
|
||||
* Campo em Atribuição: "Projeto"
|
||||
2. **Projects → Project Assignment**
|
||||
* Type: One-to-Many
|
||||
* Campo em Projetos: "Membros da Equipe"
|
||||
* Campo em Atribuição: "Projeto"
|
||||
|
||||
### Configurar Exibição de Junção
|
||||
|
||||
|
||||
@@ -30,3 +30,9 @@ Adicione links para ferramentas externas diretamente na barra lateral. Útil par
|
||||
## Menu de Comandos
|
||||
|
||||
Pressione `Cmd+K` (ou `Ctrl+K`) para abrir o menu de comandos — uma barra de pesquisa de acesso rápido para ir a qualquer registro, visualização ou ação sem navegar pela barra lateral.
|
||||
|
||||
## Personalizando a barra lateral
|
||||
|
||||
Para personalizar a barra lateral, passe o cursor sobre a seção "Workspace" na barra lateral e clique no ícone de chave inglesa.
|
||||
|
||||
<img src="/images/user-guide/layout/navigation-edit-icon.png" alt="Navigation edit icon" />
|
||||
|
||||
@@ -3,6 +3,8 @@ title: Páginas de Registos
|
||||
description: Personalize o layout das páginas de detalhe de registos individuais com abas e widgets.
|
||||
---
|
||||
|
||||
## Visão Geral
|
||||
|
||||
Ao abrir um registo no Twenty, a página de detalhe é composta por **abas** e **widgets**. Ambos são totalmente personalizáveis por tipo de objeto.
|
||||
|
||||
## Abas
|
||||
@@ -38,12 +40,20 @@ Os widgets são os componentes básicos dentro de cada aba. Tipos de widget disp
|
||||
|
||||
1. Abra qualquer registro
|
||||
2. Pressione `Cmd+K` e pesquise por "Edit record page layout"
|
||||
|
||||
ou
|
||||
|
||||
1. Go to Settings > Data model > object of your choice > Layout
|
||||
|
||||
2. Click the "Customize record page" button for that object
|
||||
|
||||
3. Agora você está no modo de personalização:
|
||||
* **Adicionar widgets** no seletor de widgets
|
||||
* **Arraste widgets** para reposicioná-los na grade
|
||||
* **Redimensione os widgets** arrastando suas bordas
|
||||
* **Configure campos** exibidos em cada widget
|
||||
* **Gerencie abas** — adicione, remova, renomeie, reordene
|
||||
|
||||
4. Salve suas alterações — elas se aplicam a todos os registros desse tipo de objeto
|
||||
|
||||
## Visibilidade de campos
|
||||
|
||||
@@ -94,15 +94,16 @@ const handler = async (event: RoutePayload) => {
|
||||
|
||||
Тип `RoutePayload` имеет следующую структуру:
|
||||
|
||||
| Свойство | Тип | Описание | Пример |
|
||||
| ---------------------------- | ------------------------------------------------------- | ------------------------------------------------------------------- | -------------------------------------------------------------------------- |
|
||||
| `headers` | `Record\<string, string \| undefined>` | HTTP-заголовки (только перечисленные в `forwardedRequestHeaders`) | см. раздел ниже |
|
||||
| `queryStringParameters` | `Record\<string, string \| undefined>` | Параметры строки запроса (несколько значений объединяются запятыми) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
|
||||
| `pathParameters` | `Record\<string, string \| undefined>` | Параметры пути, извлечённые из шаблона маршрута | `/users/:id`, `/users/123` -> `{ id: '123' }` |
|
||||
| `body` | `object \| null` | Разобранное тело запроса (JSON) | `{ id: 1 }` -> `{ id: 1 }` |
|
||||
| `isBase64Encoded` | `boolean` | Является ли тело закодированным в base64 | |
|
||||
| `requestContext.http.method` | `string` | Метод HTTP (GET, POST, PUT, PATCH, DELETE) | |
|
||||
| `requestContext.http.path` | `string` | Необработанный путь запроса | |
|
||||
| Свойство | Тип | Описание | Пример |
|
||||
| ---------------------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
|
||||
| `headers` | `Record\<string, string \| undefined>` | HTTP-заголовки (только перечисленные в `forwardedRequestHeaders`) | см. раздел ниже |
|
||||
| `queryStringParameters` | `Record\<string, string \| undefined>` | Параметры строки запроса (несколько значений объединяются запятыми) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
|
||||
| `pathParameters` | `Record\<string, string \| undefined>` | Параметры пути, извлечённые из шаблона маршрута | `/users/:id`, `/users/123` -> `{ id: '123' }` |
|
||||
| `body` | `object \| null` | Разобранное тело запроса (JSON) | `{ id: 1 }` -> `{ id: 1 }` |
|
||||
| `rawBody` | `string \| undefined` | Original UTF-8 request body, before JSON parsing. Useful for verifying HMAC-style webhook signatures (e.g. GitHub's `X-Hub-Signature-256`, Stripe). `undefined` when the runtime did not preserve it. | |
|
||||
| `isBase64Encoded` | `boolean` | Является ли тело закодированным в base64 | |
|
||||
| `requestContext.http.method` | `string` | Метод HTTP (GET, POST, PUT, PATCH, DELETE) | |
|
||||
| `requestContext.http.path` | `string` | Необработанный путь запроса | |
|
||||
|
||||
|
||||
#### forwardedRequestHeaders
|
||||
|
||||
@@ -19,7 +19,7 @@ Twenty предлагает гибкие тарифы для команд люб
|
||||
* Стандартная поддержка
|
||||
|
||||
<Note>
|
||||
Премиальные функции (SSO и разрешения на уровне записей) не входят в план Pro.
|
||||
Premium features (SSO, row-level permissions and AI usage data) are not included in the Pro plan.
|
||||
</Note>
|
||||
|
||||
### Организация (облако)
|
||||
@@ -27,7 +27,7 @@ Twenty предлагает гибкие тарифы для команд люб
|
||||
Для крупных команд с расширенными потребностями:
|
||||
|
||||
* Все, что есть в Pro
|
||||
* **Премиальные функции**: интеграция с SSO и разрешения на уровне записей
|
||||
* **Premium features**: SSO integration, row-level permissions and AI usage data
|
||||
* Приоритетная поддержка
|
||||
|
||||
## Планы для самостоятельного размещения
|
||||
@@ -45,7 +45,7 @@ Twenty предлагает гибкие тарифы для команд люб
|
||||
Для команд, которым нужны премиальные функции при самостоятельном размещении:
|
||||
|
||||
* Все возможности Pro
|
||||
* **Премиальные функции**: интеграция с SSO и разрешения на уровне записей
|
||||
* **Premium features**: SSO integration, row-level permissions and AI usage data
|
||||
* Поддержка от команды Twenty
|
||||
* Не требуется публиковать пользовательский код с открытым исходным кодом перед распространением
|
||||
|
||||
@@ -55,6 +55,7 @@ Twenty предлагает гибкие тарифы для команд люб
|
||||
|
||||
* **Интеграция с SSO**: единый вход через вашего поставщика идентификации
|
||||
* **Разрешения на уровне записей**: тонкая настройка управления доступом на уровне записей
|
||||
* **AI usage data**: Track AI consumption across the workspace
|
||||
|
||||
## Переключение планов
|
||||
|
||||
@@ -77,3 +78,15 @@ Twenty предлагает гибкие тарифы для команд люб
|
||||
### Переход на ежемесячную оплату
|
||||
|
||||
Свяжитесь со службой поддержки, чтобы вернуться на ежемесячную оплату.
|
||||
|
||||
## Obtain an Enterprise Key for Organization (Self-Hosted)
|
||||
|
||||
To use the Organization (Self-Hosted) plan, you need to obtain an Enterprise key:
|
||||
|
||||
1. Go to **Settings → Admin Panel → Enterprise**
|
||||
|
||||
<img src="/images/user-guide/billing/enterprise-key.png" alt="Enterprise key" />
|
||||
|
||||
2. Click **Get Enterprise Key**
|
||||
3. When you are redirected to Stripe, enter your payment details and confirm
|
||||
4. When your Enterprise key is displayed, paste it into the Enterprise settings page and activate the Organization license
|
||||
|
||||
@@ -16,6 +16,11 @@ description: Часто задаваемые вопросы о тарифах и
|
||||
Премиум-функции доступны только в планах Organization (облако или Self-Hosted):
|
||||
* **Интеграция с SSO**: единый вход с вашим провайдером идентификации
|
||||
* **Разрешения на уровне записей**: детализированное управление доступом на уровне записей
|
||||
* **AI usage data**: Track AI consumption across the workspace
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Is Organization plan on cloud and Organization plan on self-hosted the same?">
|
||||
They offer the same premium features. However, a cloud subscription cannot be used for self-hosted deployments. Self-hosted requires an Enterprise key.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Предлагаете ли вы бесплатные места для пользователей с правами только просмотра?">
|
||||
@@ -27,7 +32,7 @@ description: Часто задаваемые вопросы о тарифах и
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Где я могу переключить свою подписку на план Pro?">
|
||||
Пожалуйста, свяжитесь с нашей командой напрямую через Поддержку, в данный момент нет простого способа сделать это через пользовательский интерфейс.
|
||||
Пожалуйста, свяжитесь с нашей командой напрямую через раздел «Поддержка», в данный момент нет простого способа сделать это через пользовательский интерфейс.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Где я могу переключить свою подписку на годовой период?">
|
||||
|
||||
+34
-39
@@ -53,38 +53,45 @@ People ←→ Project Assignments ←→ Projects
|
||||
1. Перейдите в **Настройки → Модель данных**
|
||||
2. Нажмите **+ Новый объект**
|
||||
3. Дайте ему понятное имя (например, "Project Assignment", "Team Member", "Product Order")
|
||||
4. Нажмите **Сохранить**
|
||||
4. Toggle "Skip creating a Name field" on
|
||||
|
||||
<img src="/images/user-guide/fields/new-pivot-object.png" alt="New pivot object" />
|
||||
|
||||
5. Нажмите **Сохранить**
|
||||
|
||||
<Tip>
|
||||
**Рекомендации по именованию**: Используйте название, описывающее связь, например "Project Assignment" или "Team Membership". Так модель данных становится более понятной.
|
||||
</Tip>
|
||||
|
||||
## Шаг 2: Создайте связи из объекта-связки
|
||||
## Step 2: Create Relations Between Objects and the Junction
|
||||
|
||||
Добавьте поля связи из объекта-связки к обоим объектам, которые вы хотите соединить.
|
||||
Add relation fields from each of your two objects to the junction object.
|
||||
|
||||
### Первая связь (Объект-связка → Объект A)
|
||||
### First Relation (Object A → Junction)
|
||||
|
||||
1. Выберите ваш объект-связку в **Настройки → Модель данных**
|
||||
2. Нажмите **+ Добавить поле**
|
||||
3. Выберите тип поля **Связь**
|
||||
4. Выберите первый объект (например, "Люди")
|
||||
5. Установите тип связи **Многие-к-одному** (много назначений могут ссылаться на одного человека)
|
||||
6. Назовите поля:
|
||||
* Поле на объекте-связке: например, "Person"
|
||||
* Поле в объекте Люди: например, "Project Assignments"
|
||||
7. Нажмите **Сохранить**
|
||||
|
||||
### Вторая связь (Объект-связка → Объект B)
|
||||
|
||||
1. Оставаясь на объекте-связке, нажмите **+ Добавить поле**
|
||||
2. Выберите тип поля **Связь**
|
||||
3. Выберите второй объект (например, "Проекты")
|
||||
4. Установите тип связи **Многие-к-одному**
|
||||
1. Select your first object in **Settings → Data Model**
|
||||
2. Click **+ Add Relation**
|
||||
3. Select the junction object (e.g., "Project Assignments")
|
||||
4. Set the relation type to **One-To-Many** (one person can link to many assignments)
|
||||
5. Назовите поля:
|
||||
* Поле в объекте Люди: например, "Project Assignments"
|
||||
* Поле на объекте-связке: например, "Person"
|
||||
6. Нажмите **Сохранить**
|
||||
|
||||
### Second Relation (Object B → Junction)
|
||||
|
||||
1. Select your second object in **Settings → Data Model**
|
||||
2. Click **+ Add Relation**
|
||||
3. Select the junction object (e.g., "Project Assignments")
|
||||
4. Set the relation type to **One-To-Many** (one project can link to many assignments)
|
||||
5. Включите **"Это связь с объектом-связкой"**
|
||||
|
||||
<img src="/images/user-guide/fields/junction-relation-toggle.png" style={{width:'100%'}} />
|
||||
|
||||
6. Назовите поля:
|
||||
* Поле на объекте-связке: например, "Project"
|
||||
* Поле в объекте Проекты: например, "Team Members"
|
||||
6. Нажмите **Сохранить**
|
||||
7. Нажмите **Сохранить**
|
||||
|
||||
## Шаг 3: Настройте отображение связи через объект-связку
|
||||
|
||||
@@ -98,18 +105,6 @@ People ←→ Project Assignments ←→ Projects
|
||||
6. Выберите **Целевую связь** (например, "Project" — поле на объекте-связке, указывающее на другую сторону)
|
||||
7. Нажмите **Сохранить**
|
||||
|
||||
{/* TODO: Add image
|
||||
<img src="/images/user-guide/fields/junction-relation-toggle.png" style={{width:'100%'}}/>
|
||||
*/}
|
||||
|
||||
Повторите для другого объекта:
|
||||
|
||||
1. Выберите "Проекты" в Модели данных
|
||||
2. Отредактируйте поле связи "Team Members"
|
||||
3. Включите переключатель объекта-связки
|
||||
4. Выберите "Person" как целевую связь
|
||||
5. Сохранить
|
||||
|
||||
## Результат
|
||||
|
||||
После настройки:
|
||||
@@ -130,15 +125,15 @@ People ←→ Project Assignments ←→ Projects
|
||||
|
||||
### Добавьте связи
|
||||
|
||||
1. **Project Assignment → Люди**
|
||||
* Тип: Многие-к-одному
|
||||
* Поле в объекте Assignment: "Person"
|
||||
1. **People → Project Assignment**
|
||||
* Type: One-to-Many
|
||||
* Поле в объекте Люди: "Project Assignments"
|
||||
* Поле в объекте Assignment: "Person"
|
||||
|
||||
2. **Project Assignment → Проекты**
|
||||
* Тип: Многие-к-одному
|
||||
* Поле в объекте Assignment: "Project"
|
||||
2. **Projects → Project Assignment**
|
||||
* Type: One-to-Many
|
||||
* Поле в объекте Проекты: "Team Members"
|
||||
* Поле в объекте Assignment: "Project"
|
||||
|
||||
### Настройте отображение объекта-связки
|
||||
|
||||
|
||||
@@ -30,3 +30,9 @@ description: Настройте левую боковую панель под т
|
||||
## Меню команд
|
||||
|
||||
Нажмите `Cmd+K` (или `Ctrl+K`), чтобы открыть меню команд — строку быстрого поиска для перехода к любой записи, представлению или действию, не используя боковую панель.
|
||||
|
||||
## Настройка боковой панели
|
||||
|
||||
Чтобы настроить боковую панель, наведите курсор на раздел "Workspace" на боковой панели и нажмите значок гаечного ключа.
|
||||
|
||||
<img src="/images/user-guide/layout/navigation-edit-icon.png" alt="Navigation edit icon" />
|
||||
|
||||
@@ -3,6 +3,8 @@ title: Страницы записей
|
||||
description: Настройте макет отдельных страниц сведений о записях с вкладками и виджетами.
|
||||
---
|
||||
|
||||
## Обзор
|
||||
|
||||
Когда вы открываете запись в Twenty, страница сведений состоит из **вкладок** и **виджетов**. Оба полностью настраиваются для каждого типа объекта.
|
||||
|
||||
## Вкладки
|
||||
@@ -38,12 +40,20 @@ description: Настройте макет отдельных страниц с
|
||||
|
||||
1. Откройте любую запись
|
||||
2. Нажмите `Cmd+K` и найдите "Изменить макет страницы записи"
|
||||
|
||||
или
|
||||
|
||||
1. Go to Settings > Data model > object of your choice > Layout
|
||||
|
||||
2. Click the "Customize record page" button for that object
|
||||
|
||||
3. Теперь вы в режиме настройки:
|
||||
* **Добавляйте виджеты** из списка виджетов
|
||||
* **Перетаскивайте виджеты**, чтобы изменить их положение на сетке
|
||||
* **Изменяйте размер виджетов**, перетаскивая их границы
|
||||
* **Настраивайте поля**, отображаемые в каждом виджете
|
||||
* **Управляйте вкладками** — добавляйте, удаляйте, переименовывайте, меняйте порядок
|
||||
|
||||
4. Сохраните изменения — они применятся ко всем записям этого типа объекта
|
||||
|
||||
## Видимость полей
|
||||
|
||||
@@ -95,15 +95,16 @@ const handler = async (event: RoutePayload) => {
|
||||
|
||||
`RoutePayload` türünün yapısı şu şekildedir:
|
||||
|
||||
| Özellik | Tür | Açıklama | Örnek |
|
||||
| ---------------------------- | ------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
|
||||
| `headers` | `Record\<string, string \| undefined>` | HTTP başlıkları (`forwardedRequestHeaders` içinde listelenenlerle sınırlı) | aşağıdaki bölüme bakın |
|
||||
| `queryStringParameters` | `Record\<string, string \| undefined>` | Sorgu dizesi parametreleri (birden çok değer virgülle birleştirilir) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
|
||||
| `pathParameters` | `Record\<string, string \| undefined>` | Rota deseninden çıkarılan yol parametreleri | `/users/:id`, `/users/123` -> `{ id: '123' }` |
|
||||
| `body` | `object \| null` | Ayrıştırılmış istek gövdesi (JSON) | `{ id: 1 }` -> `{ id: 1 }` |
|
||||
| `isBase64Encoded` | `boolean` | Gövdenin base64 ile kodlanıp kodlanmadığı | |
|
||||
| `requestContext.http.method` | `string` | HTTP yöntemi (GET, POST, PUT, PATCH, DELETE) | |
|
||||
| `requestContext.http.path` | `string` | Ham istek yolu | |
|
||||
| Özellik | Tür | Açıklama | Örnek |
|
||||
| ---------------------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
|
||||
| `headers` | `Record\<string, string \| undefined>` | HTTP başlıkları (`forwardedRequestHeaders` içinde listelenenlerle sınırlı) | aşağıdaki bölüme bakın |
|
||||
| `queryStringParameters` | `Record\<string, string \| undefined>` | Sorgu dizesi parametreleri (birden çok değer virgülle birleştirilir) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
|
||||
| `pathParameters` | `Record\<string, string \| undefined>` | Rota deseninden çıkarılan yol parametreleri | `/users/:id`, `/users/123` -> `{ id: '123' }` |
|
||||
| `body` | `object \| null` | Ayrıştırılmış istek gövdesi (JSON) | `{ id: 1 }` -> `{ id: 1 }` |
|
||||
| `rawBody` | `string \| undefined` | Original UTF-8 request body, before JSON parsing. Useful for verifying HMAC-style webhook signatures (e.g. GitHub's `X-Hub-Signature-256`, Stripe). `undefined` when the runtime did not preserve it. | |
|
||||
| `isBase64Encoded` | `boolean` | Gövdenin base64 ile kodlanıp kodlanmadığı | |
|
||||
| `requestContext.http.method` | `string` | HTTP yöntemi (GET, POST, PUT, PATCH, DELETE) | |
|
||||
| `requestContext.http.path` | `string` | Ham istek yolu | |
|
||||
|
||||
|
||||
#### forwardedRequestHeaders
|
||||
|
||||
@@ -19,7 +19,7 @@ Büyümeye hazır ekipler için:
|
||||
* Standart destek
|
||||
|
||||
<Note>
|
||||
Premium özellikler (SSO ve satır düzeyi izinler) Pro planına dahil değildir.
|
||||
Premium features (SSO, row-level permissions and AI usage data) are not included in the Pro plan.
|
||||
</Note>
|
||||
|
||||
### Kuruluş (Bulut)
|
||||
@@ -27,7 +27,7 @@ Premium özellikler (SSO ve satır düzeyi izinler) Pro planına dahil değildir
|
||||
Gelişmiş ihtiyaçları olan daha büyük ekipler için:
|
||||
|
||||
* Pro'daki her şey
|
||||
* **Premium özellikler**: SSO entegrasyonu ve satır düzeyi izinler
|
||||
* **Premium features**: SSO integration, row-level permissions and AI usage data
|
||||
* Öncelikli destek
|
||||
|
||||
## Kendi Kendine Barındırılan Planlar
|
||||
@@ -45,7 +45,7 @@ Twenty'yi kendi altyapınızda hiçbir ücret ödemeden barındırın:
|
||||
Kendi kendine barındırma yaparken premium özelliklere ihtiyaç duyan ekipler için:
|
||||
|
||||
* Tüm Pro özellikleri
|
||||
* **Premium özellikler**: SSO entegrasyonu ve satır düzeyi izinler
|
||||
* **Premium features**: SSO integration, row-level permissions and AI usage data
|
||||
* Twenty ekibinden destek
|
||||
* Dağıtmadan önce özel kodu açık kaynak olarak yayınlama zorunluluğu yoktur.
|
||||
|
||||
@@ -55,6 +55,7 @@ Premium özellikler yalnızca Kuruluş planlarında (Bulut veya Kendi Kendine Ba
|
||||
|
||||
* **SSO entegrasyonu**: Kimlik sağlayıcınızla Tek Oturum Açma
|
||||
* **Satır düzeyi izinler**: Kayıt düzeyinde ayrıntılı erişim denetimi
|
||||
* **AI usage data**: Track AI consumption across the workspace
|
||||
|
||||
## Planlar Arasında Geçiş
|
||||
|
||||
@@ -77,3 +78,15 @@ Planınızı düşürmek için destek ekibiyle iletişime geçin.
|
||||
### Aylığa Geçiş Yap
|
||||
|
||||
Aylık faturalamaya geri dönmek için destek ekibiyle iletişime geçin.
|
||||
|
||||
## Obtain an Enterprise Key for Organization (Self-Hosted)
|
||||
|
||||
To use the Organization (Self-Hosted) plan, you need to obtain an Enterprise key:
|
||||
|
||||
1. Go to **Settings → Admin Panel → Enterprise**
|
||||
|
||||
<img src="/images/user-guide/billing/enterprise-key.png" alt="Enterprise key" />
|
||||
|
||||
2. Click **Get Enterprise Key**
|
||||
3. When you are redirected to Stripe, enter your payment details and confirm
|
||||
4. When your Enterprise key is displayed, paste it into the Enterprise settings page and activate the Organization license
|
||||
|
||||
@@ -16,6 +16,11 @@ Kendiniz barındırmak istiyor ve Premium özelliklere (SSO ve satır düzeyi iz
|
||||
Premium özellikler yalnızca Kuruluş planlarında (Bulut veya Kendi Barındırmalı) kullanılabilir:
|
||||
* **SSO entegrasyonu**: Kimlik sağlayıcınızla Tek Oturum Açma
|
||||
* **Satır düzeyi izinler**: Kayıt düzeyinde ayrıntılı erişim denetimi
|
||||
* **AI usage data**: Track AI consumption across the workspace
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Is Organization plan on cloud and Organization plan on self-hosted the same?">
|
||||
They offer the same premium features. However, a cloud subscription cannot be used for self-hosted deployments. Self-hosted requires an Enterprise key.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Salt görüntüleme kullanıcıları için ücretsiz koltuklar sunuyor musunuz?">
|
||||
|
||||
+34
-39
@@ -53,38 +53,45 @@ Bağlantı ilişkisi anahtarını etkinleştirdiğinizde, Twenty aradaki bağlan
|
||||
1. **Ayarlar → Veri Modeli** bölümüne gidin
|
||||
2. **+ Yeni nesne**'ye tıklayın
|
||||
3. Açıklayıcı bir ad verin (örn. "Project Assignment", "Team Member", "Product Order")
|
||||
4. **Kaydet**'e tıklayın
|
||||
4. Toggle "Skip creating a Name field" on
|
||||
|
||||
<img src="/images/user-guide/fields/new-pivot-object.png" alt="New pivot object" />
|
||||
|
||||
5. **Kaydet**'e tıklayın
|
||||
|
||||
<Tip>
|
||||
**Adlandırma kuralı**: "Project Assignment" veya "Team Membership" gibi ilişkiyi tanımlayan bir ad kullanın. Bu, veri modelinin anlaşılmasını kolaylaştırır.
|
||||
</Tip>
|
||||
|
||||
## Adım 2: Bağlantı Nesnesinden İlişkiler Oluşturun
|
||||
## Step 2: Create Relations Between Objects and the Junction
|
||||
|
||||
Bağlamak istediğiniz her iki nesneye de bağlantı nesnesinden ilişki alanları ekleyin.
|
||||
Add relation fields from each of your two objects to the junction object.
|
||||
|
||||
### İlk İlişki (Bağlantı → Nesne A)
|
||||
### First Relation (Object A → Junction)
|
||||
|
||||
1. **Ayarlar → Veri Modeli**'nde bağlantı nesnenizi seçin
|
||||
2. **+ Alan Ekle**'ye tıklayın
|
||||
3. Alan türü olarak **İlişki**'yi seçin
|
||||
4. İlk nesneyi seçin (örn. "People")
|
||||
5. İlişki türünü **Çoktan-Bire** olarak ayarlayın (birçok atama bir kişiye bağlanabilir)
|
||||
6. Alanları adlandırın:
|
||||
* Bağlantı üzerindeki alan: örn. "Person"
|
||||
* People üzerindeki alan: örn. "Project Assignments"
|
||||
7. **Kaydet**'e tıklayın
|
||||
|
||||
### İkinci İlişki (Bağlantı → Nesne B)
|
||||
|
||||
1. Hâlâ bağlantı nesnesindeyken, **+ Add Field**'e tıklayın
|
||||
2. Alan türü olarak **İlişki**'yi seçin
|
||||
3. İkinci nesneyi seçin (örn. "Projects")
|
||||
4. İlişki türünü **Çoktan-Bire** olarak ayarlayın
|
||||
1. Select your first object in **Settings → Data Model**
|
||||
2. Click **+ Add Relation**
|
||||
3. Select the junction object (e.g., "Project Assignments")
|
||||
4. Set the relation type to **One-To-Many** (one person can link to many assignments)
|
||||
5. Alanları adlandırın:
|
||||
* People üzerindeki alan: örn. "Project Assignments"
|
||||
* Bağlantı üzerindeki alan: örn. "Person"
|
||||
6. **Kaydet**'e tıklayın
|
||||
|
||||
### Second Relation (Object B → Junction)
|
||||
|
||||
1. Select your second object in **Settings → Data Model**
|
||||
2. Click **+ Add Relation**
|
||||
3. Select the junction object (e.g., "Project Assignments")
|
||||
4. Set the relation type to **One-To-Many** (one project can link to many assignments)
|
||||
5. **"Bu, bir bağlantı nesnesine kurulan bir ilişkidir"** seçeneğini etkinleştirin
|
||||
|
||||
<img src="/images/user-guide/fields/junction-relation-toggle.png" style={{width:'100%'}} />
|
||||
|
||||
6. Alanları adlandırın:
|
||||
* Bağlantı üzerindeki alan: örn. "Project"
|
||||
* Projects üzerindeki alan: örn. "Team Members"
|
||||
6. **Kaydet**'e tıklayın
|
||||
7. **Kaydet**'e tıklayın
|
||||
|
||||
## Adım 3: Bağlantı İlişkisi Görüntüsünü Yapılandırın
|
||||
|
||||
@@ -98,18 +105,6 @@ Bağlamak istediğiniz her iki nesneye de bağlantı nesnesinden ilişki alanlar
|
||||
6. **Hedef ilişki**yi seçin (örn. "Project" — bağlantı üzerindeki, diğer tarafı işaret eden alan)
|
||||
7. **Kaydet**'e tıklayın
|
||||
|
||||
{/* TODO: Add image
|
||||
<img src="/images/user-guide/fields/junction-relation-toggle.png" style={{width:'100%'}}/>
|
||||
*/}
|
||||
|
||||
Diğer nesne için tekrarlayın:
|
||||
|
||||
1. Veri Modeli'nde "Projects"i seçin
|
||||
2. "Team Members" ilişki alanını düzenleyin
|
||||
3. Bağlantı anahtarını etkinleştirin
|
||||
4. Hedef ilişki olarak "Person"ı seçin
|
||||
5. Kaydet
|
||||
|
||||
## Sonuç
|
||||
|
||||
Yapılandırmadan sonra:
|
||||
@@ -130,15 +125,15 @@ Bağlantı nesnesi hâlâ mevcuttur ve bağlantıları saklar, ancak kullanıcı
|
||||
|
||||
### İlişkiler Ekleyin
|
||||
|
||||
1. **Project Assignment → People**
|
||||
* Tür: Çoktan-Bire
|
||||
* Assignment üzerindeki alan: "Person"
|
||||
1. **People → Project Assignment**
|
||||
* Type: One-to-Many
|
||||
* People üzerindeki alan: "Project Assignments"
|
||||
* Assignment üzerindeki alan: "Person"
|
||||
|
||||
2. **Project Assignment → Projects**
|
||||
* Tür: Çoktan-Bire
|
||||
* Assignment üzerindeki alan: "Project"
|
||||
2. **Projects → Project Assignment**
|
||||
* Type: One-to-Many
|
||||
* Projects üzerindeki alan: "Team Members"
|
||||
* Assignment üzerindeki alan: "Project"
|
||||
|
||||
### Bağlantı Görüntüsünü Yapılandırın
|
||||
|
||||
|
||||
@@ -30,3 +30,9 @@ Harici araçlara yönelik bağlantıları doğrudan kenar çubuğuna ekleyin. Wi
|
||||
## Komut Menüsü
|
||||
|
||||
Komut menüsünü açmak için `Cmd+K` (veya `Ctrl+K`) tuşlarına basın — kenar çubuğunda gezinmeden herhangi bir kayda, görünüme veya eyleme atlamak için hızlı erişim sunan bir arama çubuğu.
|
||||
|
||||
## Kenar Çubuğunu Özelleştirme
|
||||
|
||||
Kenar çubuğunu özelleştirmek için kenar çubuğundaki "Workspace" bölümünün üzerine gelin ve anahtar simgesine tıklayın.
|
||||
|
||||
<img src="/images/user-guide/layout/navigation-edit-icon.png" alt="Navigation edit icon" />
|
||||
|
||||
@@ -3,6 +3,8 @@ title: Kayıt Sayfaları
|
||||
description: Her bir kayıt ayrıntı sayfasının düzenini sekmeler ve widget'larla özelleştirin.
|
||||
---
|
||||
|
||||
## Genel Bakış
|
||||
|
||||
Twenty'de bir kaydı açtığınızda, ayrıntı sayfası **sekmeler** ve **widget'lar** içerir. Her ikisi de her nesne türü bazında tamamen özelleştirilebilir.
|
||||
|
||||
## Sekmeler
|
||||
@@ -38,12 +40,20 @@ Widget'lar, her sekmenin içindeki yapı taşlarıdır. Kullanılabilir widget t
|
||||
|
||||
1. Herhangi bir kaydı açın
|
||||
2. `Cmd+K` tuşlarına basın ve "Kayıt sayfası yerleşimini düzenle" ifadesini arayın
|
||||
|
||||
veya
|
||||
|
||||
1. Go to Settings > Data model > object of your choice > Layout
|
||||
|
||||
2. Click the "Customize record page" button for that object
|
||||
|
||||
3. Artık özelleştirme modundasınız:
|
||||
* **Widget ekleyin** widget seçicisinden
|
||||
* **Widget'ları sürükleyin** ve ızgara üzerinde yeniden konumlandırın
|
||||
* **Widget'ları yeniden boyutlandırın** kenarlarını sürükleyerek
|
||||
* **Alanları yapılandırın** — her bir widget içinde gösterilen
|
||||
* **Sekmeleri yönetin** — ekleyin, kaldırın, yeniden adlandırın, yeniden sıralayın
|
||||
|
||||
4. Değişikliklerinizi kaydedin — bu değişiklikler o nesne türündeki tüm kayıtlara uygulanır
|
||||
|
||||
## Alan görünürlüğü
|
||||
|
||||
@@ -95,15 +95,16 @@ const handler = async (event: RoutePayload) => {
|
||||
|
||||
`RoutePayload` 类型具有以下结构:
|
||||
|
||||
| 属性 | 类型 | 描述 | 示例 |
|
||||
| ---------------------------- | ------------------------------------------------------- | --------------------------------------------- | -------------------------------------------------------------------------- |
|
||||
| `headers` | `Record\<string, string \| undefined>` | HTTP 请求头(仅限 `forwardedRequestHeaders` 中列出的那些) | 见下文 |
|
||||
| `queryStringParameters` | `Record\<string, string \| undefined>` | 查询字符串参数(多个值以逗号连接) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
|
||||
| `pathParameters` | `Record\<string, string \| undefined>` | 从路由模式中提取的路径参数 | `/users/:id`,`/users/123` -> `{ id: '123' }` |
|
||||
| `body` | `object \| null` | 已解析的请求体(JSON) | `{ id: 1 }` -> `{ id: 1 }` |
|
||||
| `isBase64Encoded` | `boolean` | 请求体是否为 base64 编码 | |
|
||||
| `requestContext.http.method` | `string` | HTTP 方法(GET、POST、PUT、PATCH、DELETE) | |
|
||||
| `requestContext.http.path` | `string` | 原始请求路径 | |
|
||||
| 属性 | 类型 | 描述 | 示例 |
|
||||
| ---------------------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
|
||||
| `headers` | `Record\<string, string \| undefined>` | HTTP 请求头(仅限 `forwardedRequestHeaders` 中列出的那些) | 见下文 |
|
||||
| `queryStringParameters` | `Record\<string, string \| undefined>` | 查询字符串参数(多个值以逗号连接) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
|
||||
| `pathParameters` | `Record\<string, string \| undefined>` | 从路由模式中提取的路径参数 | `/users/:id`,`/users/123` -> `{ id: '123' }` |
|
||||
| `body` | `object \| null` | 已解析的请求体(JSON) | `{ id: 1 }` -> `{ id: 1 }` |
|
||||
| `rawBody` | `string \| undefined` | Original UTF-8 request body, before JSON parsing. Useful for verifying HMAC-style webhook signatures (e.g. GitHub's `X-Hub-Signature-256`, Stripe). `undefined` when the runtime did not preserve it. | |
|
||||
| `isBase64Encoded` | `boolean` | 请求体是否为 base64 编码 | |
|
||||
| `requestContext.http.method` | `string` | HTTP 方法(GET、POST、PUT、PATCH、DELETE) | |
|
||||
| `requestContext.http.path` | `string` | 原始请求路径 | |
|
||||
|
||||
|
||||
#### forwardedRequestHeaders
|
||||
|
||||
@@ -19,7 +19,7 @@ description: 了解 Twenty 的定价方案以及如何在它们之间切换。
|
||||
* 标准支持
|
||||
|
||||
<Note>
|
||||
Pro 计划不包含高级功能(SSO 和行级权限)。
|
||||
Premium features (SSO, row-level permissions and AI usage data) are not included in the Pro plan.
|
||||
</Note>
|
||||
|
||||
### 组织计划(云端)
|
||||
@@ -27,7 +27,7 @@ Pro 计划不包含高级功能(SSO 和行级权限)。
|
||||
适用于具有高级需求的大型团队:
|
||||
|
||||
* 包含 Pro 的全部内容
|
||||
* **高级功能**:SSO 集成和行级权限
|
||||
* **Premium features**: SSO integration, row-level permissions and AI usage data
|
||||
* 优先支持
|
||||
|
||||
## 自托管方案
|
||||
@@ -45,7 +45,7 @@ Pro 计划不包含高级功能(SSO 和行级权限)。
|
||||
适用于在自托管同时需要高级功能的团队:
|
||||
|
||||
* 所有 Pro 功能
|
||||
* **高级功能**:SSO 集成和行级权限
|
||||
* **Premium features**: SSO integration, row-level permissions and AI usage data
|
||||
* Twenty 团队支持
|
||||
* 分发前无需将自定义代码开源
|
||||
|
||||
@@ -55,6 +55,7 @@ Pro 计划不包含高级功能(SSO 和行级权限)。
|
||||
|
||||
* **SSO 集成**:与您的身份提供商进行单点登录
|
||||
* **行级权限**:在记录级别进行细粒度访问控制
|
||||
* **AI usage data**: Track AI consumption across the workspace
|
||||
|
||||
## 切换计划
|
||||
|
||||
@@ -77,3 +78,15 @@ Pro 计划不包含高级功能(SSO 和行级权限)。
|
||||
### 切换为按月计费
|
||||
|
||||
联系支持以切换回按月计费。
|
||||
|
||||
## Obtain an Enterprise Key for Organization (Self-Hosted)
|
||||
|
||||
To use the Organization (Self-Hosted) plan, you need to obtain an Enterprise key:
|
||||
|
||||
1. Go to **Settings → Admin Panel → Enterprise**
|
||||
|
||||
<img src="/images/user-guide/billing/enterprise-key.png" alt="Enterprise key" />
|
||||
|
||||
2. Click **Get Enterprise Key**
|
||||
3. When you are redirected to Stripe, enter your payment details and confirm
|
||||
4. When your Enterprise key is displayed, paste it into the Enterprise settings page and activate the Organization license
|
||||
|
||||
@@ -16,6 +16,11 @@ description: 关于 Twenty 定价和账单的常见问题。
|
||||
高级功能仅适用于 Organization 计划(云端或自托管):
|
||||
* **SSO 集成**:与您的身份提供商进行单点登录
|
||||
* **行级权限**:在记录级别进行细粒度的访问控制
|
||||
* **AI usage data**: Track AI consumption across the workspace
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Is Organization plan on cloud and Organization plan on self-hosted the same?">
|
||||
They offer the same premium features. However, a cloud subscription cannot be used for self-hosted deployments. Self-hosted requires an Enterprise key.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="你们是否为只读用户提供免费席位?">
|
||||
|
||||
+34
-39
@@ -53,38 +53,45 @@ People ←→ Project Assignments ←→ Projects
|
||||
1. 进入 **设置 → 数据模型**
|
||||
2. 点击 **+ 新建对象**
|
||||
3. 使用描述性名称(例如,"Project Assignment"、"Team Member"、"Product Order")
|
||||
4. 单击 **保存**
|
||||
4. Toggle "Skip creating a Name field" on
|
||||
|
||||
<img src="/images/user-guide/fields/new-pivot-object.png" alt="New pivot object" />
|
||||
|
||||
5. 单击 **保存**
|
||||
|
||||
<Tip>
|
||||
**命名约定**:使用能描述关系的名称,例如 "Project Assignment" 或 "Team Membership"。 这会让数据模型更易理解。
|
||||
</Tip>
|
||||
|
||||
## 步骤 2:从连接对象创建关系
|
||||
## Step 2: Create Relations Between Objects and the Junction
|
||||
|
||||
从连接对象向您要连接的两个对象添加关系字段。
|
||||
Add relation fields from each of your two objects to the junction object.
|
||||
|
||||
### 第一条关系(连接对象 → 对象 A)
|
||||
### First Relation (Object A → Junction)
|
||||
|
||||
1. 在 **Settings → Data Model** 中选择您的连接对象
|
||||
2. 点击 **+ 添加字段**
|
||||
3. 将字段类型选择为 **Relation**
|
||||
4. 选择第一个对象(例如,"People")
|
||||
5. 将关系类型设置为 **Many-to-One**(多个分配可关联到一个人)
|
||||
6. 为这些字段命名:
|
||||
* 连接对象上的字段:例如,"Person"
|
||||
* People 上的字段:例如,"Project Assignments"
|
||||
7. 单击 **保存**
|
||||
|
||||
### 第二条关系(连接对象 → 对象 B)
|
||||
|
||||
1. 仍在连接对象中,点击 **+ Add Field**
|
||||
2. 将字段类型选择为 **Relation**
|
||||
3. 选择第二个对象(例如,"Projects")
|
||||
4. 将关系类型设置为 **Many-to-One**
|
||||
1. Select your first object in **Settings → Data Model**
|
||||
2. Click **+ Add Relation**
|
||||
3. Select the junction object (e.g., "Project Assignments")
|
||||
4. Set the relation type to **One-To-Many** (one person can link to many assignments)
|
||||
5. 为这些字段命名:
|
||||
* People 上的字段:例如,"Project Assignments"
|
||||
* 连接对象上的字段:例如,"Person"
|
||||
6. 单击 **保存**
|
||||
|
||||
### Second Relation (Object B → Junction)
|
||||
|
||||
1. Select your second object in **Settings → Data Model**
|
||||
2. Click **+ Add Relation**
|
||||
3. Select the junction object (e.g., "Project Assignments")
|
||||
4. Set the relation type to **One-To-Many** (one project can link to many assignments)
|
||||
5. 启用 **"This is a relation to a Junction Object"**
|
||||
|
||||
<img src="/images/user-guide/fields/junction-relation-toggle.png" style={{width:'100%'}} />
|
||||
|
||||
6. 为这些字段命名:
|
||||
* 连接对象上的字段:例如,"Project"
|
||||
* Projects 上的字段:例如,"Team Members"
|
||||
6. 单击 **保存**
|
||||
7. 单击 **保存**
|
||||
|
||||
## 步骤 3:配置连接关系的显示方式
|
||||
|
||||
@@ -98,18 +105,6 @@ People ←→ Project Assignments ←→ Projects
|
||||
6. 选择 **Target relation**(例如,"Project" —— 连接对象上指向另一侧的字段)
|
||||
7. 单击 **保存**
|
||||
|
||||
{/* TODO: Add image
|
||||
<img src="/images/user-guide/fields/junction-relation-toggle.png" style={{width:'100%'}}/>
|
||||
*/}
|
||||
|
||||
对另一侧对象重复上述操作:
|
||||
|
||||
1. 在 Data Model 中选择 "Projects"
|
||||
2. 编辑 "Team Members" 关系字段
|
||||
3. 启用连接关系开关
|
||||
4. 将目标关系选择为 "Person"
|
||||
5. 保存
|
||||
|
||||
## 结果
|
||||
|
||||
配置完成后:
|
||||
@@ -130,15 +125,15 @@ People ←→ Project Assignments ←→ Projects
|
||||
|
||||
### 添加关系
|
||||
|
||||
1. **Project Assignment → People**
|
||||
* 类型:Many-to-One
|
||||
* Assignment 上的字段:"Person"
|
||||
1. **People → Project Assignment**
|
||||
* Type: One-to-Many
|
||||
* People 上的字段:"Project Assignments"
|
||||
* Assignment 上的字段:"Person"
|
||||
|
||||
2. **Project Assignment → Projects**
|
||||
* 类型:Many-to-One
|
||||
* Assignment 上的字段:"Project"
|
||||
2. **Projects → Project Assignment**
|
||||
* Type: One-to-Many
|
||||
* Projects 上的字段:"Team Members"
|
||||
* Assignment 上的字段:"Project"
|
||||
|
||||
### 配置连接关系显示
|
||||
|
||||
|
||||
@@ -30,3 +30,9 @@ description: 自定义左侧边栏,使其符合您团队的工作方式。
|
||||
## 命令菜单
|
||||
|
||||
按下`Cmd+K`(或`Ctrl+K`)打开命令菜单——一个快速访问的搜索栏,无需通过侧边栏即可跳转到任何记录、视图或操作。
|
||||
|
||||
## 自定义侧边栏
|
||||
|
||||
要自定义侧边栏,请将鼠标悬停在侧边栏中的"工作区"部分,然后单击扳手图标。
|
||||
|
||||
<img src="/images/user-guide/layout/navigation-edit-icon.png" alt="Navigation edit icon" />
|
||||
|
||||
@@ -3,6 +3,8 @@ title: 记录页面
|
||||
description: 使用选项卡和小部件自定义单个记录详情页的布局。
|
||||
---
|
||||
|
||||
## 概览
|
||||
|
||||
当你在 Twenty 中打开一条记录时,详情页由**选项卡**和**小部件**组成。 两者都可按对象类型完全自定义。
|
||||
|
||||
## 选项卡
|
||||
@@ -38,12 +40,20 @@ description: 使用选项卡和小部件自定义单个记录详情页的布局
|
||||
|
||||
1. 打开任意记录
|
||||
2. 按下 `Cmd+K`,搜索“编辑记录页面布局”
|
||||
|
||||
或
|
||||
|
||||
1. Go to Settings > Data model > object of your choice > Layout
|
||||
|
||||
2. Click the "Customize record page" button for that object
|
||||
|
||||
3. 你现在处于自定义模式:
|
||||
* 从小部件选择器中**添加小部件**
|
||||
* **拖动小部件**,在网格上重新定位它们
|
||||
* **调整小部件大小**,通过拖动其边缘
|
||||
* **配置字段**,设置每个小部件内显示的字段
|
||||
* **管理选项卡** — 添加、删除、重命名、重新排序
|
||||
|
||||
4. 保存你的更改—它们将应用于该对象类型的所有记录
|
||||
|
||||
## 字段可见性
|
||||
|
||||
Reference in New Issue
Block a user