كيف تبني تطبيقًا لتفتيش المواقع باستخدام Power Apps وPower Automate وSharePoint (المباني والغرف والمعدات والمواعيد المستحقة)
إذا كانت عمليات تفتيش المباني لديك لا تزال تتم على لوح ورقي أو في جدول بيانات مشترك، فأنت تعرف المشكلات جيدًا: أحدهم يتخطى غرفة المولّد، وتبقى بطاقات طفايات الحريق دون فحص لشهر كامل، ولا أحد يستطيع أن يحدد المواقع المتأخرة إلى أن يشتكي أحد المستأجرين.
في هذا الدليل سنبني نظامًا متكاملًا لتفتيش المواقع لخدمات التشغيل الفني للعقارات على Microsoft 365. لكل موقع مبانيه وغرفه ومعداته الخاصة. وتضم مكتبة رئيسية الأسئلة القياسية للغرف والمعدات، ويختار مسؤول كل موقع ما يحتاج إليه منها، ويعيد صياغتها، ويضيف أسئلته الخاصة، ويحدد ترتيبها. ويحصل المشغّلون على تطبيق Canvas مناسب للأجهزة اللوحية يرشدهم خلال فحوص المباني والغرف والمعدات. ويتولى Power Automate جدولة عمليات التفتيش حسب تكرارها، والإشارة إلى كل ما تجاوز موعده، وإرسال ملخص بالبنود غير المطابقة إلى مسؤول الموقع بالبريد الإلكتروني عند انتهاء التفتيش.

ما الذي ستبنيه
تسلسل هرمي من المواقع والمباني والغرف والمعدات، جميعها في قوائم SharePoint.
مكتبة رئيسية للأسئلة الخاصة بالغرف والمعدات. يمكن أن تنطبق الأسئلة على كل الغرف (أو كل المعدات) أو على نوع واحد فقط، مثل Washroom (دورة المياه) أو Fire Extinguisher (طفاية الحريق).
مجموعات أسئلة على مستوى الموقع يتحكم فيها مسؤول الموقع: الاستيراد من المكتبة الرئيسية، وإعادة الصياغة، وإعادة الترتيب، والإخفاء، وإضافة أسئلة خاصة بالموقع.
ثلاثة أنواع من الإجابات: Pass / Fail / N/A (مطابق، غير مطابق، لا ينطبق)، وReading (قيمة رقمية مثل درجة الحرارة أو مستوى الوقود)، وNote (ملاحظة).
مسار عمل للجدولة ينشئ عمليات التفتيش حسب تكرار كل موقع (أسبوعي أو شهري أو ربع سنوي)، ويصنّفها متأخرة، ويرسل التذكيرات.
شاشة للمشغّل تنتقل من المبنى إلى الغرفة ثم إلى المعدات، مع شريط تقدم وعدّادات لكل غرفة.
مسار عمل عند الإنجاز يرسل إلى مسؤولي الموقع جدولًا بالبنود غير المطابقة مع تعليقات المشغّل.
شاشة نتائج للمسؤولين تظهر فيها الفحوص غير المطابقة في الأعلى.
ما الذي تحتاج إليه
Microsoft 365 مع SharePoint Online وOutlook وPower Apps وPower Automate. كل ما هنا يستخدم موصلات قياسية، لذا لا حاجة إلى ترخيص Premium.
موقع SharePoint تملكه (سننشئ موقعًا باسم Site Inspections).
جهاز لوحي أو حاسوب محمول للمشغّلين. التطبيق مصمم بتخطيط الأجهزة اللوحية ويعمل في المتصفح وفي تطبيق Power Apps للأجهزة المحمولة وفي Teams.
الخطوة 1: إنشاء قوائم SharePoint
أنشئ موقع فريق جديدًا في SharePoint باسم Site Inspections، ثم أضف إليه القوائم التسع التالية. نربط السجلات بأعمدة Number بسيطة (SiteID وBuildingID وRoomID) بدلًا من أعمدة البحث (Lookup)، لأن عوامل التصفية الرقمية تُفوَّض بسلاسة في Power Apps ويسهل تعيينها من Power Automate.
هيكل المواقع
Sites: Title (اسم الموقع)، Address، City، Frequency (Choice: Weekly، Monthly، Quarterly)، NextDue (تاريخ)، DefaultOperator (نص، البريد الإلكتروني للمشغّل)، Active (Yes/No).
Buildings: Title، SiteID، SortOrder.
Rooms: Title، SiteID، BuildingID، Floor، RoomType (Choice: Office، Washroom، Kitchen، Lobby، Mechanical Room، Electrical Room، Parking)، SortOrder.
Equipment: Title، AssetTag، EquipmentType (Choice: HVAC Unit، Fire Extinguisher، Emergency Lighting، Elevator، Generator، Fire Alarm Panel، Water Heater)، SiteID، BuildingID، RoomID، SortOrder.
كل قطعة من المعدات تتبع غرفة، وكل غرفة تتبع مبنى. وهذا ما يتيح للمشغّلين التنقل التدريجي: اختيار مبنى، ثم غرفة، ثم فحص الغرفة نفسها وكل قطعة من المعدات فيها.

