سأعرض هنا مثالاً غير بسيط لاستخدام
Microsoft Flow لحل مشكلة عملية واحدة.
بيان المشكلة
في بعض الأحيان تنشأ مهام المبرمج من الحياة اليومية. كانت هذه حالة واحدة. كنت أرغب في تقديم الزهور لزوجتي من وقت لآخر ، قل مرة واحدة في الشهر. ولكن في الوقت نفسه ، لم أرغب في القيام بذلك في أي تاريخ محدد ، على سبيل المثال ، في اليوم الأول من الشهر. عندها لن تكون هذه مفاجأة. كنت أرغب في التوزيع العشوائي. على سبيل المثال ، في المرة القادمة التي أقدم فيها الزهور ، يجب أن يكون هناك شهر بعد المرة السابقة ، بالإضافة إلى / ناقص يومين.
لا يوجد شيء خاص حول هذه المتطلبات. من السهل كتابة برنامج يذكرني بهذه الأحداث. لكن تطبيق سطح المكتب لديه عيب كبير. ستعمل فقط على جهاز واحد ، بينما لدي العديد منها (في المنزل ، في العمل ، ...). وهناك هاتف ذكي ... ألن يكون لطيفا تلقي إشعارات على أي من أجهزتي؟
حسنًا ، يمكنك حفظ معلومات الحدث في نوع ما من التخزين عبر الإنترنت (مثل
Mlab ). في هذه الحالة ، ستعمل جميع مثيلات طلبي بنفس المعلومات ، مما سيسمح بمزامنتها مع بعضها البعض. ومع ذلك ، سأحتاج إلى تثبيت هذه التطبيقات على جميع أجهزة الكمبيوتر الخاصة بي. بالإضافة إلى ذلك ، أستخدم Windows على أجهزة الكمبيوتر و Android على هاتفي الذكي ، لذا سيتعين علي كتابة العديد من التطبيقات المختلفة إذا كنت أرغب حقًا في تلقي إشعاراتي في كل مكان. كيف تتغلب على هذه المشكلة؟ استخدام الويب بالطبع.
إذا قمت بإنشاء تطبيق ويب ، يمكنني استخدامه على أي جهاز تقريبًا. عظيم! ولكن لا يزال ليس كبيرا بما فيه الكفاية. دعني أوضح وجهة نظري. على الرغم من أنه ليس من الصعب جدًا كتابة تطبيق ويب يحل مشكلتي ، إلا أنه لا يزال يتعين علي الاهتمام بالعديد من الأشياء في هذه الحالة. تحتاج إلى التفكير في الاستضافة ، وتخزين البيانات ، وتخزين التعليمات البرمجية ، ... ولماذا؟ تم تنفيذ جميع الوظائف المطلوبة تقريبًا بالفعل في تقاويم الويب الحديثة مثل تقويم
Google . يمكنه إنشاء أحداث ، وجعلها تتكرر ، وإرسال إخطارات إلي عن حدوثها ، وما إلى ذلك. الشيء الوحيد المفقود هو التوزيع العشوائي المطلوب من قبلي. ألن يكون رائعًا إذا استطعت فقط إضافة هذه الميزة واستخدام جميع الميزات الأخرى المتوفرة بالفعل؟
عندما فكرت في هذه المشكلة ، جئت عبر موقع
IFTTT.com . فكرة هذا الموقع بسيطة ولكنها منتجة. إذا حدث شيء ، يفعل شيئا. أعلم أن هذا يبدو غريبًا ، لذا دعني أعطيك بعض الأمثلة. إذا تلقيت رسالة بريد إلكتروني من شخص معين ، أرسل لي رسالة نصية قصيرة. إذا نشر مؤلفي المفضل مقالًا جديدًا على مدونته ، فأخبرني بذلك على Slack. أو إذا حان الوقت لحدث معين في تقويم Google ، فأرسل لي رسالة بريد إلكتروني. آمل الآن أن يكون واضحًا ما أقود إليه. يمكن لهذه الخدمة مراقبة أحداث معينة (تسمى المشغلات) وتنفيذ بعض الإجراءات عند حدوث هذه الأحداث. يدعم IFTTT عددًا كبيرًا من المحفزات والإجراءات المحتملة. يمكنني تتبع الأحداث الخاصة بي في تقويم Google ، وعندما يحدث حدث معين ، سأرسل لنفسي رسالة بريد إلكتروني ، وأحذف الحدث القديم وأضيف حدثًا جديدًا في وقت لاحق. واو! ما هو المطلوب بالضبط! لكن ليس حقًا.
بادئ ذي بدء ، يسمح IFTTT بإجراء واحد فقط على المشغل. هذه ليست مشكلة كبيرة ، لأن يمكنك إنشاء تطبيقات متعددة مع مشغلات متطابقة (التطبيق الصغير هو مزيج من المشغل والإجراء في IFTTT). سيرسل لي أحدهم خطابًا ، والآخر سيحذف الحدث القديم ، والثالث سينشئ حدثًا جديدًا. لكن هناك عقبة أكثر خطورة. بالنسبة إلى حدث جديد ، أحتاج إلى إنشاء وقت استجابة مع التوزيع العشوائي. ولم أجد كيفية القيام بذلك في IFTTT. هذا يعني أن هذه الخدمة لا يمكن أن تحل مشكلتي. ولكن ربما هناك خدمات أخرى مماثلة على الإنترنت؟ نعم هناك.
الموقع التالي الذي
راجعته كان
زابير . هنا يمكننا استخدام العديد من الإجراءات على مشغل واحد ، وهو أمر جيد. ولكنها متاحة فقط للمال ، وهي ليست جيدة. لم ألعب مع زابير لفترة كافية ، لكن لدي انطباع بأنه لا يوفر أيضًا الفرصة للعشوائية التي أحتاجها. على الرغم من أنني هنا قد أكون مخطئا. على أي حال ، انتقلت إلى المرشح التالي.
كان
Microsoft Flow . تسمح لي هذه الخدمة بتتبع 750 مشغلاً شهريًا مجانًا. هذا أكثر من كافٍ لاحتياجاتي. علاوة على ذلك ، فإنه يدعم التعبيرات ، بما في ذلك وظيفة
rand () ! هذا هو بالضبط ما تحتاجه. الآن دعوني أريكم كيفية حل المشكلة الموضحة باستخدام Microsoft Flow.
الحل
تحتاج أولاً إلى إنشاء تدفق جديد. الدفق هو مزيج من الزناد والعمل. للقيام بذلك ، قم بالتسجيل في الموقع وفي القائمة الرئيسية ، انقر على
تدفقاتي ، ثم على
إنشاء من فراغ :

