Enable the integration between Power Platform and SAP to announce changes in SAP to Power Platform asynchronously and so not in realtime, without coupling the both systems. A good design will take in consideration the existing design related to SAP (see image below).
...
Context and Problem
Current architecture implying a front door (micro-service) is mandatory. Direct access to SAP is not allowed.
No current integration between Power Platform and SAP. Power Platform is a SAAS in the public Internet even if it’s in the backbone of Microsoft.
For now, there is only a one-way communication, from SAP to Power Platform. Data transfered from SAP is not considered as confidential.
Data volume is not substantial : about 2 thousand records could be affected in Power Platform. Not a case of intensive computing and long-running functions.
Hybrid scenario is highly recommended regarding the current architecture related to SAP and the willing to upgrade the latter to Hana.
...
Solutions
Technology choices
Information below is established according the context (data volume, etc.). We know that Azure provides a multitude of services (as IAAS & ad PAAS).
...
Code Block | ||
---|---|---|
| ||
List<IExecutionContext> _executionContexts = new List<IExecutionContext>(); //Constructor public ManagerObjectValidation() { _executionContexts.Add(new Validate_KNA1()); _executionContexts.Add(new Validate_KNA1_KNVV()); //etc... } |
Execution of the method to valite the execution context
Code Block | ||
---|---|---|
| ||
public ResultValidation ProcessExecutionValidation(string key) { var result = new ResultValidation(); if(_executionContexts.Count > 0 ) { for(var i=0; i<= _executionContexts.Count -1; i++) { result = _executionContexts[i].ValidateExecutionContext(key); if (result.validated) { break; } } } else { result.errorMessage = Constantes.MessageFromManagerValidation; } return result; } |
Business Layer
Instanciation of the right process with the right execution context : instanciation in the Factory
Code Block | ||
---|---|---|
| ||
public IAbstractFactory InstanciateBuildingObject(EnumExecutionContext.UseCase executionContext)
{
IAbstractFactory instanciation = null;
switch (executionContext)
{
case EnumExecutionContext.UseCase.KNA1:
instanciation = new BuildingObjectKNA1();
break;
case EnumExecutionContext.UseCase.KNA1_KNVV:
instanciation = new BuildingObjectKNA1_KNVV();
break;
//etc...
}
return instanciation;
} |
Repository Layer