مكتبة الأسئلة
Master Questions: Title (السؤال)، AppliesTo (Choice: Room، Equipment)، Category (نص: نوع غرفة أو نوع معدات أو All)، AnswerType (Choice: Pass / Fail، Reading، Note)، SortOrder، Active.
Site Questions: الأعمدة نفسها إضافةً إلى SiteID وMasterID (السؤال الرئيسي الذي نُسخ منه، أو 0 للسؤال الخاص بالموقع).
تعني القيمة All في Category أن السؤال ينطبق على كل الغرف أو كل المعدات. فسؤال «الأرضيات نظيفة وخالية من مخاطر التعثر» سؤال All للغرف، أما «مؤشر الضغط في المنطقة الخضراء» فلا ينطبق إلا على Fire Extinguisher.

لماذا ننسخ الأسئلة إلى كل موقع بدلًا من الإشارة إلى القائمة الرئيسية؟ لأن مسؤولي المواقع يحتاجون إلى امتلاك قوائم الفحص الخاصة بهم. فدورة مياه في مستشفى لا تخضع للأسئلة نفسها التي تخضع لها دورة مياه في مستودع، وإعادة صياغة موقع ما لسؤال لا ينبغي أن تغيّره في كل مكان آخر. ويحافظ MasterID على الرابط حتى تتمكن من إعداد التقارير عبر المواقع.
المستخدمون وعمليات التفتيش
Site Users: Title (البريد الإلكتروني بأحرف صغيرة)، SiteID، Role (Choice: Global Admin، Site Admin، Operator). يستخدم المسؤولون العامّون SiteID 0.
Inspections: Title، SiteID، SiteName، DueDate، Status (Choice: Scheduled، In progress، Completed، Past due)، AssignedTo (بريد إلكتروني)، StartedOn، CompletedOn، CompletedBy، Answered، Failed، SummarySent (Yes/No، والافتراضي No).
Inspection Results: Title (نص السؤال وقت التفتيش)، InspectionID، SiteID، BuildingID، RoomID، EquipmentID (0 لفحوص الغرف)، TargetType، TargetName، QuestionID، Answer، IsFail (Yes/No)، Comments.
تحفظ النتائج نص السؤال واسم الغرفة أو المعدات، لا المعرّفات فقط. فإذا أعاد أحدهم صياغة سؤال في الشهر القادم، يظل تقرير الشهر الماضي يعرض ما أجاب عنه المشغّل فعلًا.
الخطوة 2: جدولة عمليات التفتيش باستخدام Power Automate
أنشئ مسار عمل سحابيًا مجدولًا (Scheduled cloud flow) باسم Inspection Scheduler يعمل كل صباح في الساعة 6:00 حسب منطقتك الزمنية.

