snapshot of https://github.com/twentyhq/twenty.git (main, 2026-09-17; blobs > 131072B omitted)
Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 2s

This commit is contained in:
upstream-mirror
2026-09-17 23:28:13 +05:00
commit e7da97194a
32688 changed files with 4208681 additions and 0 deletions

View File

@@ -0,0 +1,122 @@
---
title: Câmpuri
description: Înțelegeți rolul câmpurilor și cum să le gestionați.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## Despre câmpuri
Câmpurile sunt ca coloanele dintr-o foaie de calcul. Ele stochează diferite tipuri de date, cum ar fi text, numere sau date calendaristice. Câmpurile pot fi standard (încorporate) sau personalizate (cele pe care le creați).
### Câmpuri standard
Câmpurile standard vin încorporate în Twenty pentru a acoperi nevoile de afaceri uzuale.
De exemplu, `Prenume` și `Nume de familie` sunt câmpuri standard în obiectul `Persoane`. Ele stochează date text pentru numele individuale.
Nu puteți șterge câmpurile standard, dar le puteți dezactiva dacă nu aveți nevoie de ele.
De asemenea, puteți personaliza opțiunile câmpurilor standard de tip `SELECT`, de exemplu opțiunile pentru `Etapa` la Oportunități.
<img src="/images/user-guide/fields/standard-fields.png" style={{width:'100%'}} />
### Câmpuri personalizate
Câmpurile personalizate pot fi adăugate la orice obiect. Puteți stoca text, numere, date, selecții din liste derulante și altele. Folosind câmpuri personalizate puteți urmări informații specifice afacerii dumneavoastră.
De exemplu, un câmp personalizat pentru SpaceX ar putea fi `Starea de funcționare a rachetei`, indicând dacă o rachetă este operațională.
<img src="/images/user-guide/fields/custom-fields.png" style={{width:'100%'}} />
## Tipuri de câmp
Twenty acceptă diverse tipuri de câmp:
| Tip | Descriere | Exemplu |
| ----------------- | ---------------------------------------------------------- | -------------------------- |
| Adresă | Adresă structurată cu stradă, oraș, stat, țară, cod poștal | Adresă de birou |
| Array | Listă de valori text | Etichete |
| Boolean | Casetă de bifare adevărat/fals | Este activ |
| Monedă | Valoare monetară cu codul monedei | Valoarea tranzacției (USD) |
| Dată | Valori de tip dată | Data închiderii |
| Dată și oră | Dată cu oră | Ora întâlnirii |
| Domeniu | Domeniu de site web (utilizat pentru Companii) | acme.com |
| Email | Adrese de e-mail (cu principală + suplimentare) | E-mailul contactului |
| JSON | Date JSON structurate | Metadate personalizate |
| Linkuri | URL-uri cu etichete (primară + secundară) | Site web, LinkedIn |
| Text lung | Text pe mai multe rânduri | Descriere, Note |
| Selecție multiplă | Alegeri multiple dintr-o listă predefinită | Etichete, Categorii |
| Număr | Valori numerice (întregi sau zecimale) | Cantitate, Scor |
| Telefon | Numere de telefon cu codul țării | Telefon de serviciu |
| Evaluare | Evaluare cu stele (1-5) | Prioritate, Scor |
| Relație | Legături către înregistrări din alte obiecte | Companie → Persoane |
| Select | O singură alegere dintr-o listă predefinită | Etapă, Stare |
| Text | O singură linie de text | Nume, Titlu |
## Creați un câmp personalizat
Pentru a adăuga un câmp personalizat la orice obiect, urmați acești pași:
1. Accesați `Setări` din bara laterală stângă.
2. Accesați `Model de date`, apoi selectați obiectul pe care doriți să îl personalizați.
3. Continuați prin a face clic pe `+ Câmp nou`.
4. Alegeți un nume și un tip de câmp care se potrivesc cerințelor dumneavoastră. Luați în considerare adăugarea unei descrieri a câmpului pentru o înțelegere mai bună.
Noul câmp creat de dumneavoastră este acum disponibil în cadrul câmpurilor aplicației. Pentru a-l afișa într-o vizualizare specifică, faceți clic pe meniul de opțiuni, apoi selectați `Câmpuri`.
<VimeoEmbed videoId="927628219" title="Demonstrație video" />
**Cale rapidă:** Faceți clic pe butonul **+** în colțul dreapta sus al oricărui tabel de obiecte, apoi selectați `Personalizați câmpurile`. Aceasta vă duce direct la setările Modelului de Date.
<img src="/images/user-guide/fields/quick-new-field.png" style={{width:'100%'}} />
## Dezactivați un câmp
Puteți dezactiva un câmp pentru a-l ascunde din aplicație fără a pierde datele. Gândiți-vă la aceasta ca la ascunderea câmpului, nu la ștergerea lui.
Iată cum puteți face acest lucru:
1. Găsiți câmpul pe care doriți să-l dezactivați în setările obiectului dumneavoastră.
2. Faceți clic pe cele trei puncte `⋮` de lângă câmp pentru a deschide meniul.
3. Selectați `Dezactivează` din lista derulantă.
<img src="/images/user-guide/fields/deactivate-field.png" style={{width:'100%'}} />
Ce se întâmplă când dezactivați un câmp?
1. **În aplicație:** Câmpul dispare și nu se pot adăuga valori noi la acesta.
2. **Relații existente:** Dacă este un câmp de relație, conexiunile existente rămân, dar nu se pot crea noi.
3. **Acces API:** Încă puteți accesa câmpul și datele sale prin API.
Puteți reactiva câmpuri standard și personalizate sau aveți opțiunea de a le șterge permanent.
## Faceți câmpurile unice
Faceți un câmp unic pentru a vă asigura că înregistrările distincte nu pot avea aceeași valoare. De exemplu, adresele de e-mail sunt unice pentru fiecare persoană.
Dacă primiți o eroare când setați unicitatea, verificați prezența valorilor duplicate în datele dumneavoastră (inclusiv în cele șterse).
## Indexuri (Avansat)
Indexurile bazei de date sunt gestionate automat — adăugarea unor indexuri proprii este rareori necesară și se greșește ușor. Cu modul Avansat activat, fiecare obiect are o secțiune **Indexuri** sub `Settings → Data Model → <object>` pentru cazurile în care știi că ai nevoie de unul.
## Cele mai bune practici pentru configurarea câmpurilor
### Convenții de denumire și limitări
* **Numele singular și plural trebuie să fie distincte**: GraphQL API are nevoie de nume distincte pentru mutații
* **Nume de câmpuri protejate**: unele nume sunt rezervate pentru uzul sistemului (de ex., `Tip`, `Aplicație`)
### Câmpuri valută și telefon
* **Valută implicită**: poate fi configurată prin modelul de date
* **Coduri de țară implicite**: pot fi configurate pentru câmpurile de telefon prin modelul de date
### Câmpuri de selectare
* **Se poate selecta o opțiune implicită** pentru fiecare câmp de tip Select
### Câmpuri de text pentru înregistrări
* **Fiecare obiect are un câmp principal de afișare**: Acest câmp apare în coloana din stânga și reprezintă înregistrarea atunci când este legată de alte obiecte. Trebuie să fie un câmp text. De exemplu, Persoane utilizează `Nume` ca câmp principal, astfel încât atunci când legați o persoană de o companie, veți vedea numele ei în vizualizarea companiei.