انقر فوق الزر إنشاء من فارغ:

سيُطلب منك تحديد مشغل. أدخل "التقويم" في حقل البحث وحدد
تقويم Google :

في قائمة المشغلات المتاحة لتقويم Google ، حدد
متى يبدأ الحدث :

قد يُطلب منك هنا السماح بالوصول من Microsoft Flow إلى تقويم Google نيابة عنك.
الآن الزناد جاهز. المعلمة الوحيدة هي التقويم:

نعم ، يمكنك إنشاء تقاويم متعددة في تقويم Google. ينتمي كل حدث إلى أحد التقاويم ، وتحتاج إلى تحديد تقويم ستؤدي أحداثه إلى تشغيل أفعالك.
لا يوجد خطأ في إنشاء تقويم جديد ووضع جميع الأحداث التي يجب تشغيل إجراءاتك فيها. ولكن إذا لم تتم معالجة جميع الأحداث في التقويم ، فيمكنك استخدام التصفية. انقر على
خطوة جديدة ثم
أضف شرطًا :

سيؤدي هذا إلى إنشاء عامل تصفية لك. أنت الآن بحاجة إلى أن تقرر بالضبط كيف نريد تصفية الأحداث. على سبيل المثال ، أريد معالجة الأحداث التي تحتوي على النص "[RANDOM]" فقط في حقل "الموقع". للقيام بذلك ، انقر فوق حقل
اختيار قيمة الإدخال. سيعرض لك Microsoft Flow قائمة بالقيم المحتملة التي يمكنك العمل معها:

