{“content”:“السلام عليكم جميعاً،\nأحاول تحميل جميع الملفات من مجلد معين في SharePoint (مثل /Shared Documents/Dana) باستخدام n8n.\n\n#### ما الذي فعلته\n\n1. عقدة Microsoft SharePoint → Resource: Item → Operation: Get Many\n\n * تعيد العناصر بنجاح.\n * كما قمت بالتصفية للمجلد (لذا أريد الملفات الموجودة فقط تحت /Dana).\n\n2. ثم أقوم بحلقة النتائج باستخدام Loop Over Items / Split In Batches وأحاول:\n\n * عقدة Microsoft SharePoint → Resource: File → Operation: Download\n * لكن العقدة تدعم فقط “By ID” (بدون خيار “By path” في إصداري)، لذا أحتاج إلى معرّف ملف.\n\n#### ما أراه في مخرجات “Get Many Items”\n\nكل سجل مرجع له حقول مثل:\n\n* id: 1 (يبدو أنه معرّف عنصر قائمة)\n* webUrl: https://.../Shared%20Documents/Dana/sample.txt\n* contentType.id: 0x0120... (نوع المحتوى)\n* parentReference.id: c5c59b33-8fc3-44a5-915f-9c608c03731c\n* parentReference.siteId: elbitsystems.sharepoint.com,0f496d07-...,303451ee-...\n* parentReference.listId: ecc55e50-...\n\n#### المشكلة\n\nعندما أحاول التحميل باستخدام عقدة SharePoint File → Download:\n\n* تمرير webUrl فشل (معرّف متوقع)\n* تمرير id فشل (يبدو أنه معرّف عنصر قائمة، وليس معرّف ملف/driveItem)\n* تمرير contentType.id فشل (ليس معرّف ملف)\n* تمرير parentReference.id فشل (يبدو أنه معرّف مجلد أب)\n\nأحصل دائماً على:\n\n* 400 Bad request – يرجى التحقق من معاملات الطلب الخاصة بك\n\n#### ما الذي أحتاج إلى مساعدة فيه\n\n* كيف أحصل على معرّف الملف/driveItem الصحيح من مخرجات “Get Many Items (Item resource)” حتى أتمكن من استخدامه في File → Download؟\n* أم ما هو سير العمل الموصى به في n8n لتحميل جميع الملفات من مجلد:\n * هل يجب أن أستخدم مورد SharePoint مختلف (File بدلاً من Item)؟\n * أم يجب أن أستخدم عقدة HTTP Request مع Microsoft Graph للتحميل حسب المسار؟\n\nإصدار n8n: 2.18.7 (نسخة ذاتية الاستضافة)\nالعقدة: n8n-nodes-base.microsoftSharePoint (الأحدث المعروض في واجهة المستخدم)”,“target_locale”:“ar”}
مرحبا @dana_bida
بدلاً من استخدام مورد “Item” للعثور على ملفاتك، استخدم مورد “File”. وهذا يضمن أن معرفات العودة متوافقة مع عملية التنزيل.
- استبدل عقدتك الأولى:
- المورد:
File - العملية:
List
- المورد:
- قم بتكوين المجلد:
- في عملية “List”، يمكنك تحديد مسار المجلد أو معرفه. بما أنك تريد
/Shared Documents/Dana، تأكد من أنك تستهدف هذا المجلد المحدد.
- في عملية “List”، يمكنك تحديد مسار المجلد أو معرفه. بما أنك تريد
- المخرجات:
- معرف
idالذي يتم إرجاعه بواسطةResource: File→Operation: Listهو معرف DriveItem.
- معرف
- عقدة التنزيل:
- مرر هذا
idمباشرة إلىResource: File→Operation: Download. سيؤدي هذا الآن إلى حل خطأ 400 Bad Request.
- مرر هذا
إذا لم تعطك عملية “File → List” المدمجة التصفية الدقيقة التي تحتاجها، يمكنك استخدام واجهة برمجة تطبيقات Microsoft Graph مباشرة. وهذا غالباً ما يكون أكثر موثوقية لهياكل المجلدات العميقة.
الخطوة 1: سرد الملفات في المجلد استخدم عقدة HTTP Request:
- الطريقة:
GET - عنوان URL:
https://graph.microsoft.com/v1.0/sites/{{siteId}}/drive/root:/Shared Documents/Dana:/children- (استبدل
{{siteId}}بمعرف موقعك أو استخدم تنسيق اسم المضيف/المسار الخاص بالموقع).
- (استبدل
- المصادقة: استخدم بيانات اعتماد SharePoint/Microsoft نفسها.
الخطوة 2: حلقة وتنزيل ستحتوي الاستجابة على مصفوفة value. كل كائن في تلك المصفوفة لديه حقل id. هذا id هو driveItemId.
- مرر هذا
idإلى عقدة Microsoft SharePoint →Resource: File→Operation: Downloadالموجودة لديك.
هل هذا مفيد؟
@dana_bida المعرّف من Item → Get Many هو معرّف عنصر القائمة، لكن Download يريد معرّف driveItem، وهذا هو السبب في الخطأ 400. الحل الأسهل هو تخطي عقدة التنزيل بالكامل، حيث أن استدعاء Graph children يعطيك بالفعل رابط تنزيل موقّع مسبقًا لكل ملف، لذا ما عليك سوى إرسال طلب GET لذلك، بدون الحاجة للتعامل مع المعرّفات:
استبدل SITE_ID برقم parentReference.siteId الذي تراه بالفعل في مخرجاتك، وأعد استخدام بيانات اعتماد SharePoint OAuth الموجودة لديك على العقدة الأولى، واترك مصادقة عقدة التنزيل على None لأن الرابط مُوقّع مسبقًا بالفعل. إذا عاد رابط التنزيل فارغًا في أي وقت (المصادقة فقط للتطبيق تفعل ذلك)، وجّه تلك العقدة إلى /sites/SITE_ID/drive/items/{{ $json.id }}/content مع إرفاق بيانات الاعتماد الخاصة بك بدلاً من ذلك.
بعد الحصول على قائمة الملفات، أضف عقدة Filter على الملف الموجود في الاستجابة (أي أن {{ $json.file }} ليست فارغة) لاستبعاد المجلدات الفرعية تلقائياً من حلقتك، وإلا فإن خطوة التنزيل ستفشل على عناصر المجلدات التي تتسلل إلى استجابة children.