Get sites due soon: إجراء SharePoint Get items على Sites مع استعلام التصفية (Filter Query) التالي، لتظهر عمليات التفتيش قبل موعدها بأسبوع:
Active eq 1 and NextDue le '@{addDays(utcNow(),7,'yyyy-MM-dd')}'لكل موقع مستحق، يتحقق الإجراء Get open inspection مما إذا كانت هناك عملية تفتيش بانتظار التنفيذ:
SiteID eq @{items('For_each_due_site')?['ID']} and Status ne 'Completed'إذا كانت النتيجة فارغة (الشرط هو أن تساوي length(outputs('Get_open_inspection')?['body/value']) القيمة 0):
Create inspection: إجراء Create item على Inspections مع Title بصيغة «اسم الموقع - تاريخ الاستحقاق»، وSiteID، وSiteName، وDueDate = قيمة NextDue للموقع، وStatus = Scheduled، وAssignedTo = DefaultOperator.
Move next due date: إجراء Update item على Sites. يتقدم NextDue حسب تكرار الموقع:
if(equals(items('For_each_due_site')?['Frequency']?['Value'],'Weekly'), addDays(items('For_each_due_site')?['NextDue'],7,'yyyy-MM-dd'), addToTime(items('For_each_due_site')?['NextDue'], if(equals(items('For_each_due_site')?['Frequency']?['Value'],'Quarterly'),3,1), 'Month', 'yyyy-MM-dd'))Email the operator: إجراء Send an email (V2) يتضمن الموقع والعنوان وتاريخ الاستحقاق.

بعد ذلك يشير مسار العمل إلى كل ما تأخر عن موعده. يستخدم الإجراء Get overdue inspections عامل التصفية التالي:
Status eq 'Scheduled' and DueDate lt '@{utcNow('yyyy-MM-dd')}'ولكل عملية منها يضبط Status على Past due، ويجلب مسؤولي الموقع من Site Users (حيث SiteID eq قيمة SiteID للتفتيش وRole eq 'Site Admin')، ويحوّلهم إلى قائمة عناوين بريد إلكتروني باستخدام إجراء Select (الربط: item()?['Title'])، ثم يرسل تذكيرًا إلى المشغّل مع وضع المسؤولين في خانة النسخة (CC):
join(body('Admin_emails'),';')

لا تُصنَّف متأخرةً إلا عمليات التفتيش ذات الحالة Scheduled. فبمجرد أن يبدأ المشغّل إحداها تصبح In progress، ويعرض التطبيق بدلًا من ذلك عدد أيام التأخير.
الخطوة 3: إعداد التطبيق وأدوار المستخدمين
في Power Apps، أنشئ تطبيق Canvas فارغًا بتنسيق الأجهزة اللوحية وأضف القوائم التسع كمصادر بيانات. ثم حدد App وأضف هذه الصيغ المسماة في الخاصية Formulas:
MyEmail = Lower(User().Email);
IsGlobalAdmin = !IsBlank(LookUp('Site Users', Title = MyEmail && Role.Value = "Global Admin"));
MyAdminSiteIDs = Filter('Site Users', Title = MyEmail && Role.Value = "Site Admin");
IsAnyAdmin = IsGlobalAdmin || !IsEmpty(MyAdminSiteIDs);يرى المشغّلون عمليات التفتيش المسندة إليهم. ويرى مسؤولو المواقع أيضًا كل عمليات التفتيش في مواقعهم، ويحصلون على زرّي Manage sites وResults. أما المسؤولون العامّون فيرون كل شيء.
الخطوة 4: بناء الشاشة الرئيسية
تعرض الشاشة الرئيسية ثلاث بطاقات (المتأخرة، والمستحقة خلال الأيام السبعة القادمة، والمنجزة هذا الشهر) ومعرضًا لعمليات التفتيش المفتوحة. حمّل البيانات في الخاصية OnVisible للشاشة:
ClearCollect(colVisible, SortByColumns(Filter(Inspections, Status.Value <> "Completed" && (IsGlobalAdmin || AssignedTo = MyEmail || SiteID in MyAdminSiteIDs.SiteID)), "DueDate", SortOrder.Ascending));
ClearCollect(colDone, Filter(Inspections, Status.Value = "Completed" && (IsGlobalAdmin || AssignedTo = MyEmail || SiteID in MyAdminSiteIDs.SiteID)))بطاقة Past due هي CountRows(Filter(colVisible, DueDate < Today())). ويعرض كل صف في المعرض تاريخ الاستحقاق وشارة الحالة ورسالة تأخير ودّية:
With({d: DateDiff(Today(), ThisItem.DueDate, TimeUnit.Days)}, If(d < 0, -d & " days overdue", d = 0, "Due today", "Due in " & d & " days"))يضبط الزر Start inspection الحالة على In progress ويفتح شاشة التفتيش:
Set(varInsp, ThisItem); If(ThisItem.Status.Value <> "In progress", Set(varInsp, Patch(Inspections, ThisItem, {Status: {Value: "In progress"}, StartedOn: Now()}))); Navigate(Screen2, ScreenTransition.Cover)الخطوة 5: بناء شاشة التفتيش
هنا يقضي المشغّلون معظم وقتهم. على اليسار يختارون مبنى ثم غرفة. وفي أعلى اليمين يعرض صف من الأزرار Room checks وكل قطعة من المعدات في تلك الغرفة. وتحت ذلك تظهر أسئلة العنصر المحدد.