View File

@@ -0,0 +1,92 @@
---
title: Obiecte
description: Aflați despre obiectele standard și personalizate din Twenty.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## Obiecte standard
Obiectele standard sunt entități predefinite în spațiul tău de lucru care te ajută să începi. Fac parte dintr-un model de date comun accesibil tuturor utilizatorilor Twenty. Le poți folosi așa cum sunt, le poți personaliza sau le poți dezactiva.
<img src="/images/user-guide/objects/standard-objects.png" style={{width:'100%'}} />
### Persoane
Obiectul `People` stochează contactele tale. Include detalii de contact și istoricul interacțiunilor, astfel încât să poți vedea toate interacțiunile cu clienții într-un singur loc.
### Companii
Obiectul `Companies` stochează conturile tale de afaceri. Include detalii precum industria, dimensiunea și locația. Companiile se conectează la obiectele `People` și `Opportunities`.
### Oportunități
Obiectul `Opportunities` stochează datele legate de afaceri. Urmărește progresia posibilelor vânzări, de la prospectare la încheiere, înregistrând etapele, dimensiunile tranzacțiilor, contul asociat și data anticipată de închidere. Poți vizualiza fluxul de vânzări într-un layout kanban.
### Notițe
Obiectul `Notes` stochează note în format liber care pot fi atașate Persoanelor, Companiilor, Oportunităților și altor înregistrări. Folosiți notele pentru a consemna rezumate ale întâlnirilor, detalii importante sau orice informații contextuale.
### Sarcini
Obiectul `Tasks` stochează sarcini de făcut și elemente de acțiune. Sarcinile pot fi asociate Persoanelor, Companiilor, Oportunităților și altor înregistrări. Urmăriți termenele limită, persoanele desemnate și starea finalizării pentru a rămâne la zi cu activitățile de follow-up.
## Obiecte personalizate
Obiectele personalizate îți permit să stochezi informații specifice organizației tale și pe care obiectele standard nu le pot gestiona. De exemplu, dacă ești SpaceX, poți dori să creezi un obiect personalizat pentru Rachete și Lansări.
<img src="/images/user-guide/objects/custom-objects.png" style={{width:'100%'}} />
### Crearea unui obiect personalizat nou
Pentru a crea un obiect personalizat nou:
1. Mergi la Setări, în bara laterală din stânga.
2. În spațiul de lucru, mergeți la Modelul de date. Aici vei putea vedea o prezentare generală a tuturor obiectelor existente Standard și Personalizate (atât active cât și dezactivate).
<VimeoEmbed videoId="926288174" title="Demonstrație video" />
3. Fă clic pe `+ Obiect nou` în partea de sus. Introduceți numele (singular și plural), alegeți o pictogramă, adăugați o descriere pentru obiectul personalizat și apăsați Salvare (în dreptul sus). Folosind Listing ca exemplu de obiect personalizat, forma de singular ar fi "listing", iar pluralul ar fi "listings", împreună cu o descriere precum "Anunțuri pe care gazdele le-au creat pentru a-și prezenta proprietatea."
4. Obiectul dvs. personalizat a fost creat și va apărea în bara laterală. Puteți începe să adăugați înregistrări imediat.
## Gestionarea obiectelor
### Dezactivarea obiectelor
Dacă nu aveți nevoie de un obiect standard sau personalizat:
1. Accesați Setări → Model de date
2. Găsește obiectul pe care vrei să-l dezactivezi și fă clic pe el
3. Du-te la fila **Setări** obiectului
4. Faceți clic pe butonul `Deactivate`
5. Obiectul va fi ascuns din spațiul dvs. de lucru, dar datele sunt păstrate
### Reactivarea obiectelor
Pentru a readuce un obiect dezactivat:
1. Accesați Setări → Model de date
2. Activează filtrul `Dezactivat`
3. Caută obiecte dezactivate (ele au "dezactivat" lângă numele lor)
4. Faceţi clic pe `·` şi apoi pe `Activează` pentru a reactiva
5. Obiectul și toate datele sale vor fi restaurate
## Cele mai bune practici
### Când să creați obiecte personalizate
* **Entități de afaceri unice**: Elemente specifice industriei sau procesului dvs.
* **Relații complexe**: Când trebuie să urmăriți conexiunile dintre mai multe entități
* **Date scalabile**: Când este posibil să aveți numeroase instanțe ale aceluiași lucru
### Când să folosiți câmpuri în loc
* **Atribute simple**: Proprietăți care descriu obiecte existente
* **Categorii sau etichete**: Modalități de a clasifica înregistrările existente
* **Valori unice**: Informații care nu necesită un ciclu de viață propriu
### Denumirea obiectelor
* **Folosiți denumiri clare și descriptive**: Să fie evident ce reprezintă obiectul
* **Respectați convențiile**: Folosiți singularul pentru numele obiectului, pluralul pentru colecție
* **Țineți cont de echipa dvs.**: Alegeți denumiri pe care toată lumea le va înțelege

