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
123 lines
7.4 KiB
Plaintext
123 lines
7.4 KiB
Plaintext
---
|
|
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.
|