تحمّل الخاصية OnVisible للشاشة كل بيانات الموقع مرة واحدة، فيصبح التنقل فوريًا:
ClearCollect(colQ, Filter('Site Questions', SiteID = varInsp.SiteID && Active));
ClearCollect(colRooms, SortByColumns(Filter(Rooms, SiteID = varInsp.SiteID), "SortOrder"));
ClearCollect(colEquip, SortByColumns(Filter(Equipment, SiteID = varInsp.SiteID), "SortOrder"));
ClearCollect(colRes, Filter('Inspection Results', InspectionID = varInsp.ID));
Set(varTotal, Sum(colRooms As r, CountRows(Filter(colQ, AppliesTo.Value = "Room" && (Category = "All" || Category = r.RoomType.Value)))) + Sum(colEquip As e, CountRows(Filter(colQ, AppliesTo.Value = "Equipment" && (Category = "All" || Category = e.EquipmentType.Value)))));يمثل varTotal عدد الفحوص في عملية التفتيش كاملة. ويعرض الترويسة «12 of 65 checks done»، ويمتلئ شريط التقدم في الأعلى، ولكل غرفة عدّادها الخاص الذي يتحول إلى الأخضر عند اكتمالها.
عند اختيار غرفة، يبني زر مخفي قائمة العناصر المطلوب فحصها في تلك الغرفة:
ClearCollect(colTargets, {ID: 0, Name: "Room checks", Kind: varRoom.RoomType.Value});
Collect(colTargets, ForAll(Filter(colEquip, RoomID = varRoom.ID), {ID: ThisRecord.ID, Name: ThisRecord.Title, Kind: ThisRecord.EquipmentType.Value}))يؤدي النقر على زر في ذلك الصف إلى تعيين varEquipID (القيمة 0 لفحوص الغرفة) وvarAT (Room أو Equipment) وvarCat (نوع الغرفة أو المعدات). وعندها لا يحتاج معرض الأسئلة إلا إلى عامل تصفية واحد:
SortByColumns(Filter(colQ, AppliesTo.Value = varAT && (Category = "All" || Category = varCat)), "SortOrder")
تعرض أسئلة Pass / Fail ثلاثة أزرار، وتعرض أسئلة Reading وNote مربع نص، ولكل سؤال مربع للتعليق. وتُحفظ كل إجابة في SharePoint فورًا، فلا يضيع شيء إذا انقطع اتصال Wi-Fi عن الجهاز اللوحي في منتصف المبنى. تنشئ الخاصية OnSelect للزر Fail النتيجة في المرة الأولى ثم تحدّثها بعد ذلك:
With({cur: LookUp(colRes, QuestionID = ThisItem.ID && RoomID = varRoom.ID && EquipmentID = varEquipID)},
If(IsBlank(cur),
Collect(colRes, Patch('Inspection Results', Defaults('Inspection Results'), {Title: ThisItem.Title, InspectionID: varInsp.ID, SiteID: varInsp.SiteID, BuildingID: varRoom.BuildingID, RoomID: varRoom.ID, EquipmentID: varEquipID, TargetType: {Value: varAT}, TargetName: varTargetName, QuestionID: ThisItem.ID, Answer: "Fail", IsFail: true})),
Patch(colRes, cur, Patch('Inspection Results', cur, {Answer: "Fail", IsFail: true}))))تتحول الصفوف غير المطابقة إلى الأحمر الفاتح باستخدام دالة LookUp نفسها في الخاصية Fill للصف. ويبقى الزر Complete inspection معطّلًا إلى أن تتم الإجابة عن كل الفحوص:
If(Coalesce(varTotal, 0) > 0 && CountRows(Filter(colRes, !IsBlank(Answer))) >= varTotal, DisplayMode.Edit, DisplayMode.Disabled)
يضبط الإنجاز Status على Completed مع CompletedOn وCompletedBy وAnswered وFailed، ثم يتولى مسار العمل في الخطوة 7 الباقي.
الخطوة 6: تمكين مسؤولي المواقع من إدارة أسئلتهم
شاشة Manage sites هي المكان الذي يدير منه مسؤولو المواقع مواقعهم دون الاتصال بقسم تقنية المعلومات. في الأعلى يحددون تكرار التفتيش وموعد الاستحقاق التالي. وفي الأسفل يختارون أسئلة Room أو Equipment وفئة ما، فيرون قائمة الفحص الخاصة بالموقع بالترتيب.