انقر فوق
قائمة الأحداث موقع الحدث . واملأ الحقول المتبقية بالقيم المناسبة:

انتبه إلى الرابط
تعديل في الوضع المتقدم . إنها مفيدة للغاية. إذا قمت بالنقر فوقها ، فستحصل على تمثيل للشرط نفسه كتعبير نصي:

سيساعد هذا كثيرًا عندما يحين الوقت لكتابة تعبيراتك الخاصة.
الآن يمكنك إضافة إجراءات لأحداثنا. في
القسم إذا كانت الإجابة بنعم من الفلتر ، انقر على الرابط
إضافة إجراء . هنا سوف أقوم بإنشاء إجراء سيرسل لي إشعار حدث على Gmail:

كما ترى ، يمكنك استخدام البيانات من الحدث الخاص بك لملء الموضوع والنص والخصائص الأخرى لهذا الإجراء.
الآن لدينا إشعارات. حان الوقت لحذف الحدث القديم في التقويم وإنشاء حدث جديد في وقت لاحق. استخدم ارتباط
إضافة إجراء لإنشاء إجراء
حذف حدث لتقويم Google:

يجب أن يقال أنه من الممكن تمامًا تغيير الحدث في التقويم بدلاً من حذف القديم وإنشاء حدث جديد. ولكن هنا سألتزم بالخيار الأخير لأعرض لك ميزة تدفق Microsoft أخرى. لنفترض أنني أريد أن يتم إنشاء حدث جديد في التقويم ليس بعد حذف القديم ، ولكن بالتوازي مع هذا. مرر مؤشر الماوس فوق
إرسال البريد الإلكتروني وحذف إجراءات
الحدث . ستظهر علامة زائد على الشاشة. انقر عليه وحدد
إضافة فرع متوازي ← إضافة إجراء في قائمة السياق:

الآن يمكننا إضافة التوازي
إنشاء إجراء حدث من
تقويم Google . لهذا الإجراء ، سنأخذ العنوان والوصف والموقع من حدث المصدر الخاص بنا. الشيء الوحيد المتبقي هو تعيين أوقات البدء والانتهاء للحدث الجديد:

الآن نأتي إلى الجزء المثير للاهتمام حقًا. نحن بحاجة إلى إضافة عدد عشوائي من الأيام إلى بداية الحدث الحالي بطريقة أو بأخرى. سنستخدم هذا التاريخ الجديد كبداية للحدث الذي تم إنشاؤه. على سبيل المثال ، أريد إضافة 30 يومًا بالإضافة إلى / ناقص يومين. يمكن العثور على وثائق الميزات المتاحة
هنا . أعترف أن هذه ليست قراءة بسيطة للغاية. كان لدي الكثير من الأسئلة ، خاصةً حول كيفية استخراج وقت البدء من حدث المصدر بحيث يمكن استخدامه في الوظائف. يمكن الحصول على بعض المساعدة من مرشحنا. تذكر الرابط
تحرير في الوضع المتقدم :

النقر عليه يظهر التعبير المطابق:

أعطاني هذا بعض الأدلة في كتابة تعابيري. انقر الآن على حقل
وقت البدء الخاص
بإنشاء حدث حدث وحدد علامة التبويب
تعبير :

