طارق جهاد

الأعضاء
  • المساهمات

    188
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • Days Won

    17

السُّمعة بالموقع

100 Excellent

المعلومات الشخصية

9 متابعين

  1. اخي الكريم بحسب سؤالك، فإنه يتم حفظ OrderMaster ولا يتم OrderDetails وعلى اعتبار OrderDetails هي قائمة المنتجات، بالتالي الاحتمال الاول للمشكلة، هو بعدم وصول قائمة المنتجات هذه إلى ميثود الحفظ addorder لذلك يجب أن نتتبع سير البيانات من لحظة الضغط على زر الحفظ وحتى الوصول إلى لحفظة الحفظ الى قاعدة البيانات. 1. عند الحفظ قم بطباعة محتوى الاوبجت المرسل ضمن data: JSON.stringyfy...، اولا قم بتخزين هذه القيمة ضمن متغير ضمن اطبعها باستخدام console.log الان يجب ان يظهر الأوبجكت (الذي يمثل الطلب وتفاصيله) كاملا ضمن Console الخاصة بالمتصفح 2. في حال كانت النقطة الأولى خاطئة، حاول البحث عن اخطاء املائية او منطقية ضمن كود جافا سكربت حتى يظهر الاوبجكت بالشكل الكامل 3. في حال كانت النقطة الاولى صحيحة، ننتقل للنقطة الثانية، وهي التأكد من الاوبجت ordermasterdetail الموجود ضمن ميثود الحفظ، وهنا يجب عمل Debug والتأكد بأن الطلب يحمل بيانات الطلب نفسه وقائمة المنتجات (التفاصيل). 4. في حال كانت النقطة 3 خاطئة، فأنت بحاجة لتصحيح اعدادات JSON لديك ضمن ASP.NET Core 5. في حال كانت جميع النقاط سليمة، فالخطأ سيكون ضمن Entity Framework واعني هنا، اما نقص باحد الاعمدة او بالعلاقات بين الجداول. في جميع الاحول، اذا لم تنجح معك اي من النقاط السابقة، يمكننا متابعة الكود سوية بالتوفيق،،،
  2. في الغالب هم قاموا باضافة دالة التحويل للعربية، لان الاجهزة لديهم لا تدعم العربية. ولكن هذه مشكلة (او نقص) بالجهاز او نظام التشغيل، وليست بالموقع نفسه، بما ان الجهاز لديك يحوي على تعريفات اللغة العربية، بالتالي سيعمل لديك بدون الحاجة لتحويل النص للغة العربية.
  3. تقصد نسخ ولصق النص الانجليزي. طبعاً هذا مرفوض تماماً، ولا علاقة لظهور العناوين باللغة العربية بالمشكلة الظاهرة. يتضح تماماً ان هناك دالة تقوم باستبدال الحرف الانجليزي بعد كتابته مباشرة. طبعاً هذه لا تعتبر مشاكل ولا عقبات امام المطور اطلاقاً، ولكن مع كل احترامي هي قلة معرفة من قبل الشركة!
  4. لا اقصد جهاز المستخدم، في الفيديو يظهر بان جهاز المستخدم يدعم اللغتين العربية والانجليزية، لذلك المشكلة هي بدالة ضمن Javascript تقوم باستبدال الاحرف عند الكتابة، هذه يجب ازالتها
  5. هل يحوي ملف HTML على السطر؟ <meta charset="utf-8"> اذا كان جهاز الحاسوب لديك يدعم اللغة العربية، فلا حاجة لاكثر من تعريف محتويات ملف HTML بالترميز UTF-8
  6. وعليكم السلام ورحمة الله. لا اعتقد ان العملية بحاجة اية مكتبات او لواحق، على العكس، يوجد قسم من الكود بحاجة ازالة لديك. لاحظت من خلال الفيديو وعندما تكون لوحة المفاتيح على اللغة الانجليزية، فإن الحرف يظهر باللغة الانجليزية أولا ثم يتم استبداله بحرف عربي. لذلك يوجد كود javascript اضافي يجب ازالته او تعديله
  7. وعليكم السلام ورحمة الله. اعتقد انت تريد حفظ الطلب وتفاصيله مرة واحدة، والمشكلة ربما تكمن في تفاصيل الطلب تكون فارغة. على العموم المرفق لا يعمل!
  8. وعليكم السلام ورحمة الله. تختلف العملية بحسب حجم المشروع، وبحسب التقنية التي تعمل عليها. ولكن أضعف الإيمان هي استخدام كلاس واحد، ولكن دعني اوضح بعض النقاط، لتطوير طبقة الاتصال بقاعدة البيانات بالشكل الأفضل. 1. نقوم بتعريف الدوال (الميثودز) الخاصة بالقراءة والكتابة على قاعدة البيانات ضمن Interface وليكن اسمه IDataRepository 2. نقوم بإنشاء كلاس، بحيث يرث من الـ Interface السابق، الآن تصبح لدينا تطبيق هذا الـ Interface او بمعنى اخر كتابة الكود الخاص بالاتصال بقاعدة البيانات. 3. نقوم بتسمية الكلاس بإسم يوافق اسم التقنية او قاعدة البيانات التي نعمل عليها، لنفترض اننا نتعامل مع MySQL فيكون اسم الكلاس بالشكل التالي IMySqlRepository 4. ضمن اقسام التطبيق لا نتعامل مع الكلاس مباشرة، بل نتعامل مع الـ Interface، بحيث يكون التطبيق لدينا بمعزل عن التقنية المستخدمة للتعامل مع قاعدة البيانات، بالتالي مستقبلا يمكن استبدال تقنية MySQL ب SQL Server، عندها نقوم بإنشاء كلاس جديد ISqlRepository، أو قد نتعامل مع ملفات XML فنقوم بإنشاء كلاس جديد ايضا IXMLRepository، دون اي تعديل على باقي اقسام التطبيق. وكنصيحة أخيرة، انصحك بإنشاء أكثر من Repository بمعنى كل قسم ضمن مشروعك يجب أن يكون له Interface وكلاس خاص به. على سبيل المثال، لو فرضنا انك تقوم بتطوير تطبيق مشتريات عبر الانترنت. فيمكنك عندها: 1. إنشاء طبقة بيانات خاصة بقراءة المنتجات والبحث فيها (IProductRepository) 2. إنشاء طبقة بيانات خاصة بالطلبات وسلة الشراء (IOrderRepository) 3. إنشاء طبقة بيانات خاصة بالإدارة (IAdminRepository) طبعاً يمكنك إنشاء الطبقات بحسب حجم المشروع واقسامه، ولكن الفكرة هي بتقسيم المشروع إلى أقسام صغيرة قدر الإمكان، بحيث تسهل عملية التطوير أولاً، ويصبح بالإمكان التعديل على الجزئيات دون أن تتأثر باقي أقسام المشروع. سأرفق مثالاً عملياً بلغة سي شارب وقواعد بيانات SQL لاحقاً إن شاء الله بالتوفيق...
  9. cmd

    يجب عليك تنزيل NodeJs https://nodejs.org/en/download/ ولا تنسى تنزيل Cordova بعدها: npm install -g cordova بالتوفيق،،،
  10. اخي الكريم المتغيران x في كلاس a وكلاس b هما متغيران منفصلان، بمعنى ان الكلاس b لم يقم بوراثة هذا المتغير من الكلاس الأب a. وذلك لانك قمت بإعادة تعريفه من جديد بالتالي هو غير مفهوم بالنسبة ل a حاول اسناد قيمة x ضمن constructor الخاص بالكلاس b
  11. يوجد عدة طرق بإمكانك استخدام ابسط طريقة وهي: 1. قراءة id المستخدمين بشكل غير مكرر. 2. قراءة الرسائل من جدول الرسائل بناءاً على النتيجة السابقة SELECT * FROM Messages WHERE UserId IN (SELECT DISTINCT UserId FROM Messages) بالتوفيق،،،
  12. اخي الكريم، اخبرتك باستخدام Retrofit بالرابط المرفق، يوجد بالرابط تفاصيل عمليات Post, Get, Put,Delete وغيرها.
  13. انت بحاجة لاستخدام Http Client لتتمكن من التواصل مع خدمات الويب. للاندرويد استخدم مكتبة Retrofit https://square.github.io/retrofit/ الإشعارات المتزامنة: Push Notifications انت بحاجة لاستخدام GCM Google Cloud Messaging وهي خدمة سحابية. حيث ستقوم بإنشاء مشروع على هذه المنصة، ثم تقوم هي بإرشادك لضبط الإعدادات، ضمن الاندرويد. الفكرة ببساطة، انك ستقوم بتسجيل جهازك او Installation Id الخاص بجهازك على هذه المنصة، بالتالي يصبح جهازك قادر على استقبال الاشعارات. وعند استقبالك للاشعار ضمن اندرويد بإمكانك معالجته باكثر من طريقة. بالتوفيق،،،
  14. وعليكم السلام ورحمة الله. اخي الكريم فكر بالمثال التالي: ليكن لدي نموذج لتسجيل المستخدمين ضمن تطبيق معين، ومن ضمن حقول هذا النموذج يوجد حقل تاريخ الميلاد والذي هو حقل اختياري وليس اجباري. بمعنى يمكن للمستخدم تحديد تاريخ ميلاده او عدم تحديده. الآن، لنفرض اسم الحقل هو BirthDate ونوعه بالتأكيد DateTime DateTime BirthDate; الآن لدينا حالتين: 1. قام احد المستخدمين بالتسجيل، وتحديد تاريخ ميلاده 1/1/1990، لاحقاً سيقوم التطبيق بحساب عمر المستخدم بناءً على تاريخ الميلاد فيكون عمره حالياً 29 عاماً. 2. قام احد المستخدمين بالتسجيل، ولم يحدد تاريخ ميلاده! لكن قاعدة البيانات ترفض ان يكون هذا الحقل فارغاً، لذلك ستقوم انت او السي شارب نفسها بإعطاء القيمة الافتراضية لهذا النوع DateTime وستكون 1/1/0001، لاحقا سيقوم التطبيق بحساب عمر المستخدم، فيكون عمره الحالي 2019 عاماً!!!، او ربما تقوم انت بافتراض قيمة معينة في حال لم يقما المستخدم بادخال القيمة، مثلاً، 1/1/1980، بالتالي سيكون عمر المستخدم 39 عاماً، لكن هذا غير صحيح، وسيظهر بشكل ان المستخدم قام بتحديد تاريخ ميلاده. بالتالي ستضطر لحل اخر وهو كالتالي: تقوم بتعريف متغير جديد من نوع bool وليكن اسمه IsBirthDateSelected، وفي حال قام المستخدم بتحديد تاريخ ميلاده تكون قيمة هذا المتغير True وعلى هذا الاساس سيقوم التطبيق باحتساب عمر المستخدم، واذا كانت False لن يقوم باحتساب عمر المستخدم!!! لكن ألا ترى أن هذه العملية مرهقة، خصوصاً اذا كان لديك عشر متغيرات اختيارية ضمن نموذج التسجيل هذا!، وربما في كامل التطبيق يكون لديك عشرات الحالات المشابه، وستضطر انت دائما لعمل تزامل بين قيمة BirthDate وقيمة IsBirthDateSelected، وهذا العمل كلياً هو زيادة بالكود لا اكثر، فقط لتقوم بالالتفاف على نقطة ان قيمة تاريخ الميلاد فارغة، وان الحقل BirthDate يتطلب وجود قيمة. اذا الحل الامثل هو بجعل الحقل BirthDate قادر على ان يحمل قيمة فارغة، اي Nullable، ضمن سي شارب هذا يتم ببساطة بتعريف المتغير بالشكل التالي: DateTime? BirthDate; لاحظ وضعنا اشارة الاستفهام بجانب النوع،اي اصبح قادرا على احتواء قيمة فارغة، الآن ضمن التطبيق، انت بحاجة لمعرفه اذا كان هذا الحقل يحوي قيمة أم لا، ويتم ذلك بواسطة: if( BirthDate.HasValue) { // Calculate Age DateTime BirthDate = new DateTime(); int age = ((DateTime.Now - BirthDate.Value).Days) / 365; } لاحظ اننا قمنا بالتحقق من ان الحقل يحوي على قيمة او لا أولاً، ثم داخل جملة If قمنا بالوصول لهذه القيمة عن طريق BirthDate.Value اعتقد بأن الصورة اصبحت واضحة. الآن قم بقياس هذا المثال على باقي الأنواع الأخرى مثل int، bool, double وغيرها. بالتوفيق،،،
  15. بالتأكيد اخي الكريم، يوجد تطبيقات عربية مثل كريم، وطلبات وغيرها، لكن المنافسة في الغرب اقوى بالتاكيد