يحتوي كل صف على سؤال قابل للتعديل، وسهمين للأعلى والأسفل، وزر Active. يبدّل السهم العلوي قيمة SortOrder مع السؤال الذي يعلوه:
With({prev: Last(Filter(colAdmQ, SortOrder < ThisItem.SortOrder))},
If(!IsBlank(prev),
Patch('Site Questions', LookUp('Site Questions', ID = ThisItem.ID), {SortOrder: prev.SortOrder});
Patch('Site Questions', LookUp('Site Questions', ID = prev.ID), {SortOrder: ThisItem.SortOrder});
Select(btnReloadQ)))تبقى الأسئلة المخفية في القائمة للاحتفاظ بالسجل، لكنها تختفي من عمليات التفتيش الجديدة لأن شاشة التفتيش لا تحمّل إلا الأسئلة النشطة.
على اليمين، تعرض المكتبة الرئيسية (Master library) أسئلة الفئة نفسها التي لم يستخدمها هذا الموقع بعد، ولكل منها زر Add:
Filter('Master Questions', Active && AppliesTo.Value = varAdmAT && Category = ddCat.Selected.Value && !(ID in colAdmQ.MasterID))
بالنسبة إلى موقع جديد كليًا، ينسخ الزر Import all master questions كل سؤال رئيسي نشط تطابق فئته نوع غرفة أو نوع معدات في ذلك الموقع (إضافةً إلى أسئلة All):
ClearCollect(colSiteCats, {Cat: "All"});
Collect(colSiteCats, ForAll(Filter(Rooms, SiteID = ddSite.Selected.ID), {Cat: ThisRecord.RoomType.Value}));
Collect(colSiteCats, ForAll(Filter(Equipment, SiteID = ddSite.Selected.ID), {Cat: ThisRecord.EquipmentType.Value}));
ClearCollect(colExisting, Filter('Site Questions', SiteID = ddSite.Selected.ID));
ForAll(Filter('Master Questions', Active) As m, If(m.Category in colSiteCats.Cat && !(m.ID in colExisting.MasterID), Patch('Site Questions', Defaults('Site Questions'), {Title: m.Title, SiteID: ddSite.Selected.ID, MasterID: m.ID, AppliesTo: {Value: m.AppliesTo.Value}, Category: m.Category, AnswerType: {Value: m.AnswerType.Value}, SortOrder: m.SortOrder, Active: true})))يتيح مربع نص ومحدد لنوع الإجابة في الأسفل إضافة أسئلة خاصة بالموقع مع MasterID 0، مثل «زجاج الخزانة سليم والمطرقة موجودة» لخزائن طفايات الحريق في أحد المباني.
الخطوة 7: إرسال بريد إلكتروني إلى مسؤول الموقع عند انتهاء التفتيش
أنشئ مسار عمل سحابيًا تلقائيًا (Automated cloud flow) باسم Inspection Completed Summary باستخدام مشغّل SharePoint When an item is created or modified على Inspections. وفي إعدادات (Settings) المشغّل، أضف شرط التشغيل التالي حتى لا يعمل إلا مرة واحدة لكل تفتيش منجز:
@and(equals(triggerOutputs()?['body/Status/Value'],'Completed'), not(equals(triggerOutputs()?['body/SummarySent'],true)))
ثم ينفذ مسار العمل ما يلي:
Get results: إجراء Get items على Inspection Results مع عامل التصفية InspectionID eq معرّف المشغّل وTop Count بقيمة 5000.
Failed items: إجراء Filter array حيث IsFail يساوي true.
Failed rows: إجراء Select يربط Location (TargetName) وCheck (Title) وAnswer وComments.
Failed table: إجراء Create HTML table من مخرجات Select.
Get site admins وAdmin emails: النمط نفسه المستخدم في مسار الجدولة.
Mark summary sent: إجراء Update item مع SummarySent = Yes، إضافةً إلى عددي Answered وFailed. وبفضل شرط التشغيل، لا يعيد هذا التحديث تشغيل مسار العمل.
Email site admins: شارة حمراء أو خضراء، والموقع، وتاريخ الاستحقاق، ومن أنجز التفتيش ومتى، وجدول البنود غير المطابقة (أو «No issues found»).