View File

@@ -0,0 +1,94 @@
---
title: Câmpuri de relație
description: Conectați înregistrări din obiecte diferite folosind câmpuri de relație.
---
## Tipuri de relații
### Unu-la-mulți
O înregistrare din Obiectul A poate fi legată de multe înregistrări din Obiectul B.
**Exemplu:** O Companie poate avea multe Persoane (angajați).
### Mulți-la-unu
Multe înregistrări din Obiectul A pot fi legate de o singură înregistrare din Obiectul B.
**Exemplu:** Multe Persoane pot aparține unei singure Companii.
### Relații către mai multe tipuri de obiecte
Unele obiecte pot face legătura către mai multe tipuri de obiecte pe o parte a relației.
**Exemplu:** O Notă poate fi atașată simultan la o Persoană ȘI o Companie ȘI o Oportunitate. Obiectul Notă este pe partea "mulți", conectându-se la mai multe părți "unu".
<img src="/images/user-guide/fields/many-to-one-morph.png" style={{width:'100%'}} />
În mod similar, un Proiect (pe partea "unu") ar putea primi legături de la mai multe Persoane, mai multe Companii și mai multe Note.
<img src="/images/user-guide/fields/one-to-many-morph.png" style={{width:'100%'}} />
<Warning>
**Limitare la import/export**: Relațiile care indică către mai multe tipuri de obiecte nu sunt încă acceptate pentru importul/exportul CSV. Această funcționalitate este în planul nostru de dezvoltare.
</Warning>
### Mulți-la-mulți
Multe înregistrări din Obiectul A pot fi legate de multe înregistrări din Obiectul B.
**Exemplu:** Multe Persoane pot fi legate de multe Proiecte și invers.
Relațiile de tip multe-la-multe folosesc un model de tip **obiect de legătură**: un obiect intermediar care conectează ambele părți. Cu funcția de relație cu obiect de legătură, Twenty afișează direct înregistrările finale asociate, ascunzând obiectul intermediar din UI.
<Warning>
**Funcția Beta**: Relațiile de Junction trebuie activate la **Setări → Comunitate → Caracteristici** înainte de utilizare.
</Warning>
Consultați [Cum să creați relații de tip multe-la-multe](/l/ro/user-guide/data-model/how-tos/create-many-to-many-relations) pentru un ghid complet, pas cu pas.
## Crearea unui câmp de relație
1. Accesați **Setări → Model de date**
2. Selectați obiectul în care doriți să adăugați relația
3. Click **+ Câmp nou**
4. Selectați **Relație** ca tip de câmp
5. Alegeți obiectul/obiectele țintă cu care să stabiliți relația
6. Configurați setările relației:
* **Numele câmpului pe obiectul sursă**: Numele câmpului de relație pe obiectul pe care îl editați
* **Numele câmpului pe obiectul destinație**: Numele câmpului de relație care va apărea pe obiectul țintă
* Tipul relației (unu-la-mulți, mulți-la-unu)
7. Faceți clic pe **Salvare**
## Relații standard
Twenty include relații predefinite între obiectele standard:
| Din obiect | Către obiect | Tipul relației |
| ------------ | ------------ | -------------- |
| Persoane | Companii | Mulți-la-unu |
| Oportunități | Companii | Mulți-la-unu |
| Oportunități | Persoane | Mulți-la-unu |
## Cele mai bune practici
### Planificarea relațiilor
* **Mapați modelul de date**: Planificați relațiile înainte de a le crea
* **Luați în considerare direcția**: Gândiți-vă care obiect „deține” relația
* **Evitați dependențele circulare**: Păstrați modelul de date curat
### Denumierea relațiilor
* **Folosiți denumiri clare**: Să fie evident ce reprezintă relația
* **Fiți consecvenți**: Folosiți tipare de denumire similare pentru toate relațiile
* **Luați în considerare ambele părți**: Denumiți corespunzător ambele părți ale relației
### Performanță
* **Nu exagerați cu relațiile**: Prea multe relații pot încetini spațiul de lucru
## Limitări
* **Ștergerea relațiilor** elimină legătura, dar nu și înregistrările asociate
* **Relațiile circulare** ar trebui evitate pentru integritatea datelor