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
149 lines
9.3 KiB
Plaintext
149 lines
9.3 KiB
Plaintext
---
|
|
title: استيراد العلاقات بين الكائنات
|
|
description: استيراد العلاقات بين السجلات عبر CSV.
|
|
---
|
|
|
|
## نظرة عامة
|
|
|
|
يدعم Twenty استيراد العلاقات بين الكائنات أثناء استيراد CSV. يتيح لك هذا ربط السجلات (مثلًا، إرفاق الأشخاص بالشركات) كجزء من ترحيل البيانات.
|
|
|
|
<Note>**مدعوم حاليًا للاستيراد**: علاقات واحد إلى متعدد تشير إلى نوع كائن واحد على كل جانب (مثلًا، الأشخاص → الشركات). العلاقات التي تشير إلى أنواع كائنات متعددة غير مدعومة في الاستيراد/التصدير بعد.</Note>
|
|
|
|
## كيف تعمل العلاقات في Twenty
|
|
|
|
### واحد إلى متعدد / متعدد إلى واحد
|
|
|
|
يدعم Twenty العلاقات القياسية حيث يرتبط سجل واحد بعدّة سجلات أخرى:
|
|
|
|
* **شركة واحدة → العديد من الأشخاص**: يمكن أن تضم الشركة عدّة موظفين، لكن كل شخص ينتسب إلى شركة واحدة
|
|
* **شركة واحدة → العديد من الفرص**: يمكن أن تحتوي الشركة على عدّة صفقات، لكن كل فرصة تتبع شركة واحدة
|
|
|
|
### علاقات يمكن أن تشير إلى أنواع كائنات متعددة
|
|
|
|
يمكن لبعض العلاقات الاتصال بأنواع مختلفة من الكائنات. يعمل هذا بطريقتين:
|
|
|
|
**النمط 1: سجلات كثيرة يرتبط كلٌ منها بسجل واحد من أنواع كائنات مختلفة**
|
|
|
|
يمكن إرفاق عدة ملاحظات أو مهام بأنواع متعددة من الكائنات في وقت واحد:
|
|
|
|
* **الملاحظات** يمكن ربطها بشخص واحد وشركة واحدة وفرصة واحدة في الوقت نفسه
|
|
* **المهام** يمكن ربطها بشخص واحد وشركة واحدة وفرصة واحدة في الوقت نفسه
|
|
|
|
هنا تكون الملاحظات/المهام على جانب "المتعدد". يرتبط كلٌ منها بسجل واحد لكل نوع كائن.
|
|
|
|
<img src="/images/user-guide/fields/many-to-one-morph.png" style={{width:'100%'}} />
|
|
|
|
**النمط 2: سجل واحد يستقبل روابط من سجلات عديدة لأنواع كائنات مختلفة**
|
|
|
|
يمكن لمشروع أن يستقبل روابط من سجلات متعددة عبر أنواع كائنات مختلفة:
|
|
|
|
* **مشروع** يمكن أن يكون مرتبطًا به العديد من الأشخاص، والعديد من الشركات، والعديد من الملاحظات المرفقة به
|
|
|
|
هنا يكون المشروع على جانب "الواحد". يمكن لعدّة سجلات من كائنات مختلفة أن ترتبط جميعها بالمشروع نفسه.
|
|
|
|
<img src="/images/user-guide/fields/one-to-many-morph.png" style={{width:'100%'}} />
|
|
|
|
<Warning>
|
|
**قيد في الاستيراد/التصدير**: العلاقات التي تشير إلى أنواع كائنات متعددة (مثل الملاحظات → الأشخاص/الشركات/الفرص) **غير مدعومة بعد** في استيراد أو تصدير CSV.
|
|
|
|
* **الاستيراد**: يمكن استيراد علاقات واحد إلى متعدد فقط التي تشير إلى نوع كائن واحد على كل جانب
|
|
* **التصدير**: تُترك الأعمدة الخاصة بالعلاقات التي تشير إلى أنواع كائنات متعددة فارغة حاليًا
|
|
|
|
هذا على خارطة الطريق لدينا.
|
|
</Warning>
|
|
|
|
### ما ليس مدعومًا اليوم
|
|
|
|
**علاقات متعدد إلى متعدد** غير متاحة بعد. على سبيل المثال، لا يمكنك حاليًا إنشاء علاقة حيث:
|
|
|
|
* يرتبط العديد من الأشخاص بالعديد من المشاريع
|
|
|
|
<Note>العديد من العلاقات مخطط لها لـ H2 2026.</Note>
|
|
|
|
## ربط السجلات أثناء الاستيراد
|
|
|
|
<Note>**تذكير**: يمكن استيراد علاقات واحد إلى متعدد فقط التي تشير إلى نوع كائن واحد (مثلًا، الأشخاص → الشركات). العلاقات التي تشير إلى أنواع كائنات متعددة (مثل الملاحظات → الأشخاص/الشركات/الفرص) غير مدعومة بعد.</Note>
|
|
|
|
### الخطوة 1: تحديد جانبي "الواحد" و"المتعدد"
|
|
|
|
أولًا، حدّد أي الكائنات على جانب "الواحد" وأيها على جانب "المتعدد" في العلاقة.
|
|
|
|
**مثال**:
|
|
|
|
* **الشركة** هي جانب "الواحد" (شركة واحدة لديها العديد من الموظفين)
|
|
* **الأشخاص** على جانب "المتعدد" (ينتمي كل شخص إلى شركة واحدة)
|
|
|
|
### الخطوة 2: تأكّد من وجود سجلات جانب "الواحد"
|
|
|
|
قبل استيراد جانب "المتعدد"، يجب أن تكون سجلات جانب "الواحد" موجودة مسبقًا في Twenty.
|
|
|
|
* استورد أو أنشئ سجلات جانب "الواحد" أولًا (مثلًا، الشركات)
|
|
* تحقّق من مُعرّفهم الفريد. يمكن أن يكون ذلك:
|
|
* حقل `id` (UUID الخاص بـ Twenty)
|
|
* حقل مُعيّن كفريد (مثلًا، `domain` للشركات، أو مُعرّف خارجي من نظامك السابق)
|
|
|
|
<Warning>سيفشل الاستيراد إذا تمت الإشارة إلى سجل غير موجود.</Warning>
|
|
|
|
### الخطوة 3: جهّز ملف CSV الخاص بك
|
|
|
|
أضِف عمودًا في ملف CSV الخاص بجانب "المتعدد" يُشير إلى سجل جانب "الواحد".
|
|
|
|
**مثال**: لملف CSV للأشخاص يربط بالشركات:
|
|
|
|
```
|
|
firstName,lastName,email,companyDomain
|
|
John,Smith,john@acme.com,https://acme.com
|
|
Jane,Doe,jane@widgets.co,https://widgets.co
|
|
```
|
|
|
|
**مهم**:
|
|
|
|
* يجب أن **يطابق تمامًا** قيمة الحقل الفريد في سجل الشركة
|
|
* بالنسبة للنطاقات، استخدم **عنوان النطاق (URL)** (مثلًا، `https://acme.com`)، وليس تسمية النطاق
|
|
* قم بتعيين **مُعرّف فريد واحد** فقط لكل علاقة: فهذا يؤدي إلى عملية استيراد أكثر سلاسة
|
|
|
|
### الخطوة 4: تأكّد من وجود حقل العلاقة
|
|
|
|
قبل رفع ملفك، تأكّد من وجود حقل العلاقة بين كائناتك.
|
|
|
|
إذا لم يكن موجودًا:
|
|
|
|
1. اذهب إلى **الإعدادات → نموذج البيانات**
|
|
2. اختر الكائن الخاص بك (مثلًا، الأشخاص)
|
|
3. أنشئ حقل علاقة يشير إلى الكائن الهدف (مثلًا، الشركة)
|
|
|
|
### الخطوة 5: ارفع الملف وعيّن العلاقة
|
|
|
|
1. ارفع ملف CSV عبر واجهة الاستيراد
|
|
2. في خطوة تعيين الحقول، اعثر على عمود العلاقة الخاص بك (مثلًا، `companyDomain`)
|
|
3. عيّنه على حقل العلاقة (مثلًا، الشركة)
|
|
4. سيقوم Twenty بربط كل سجل تلقائيًا بالأصل المطابق
|
|
|
|
### الحقول الفريدة المتاحة للعلاقات
|
|
|
|
| كائن | الحقول الفريدة المتاحة |
|
|
| ------------------------------ | -------------------------------- |
|
|
| **الشركات** | `id`، `domain`، أي حقل فريد مخصص |
|
|
| **الأشخاص** | `id`، `email`، أي حقل فريد مخصص |
|
|
| **أعضاء مساحة العمل** | `id`، `email` (ليس الاسم) |
|
|
| **كائنات قياسية ومخصّصة أخرى** | `id`، أي حقل مُعلَّم كفريد |
|
|
|
|
<Note>**الربط بأعضاء مساحة العمل**: عندما تشير العلاقة إلى أعضاء مساحة العمل (فريقك الذي يسجّل الدخول إلى Twenty)، فقم بالإشارة إليهم عبر **عنوان البريد الإلكتروني**، وليس الاسم.</Note>
|
|
|
|
<Note>نوصي باستخدام `domain` للشركات و`email` للأشخاص، إذ إنها مقروءة بشريًا وسهلة الإدارة في جداول البيانات.</Note>
|
|
|
|
<Note>**تذكير**: السجلات المحذوفة حذفًا غير نهائي (مرئية ضمن Command Menu → See deleted records) تُحتسب ضمن معايير التفرّد. إذا قمت باستيراد سجل بالقيمة الفريدة نفسها لسجل محذوف، فسيتم استعادة السجل المحذوف. راجع [قيود التفرّد](/l/ar/user-guide/data-migration/capabilities/uniqueness-constraints) لمزيد من التفاصيل.</Note>
|
|
|
|
## قاعدة ترتيب الاستيراد
|
|
|
|
<Warning>
|
|
**احرص دائمًا على استيراد جانب "الواحد" أولًا!**
|
|
|
|
1. **الشركات** أولًا (من دون تبعيات)
|
|
2. **الأشخاص** ثانيًا (مرتبطون بالشركات)
|
|
3. **الفرص** ثالثًا (مرتبطة بالشركات/الأشخاص)
|
|
4. **الكائنات المخصّصة** وفقًا لتبعياتها
|
|
|
|
يجب أن يكون السجل الأصل موجودًا قبل أن تتمكّن من الإشارة إليه.
|
|
</Warning>
|