لا يطبّق Create HTML table أي تنسيق، لذا غلّفه بدالة replace سريعة لإضافة حدود وترويسة مظللة:
replace(replace(body('Failed_table'),'<table>','<table style="border-collapse:collapse" border="1" cellpadding="6">'),'<th>','<th style="background:#f0f4f8;text-align:left">')
الخطوة 8: عرض النتائج للمسؤولين
تعرض شاشة Results عمليات التفتيش المنجزة مع شارة بعدد البنود غير المطابقة. حدد إحداها لرؤية كل الإجابات، مع ترتيب الفحوص غير المطابقة في الأعلى:
SortByColumns(Filter('Inspection Results', InspectionID = varResInsp.ID), "IsFail", SortOrder.Descending, "TargetName", SortOrder.Ascending)
عقبات واجهناها أثناء البناء
القوائم المنسدلة الكلاسيكية: عندما تكون Items صيغةً، يظهر الحقل Value في جزء الخصائص باللون الرمادي ولا يمكن تعيينه من شريط الصيغة. اضبط Items أولًا على القائمة العادية، واختر العمود (مثل Site)، ثم أعد الصيغة.
المعارض: تقع التسميات فوق الصف، لذا فإن النقر على النص لا يحدد الصف. اضبط الخاصية OnSelect لكل تسمية على Select(Parent).
القيمة الفارغة ليست صفرًا في Power Fx. فالتعبير If(varTotal = 0, ...) يُرجع false ما دام varTotal فارغًا، ولذلك يُطلق شريط التقدم الذي يقسم على varTotal الخطأ «division by zero». غلّف القيمة هكذا: Coalesce(varTotal, 0).
أعمدة Choice في عوامل تصفية OData: يعمل Status eq 'Completed' في Get items. أما في Power Apps فقارن Status.Value.
الأمان وقابلية التوسع
يعرض التطبيق لكل شخص عمليات التفتيش والمواقع الخاصة به فقط، لكن هذا تصفية وليس أمانًا. فأي شخص لديه صلاحية Contribute على القوائم يمكنه فتحها في SharePoint. وللنشر الفعلي:
امنح المشغّلين صلاحية Contribute على Inspections وInspection Results فقط، وصلاحية Read على قوائم الهيكل والأسئلة.
امنح مسؤولي المواقع صلاحية التعديل على Site Questions وSites من خلال مجموعة SharePoint لكل موقع، أو افصل الصلاحيات لكل عنصر من خلال مسار عمل، كما فعلنا في تطبيق طلبات الإجازة.
اجعل تعديل المكتبة الرئيسية مقتصرًا على المسؤولين العامّين.
يناسب SharePoint مئات المواقع وعشرات الآلاف من النتائج. وتستخدم عوامل التصفية هنا أعمدة Number وChoice لذا تُفوَّض، لكن «in» و«<>» لا تُفوَّض. وإذا تجاوز موقع ما 2,000 غرفة أو احتجت إلى أمان علائقي حقيقي، فانقل التصميم نفسه إلى Dataverse.
تجهيزه للتشغيل الفعلي
الصور: أضف عنصر تحكم Add picture إلى كل صف غير مطابق واحفظ الصورة مرفقًا بالنتيجة، أو في مكتبة مستندات مسماة باسم الموقع.
الإجراءات التصحيحية: اجعل مسار عمل الإنجاز ينشئ أمر عمل لكل بند غير مطابق في قائمة Corrective Actions (أو في نظام CMMS لديك) مع مسؤول وموعد استحقاق.
رموز QR: ضع رمز QR على باب كل غرفة وعلى كل قطعة من المعدات. ويتيح ماسح الرموز الشريطية في شاشة التفتيش الانتقال مباشرة إلى تلك الغرفة أو ذلك الأصل.
العمل دون اتصال: خزّن المجموعات مؤقتًا باستخدام SaveData وLoadData حتى يتمكن المشغّلون من تفتيش الأقبية ومواقف السيارات دون إشارة، ثم المزامنة عند عودة الاتصال.
التوقيعات: أضف عنصر إدخال بالقلم عند الإنجاز واحفظ الصورة مع التفتيش.
تكرارات مختلفة لكل مبنى أو لكل نوع من المعدات: انقل Frequency وNextDue إلى Buildings، أو أضف تكرارًا لكل سؤال رئيسي.
الجزء الممتع: لعبة «بينغو» مدير المرافق
ضع علامة على كل عبارة سمعتها هذا العام:
«المولّد بخير، شغّلناه... في وقت ما.»
طفاية حريق تُستخدم لتثبيت الباب مفتوحًا.
غرفة كهرباء تُستخدم أيضًا لتخزين زينة الأعياد.
«من معه مفتاح غرفة الميكانيكا؟»
لوح تفتيش شوهد آخر مرة في 2019.
ثلاث أو أكثر؟ سيعوّض هذا التطبيق تكلفته قبل تفتيش الحريق القادم.
هل تحتاج إلى مساعدة؟
تبني Smart Solutions حلول Power Apps وPower Automate لفرق العقارات وإدارة المرافق في كندا، من التفتيش وأوامر العمل إلى تطبيقات متكاملة لخدمات التشغيل الفني وإدارة عقود الإيجار. تواصل معنا وسنساعدك على تعميم هذا الحل في محفظتك العقارية، أو تكييفه مع مبانيك وقواعد الامتثال لديك.
هل تدير عقود الإيجار إلى جانب المباني؟ اطّلع على Frontage، نظام CRM للتأجير التجاري الذي نقدمه للوسطاء في كندا.




تعليقات