في حقل الإدخال ، اكتب التعبير التالي:
addDays(triggerBody()?['start'], add(30, rand(mul(2, -1), add(2, 1))))
وانقر فوق
موافق . هذا التعبير يحل مشكلتنا تمامًا: يضيف 30 يومًا زائد / ناقص يومين إلى وقت بدء الحدث الأولي. ولكن ماذا لو كنت بحاجة إلى بعض المرونة؟ ماذا لو كنت أرغب في الحصول على عدة أنواع من الأحداث؟ بالنسبة للأحداث من النوع الأول ، سأزيد وقت البدء بمقدار 30 يومًا زائد / ناقص يومين ، لأحداث النوع الثاني - بمقدار 14 يومًا زائد / ناقص 3 أيام ، إلخ. كيف يمكن تحقيق ذلك؟
هنا طريقة واحدة. هل تتذكر أننا قمنا بتخزين السلسلة "[RANDOM]" في حقل "الموقع" في أحداثنا؟ الآن سنكتب معلومات إضافية في هذا المجال. ستكون محتوياته نصًا بتنسيق "[RANDOM] ، NN ، MM" ، حيث NN يتكون من رقمين و MM عبارة عن رقمين. سنزيد وقت حدوث الحدث بمقدار NN أيام زائد / ناقص أيام MM. باستخدام هذا التنسيق ، يمكنني التأكد من أن الأحرف في الموضعين 9 و 10 (بدءًا من 0) للسلسلة ستمثل NN ، وستكون الأحرف في الموضع 12 و 13 مم. وإليك تعبير يستخدم تنسيق تخزين المعلومات الجديد لزيادة وقت بدء الحدث:
addDays(triggerBody()?['start'], add(int(substring(triggerBody()?['location'], 9, 2)), rand(mul(int(substring(triggerBody()?['location'], 12, 2)), -1), add(int(substring(triggerBody()?['location'], 12, 2)), 1))))
يستخدم دالة
السلسلة الفرعية لتحديد الأجزاء الضرورية من السلسلة ، والدالة
int لتحويلها إلى عدد صحيح.
واو! لقد وصلنا تقريبا إلى هدفنا. يبقى فقط لتعيين وقت نهاية الحدث الجديد. وهنا نلتقي بالعقبة الأخيرة. من الضروري أن يساوي وقت نهاية الحدث وقت بدايته بالإضافة إلى 15 دقيقة. يدعم Microsoft Flow وظيفة
addMinutes ، ويمكنك كتابة تعبير مثل:
addMinutes(< >, 15)
ومع ذلك ،
وبحكم طبيعة وظيفة
الراند ، ينتهي بنا الأمر بقيمة لا علاقة لها بالقيمة في الوقت الذي بدأ فيه الحدث. بدلاً من ذلك ، سيكون من الجيد أن يكون لديك المتغير "nextStart" الذي سيحتفظ بقيمة تعبيرنا. ثم يمكننا استخدام قيمته في وقت بدء الحدث ، واستخدامه
addMinutes(< 'nextStart'>, 15)
للوقت الذي ينتهي فيه. وهل تعرف ماذا؟ يدعم Microsoft Flow المتغيرات. نحتاج أولاً إلى تهيئته. مرر فوق السهم بين الزناد والفلتر. انقر فوق علامة الجمع وحدد
إضافة إجراء :

أدخل "المتغيرات" في حقل البحث وحدد
تهيئة المتغير :

اضبط اسم المتغير على "nextStart" واكتب "String". ليس لدى Microsoft Flow نوع منفصل للتواريخ والأوقات ؛ فهو يستخدم السلاسل في كل مكان.

تحتاج الآن إلى تعيين القيمة لهذا المتغير. لا يمكن القيام بذلك هنا ، لأنه لم يعرف بعد ما إذا كان هذا الحدث صحيحًا. لا يمكننا التأكد من ذلك إلا بعد التصفية. لذلك ، نقوم بإضافة إجراء آخر من نوع
متغير تعيين بعد إرسال إشعار البريد:

هنا نضع قيمة المتغير الذي تم إنشاؤه على تعبيرنا الطويل. يبقى فقط لإعادة استخدام هذا المتغير في التعبيرات لوقت البدء والانتهاء للحدث. يمكنك الرجوع إلى متغير في تعبير مثل هذا:
variables('nextStart')
لذلك ، سيبدو تعبير نهاية الحدث كما يلي:
addMinutes(variables('nextStart'), 15)

الخلاصة
هذه هي نهاية القصة. تحتاج فقط إلى حفظ الدفق ، وسيقوم Microsoft Flow بتشغيله لنا.
آمل أن تكون هذه المقالة مفيدة لك. بالنسبة لي ، كان Microsoft Flow أداة رائعة لأتمتة المهام.