← يتطلب: محرك التكامل التكامل متوسط ⏱ 6 ساعات الدورة 12

تصميم عمليات الأعمال

Business Operations & Services

🎯 أهداف التعلم

1تصميم Operations فعالة
2إنشاء Services متقدمة
3إدارة سياق العمليات
4معالجة الأخطاء

01 تصميم Operations

Operations مسؤولة عن إرسال الرسائل إلى الأنظمة الخارجية.

Class MyApp.Operation.HTTP Extends Ens.BusinessOperation {
  Parameter ADAPTER = "EnsLib.HTTP.OutboundAdapter";
  Method SendRequest(pRequest, Output pResponse) As %Status {
    Set http = ##class(%Net.HttpRequest).%New()
    Do http.EntityBody.Write(pRequest.ToJSON())
    Set sc = ..Adapter.SendFormDataArray(.resp, "POST", http)
    Set pResponse = ##class(MyApp.Response).%New()
    Set pResponse.Status = resp.StatusCode
    Return sc
  }
}

02 إدارة الأخطاء

معالجة الأخطاء بشكل صحيح أمر حاسم.

Method OnRetry(pRequest, pResponse, pError) As %Status {
  Set delay = $Case(..RetryCount, 0:1, 1:5, 2:15, :60)
  Hang delay
  Return $$$OK
}

03 Business Process المتقدمة

Business Processes تتيح تصميم منطق معالجة معقد.

// Business Process مع شروط
Class MyApp.Process.OrderProcess Extends Ens.BusinessProcess {
  Property MinAmount As %Numeric [ InitialExpression = 1000 ];
  
  Method OnRequest(request As MyApp.OrderRequest, Output response As MyApp.OrderResponse) {
    // التحقق من المبلغ
    If request.Amount > ..MinAmount {
      // موافقة تلقائية
      Set response = ##class(MyApp.OrderResponse).%New()
      Set response.Status = "Approved"
      Set response.Approver = "Auto"
    } Else {
      // إرسال للموافقة اليدوية
      Set sc = ..SendRequestSync("MyApp.Operation.Approval", request, .approvalResponse)
      Set response = approvalResponse
    }
    
    // تسجيل الحدث
    Do ..LogEvent("Order " _ request.OrderId _ ": " _ response.Status)
  }
}

04 Adapter Patterns المتقدمة

الـ Adapters هي الجسر بين IRIS والأنظمة الخارجية. كل بروتوكول له adapter خاص.

// HTTP Adapter - للتواصل مع REST APIs
Class MyApp.Operation.RESTCall Extends Ens.BusinessOperation {
  Parameter ADAPTER = "EnsLib.HTTP.OutboundAdapter";
  Property Adapter As EnsLib.HTTP.OutboundAdapter;
  
  Method SendRequest(pRequest, Output pResponse) As %Status {
    Set httpRequest = ##class(%Net.HttpRequest).%New()
    Set httpRequest.ContentType = "application/json"
    Do httpRequest.EntityBody.Write(pRequest.ToJSON())
    
    Set sc = ..Adapter.SendFormDataArray(.httpResponse, "POST", httpRequest)
    
    Set pResponse = ##class(MyApp.Response).%New()
    Set pResponse.Status = httpResponse.StatusCode
    Set pResponse.Body = httpResponse.Data.Read()
    Return sc
  }
}

// File Adapter - لقراءة/كتابة الملفات
Class MyApp.Operation.FileWriter Extends Ens.BusinessOperation {
  Parameter ADAPTER = "EnsLib.File.OutboundAdapter";
  Property Adapter As EnsLib.File.OutboundAdapter;
  
  Method WriteFile(pRequest, Output pResponse) As %Status {
    Set sc = ..Adapter.PutStream(pRequest.FileName, pRequest.Content)
    Return sc
  }
}

05 معالجة الأخطاء وإعادة المحاولة

معالجة الأخطاء بشكل صحيح في Operations أمر حاسم لضمان الموثوقية.

// Retry Policy مع تأخير متزايد
Method OnRetry(pRequest, pResponse, pError) As %Status {
  // تأخير متزايد: 1s, 5s, 15s, 60s
  Set delay = $Case(..RetryCount, 0:1, 1:5, 2:15, :60)
  Hang delay
  Return $$$OK
}

// Alert على الأخطاء المتكررة
Method OnError(pRequest, pResponse, pError) As %Status {
  If ..RetryCount >= 3 {
    // إرسال تنبيه بعد 3 محاولات فاشلة
    Do ..SendAlert(5001, "Operation failed after 3 retries: " _ $System.Status.GetErrorText(pError))
    
    // تسجيل في سجل الأخطاء
    Set log = ##class(MyApp.ErrorLog).%New()
    Set log.Operation = ..%ConfigName
    Set log.Error = $System.Status.GetErrorText(pError)
    Set log.Timestamp = $ZDT($H, 3)
    Set log.RetryCount = ..RetryCount
    Do log.%Save()
  }
  Return pError
}

// Circuit Breaker Pattern
Method CheckCircuitBreaker() As %Boolean {
  Set failures = $Get(^CircuitBreaker(..%ConfigName, "failures"), 0)
  If failures >= 5 {
    Set lastFailure = $Get(^CircuitBreaker(..%ConfigName, "lastFailure"), 0)
    If $H - lastFailure < 300 {
      Return 0  // Circuit open - لا ت试行
    }
    Kill ^CircuitBreaker(..%ConfigName)  // Reset
  }
  Return 1  // Circuit closed - 可以试行
}

📝 اختبار التحقق

1. ما هو دور Business Operation؟

Operations ترسل الرسائل إلى الأنظمة الخارجية

ما هو دور Business Process في محرك التكامل؟

Business Process يحتوي على منطق الأعمال ويتخذ القرارات بناءً على البيانات

ما هو Adapter في IRIS Interoperability؟
💡 الشرح

Adapter هو مكون يتعامل مع بروتوكولات الاتصال المختلفة (HTTP, TCP, File, etc)

💡 النقاط الرئيسية

  • Adapters توفر واجهات اتصال مع الأنظمة الخارجية
  • يمكنك إنشاء Services لاستقبال البيانات عبر بروتوكولات مختلفة
  • Operations المتقدمة تتضمن معالجة الأخطاء وإعادة المحاولة
  • مراقبة Production عبر Management Portal أو برمجياً
  • Exponential Backoff هو أفضل أسلوب لإعادة المحاولة