WorkFlowResultMessage <WorkFlowProcessMessage> IOperationFlowEngine.PreProcess(Guid tenantId, OperationWapper operation, WorkFlowProcessProperties properties)
        {
            var arrayList = new ArrayList {
                properties, operation.Data, tenantId
            };
            var resM = new WorkFlowResultMessage <WorkFlowProcessMessage>();


            var itsOperationProcess = WorkFlowCommon(tenantId, properties.EntityName, properties.SubTypeCode, operation.OperationType);

            if (itsOperationProcess.Count > 0)
            {
                //get its all process task
                var allTasks           = _managerWorkFlowProcessTask.GetWorkFlowProcessTask(tenantId, itsOperationProcess[0].WorkFlowId);
                var itsPreProcessTasks = new List <WorkFlowProcessTaskInfo>();
                foreach (var itsOperationProc in itsOperationProcess)
                {
                    if (itsOperationProc.ProcessType == (int)WorkFlowProcessType.PreProcess)
                    {
                        itsPreProcessTasks = (from allProcessTask in allTasks
                                              where itsOperationProc.WorkFlowProcessId == allProcessTask.WorkFlowProcessId
                                              orderby allProcessTask.SequenceCode
                                              select allProcessTask).ToList();
                    }
                }

                foreach (var itsPreProcessTask in itsPreProcessTasks)
                {
                    WorkFlowProcessMessage processResult = _processWorkFlow.OperationProcess(itsPreProcessTask.ProcessCode, arrayList);
                    if (!processResult.Success)
                    {
                        throw new CustomWorkflowException <WorkFlowMessage>(processResult.ErrorMessage.Code);
                    }
                    resM.Result = processResult;
                }
            }

            var resultArrayList = new ArrayList {
                properties
            };

            if (resM.Result != null && resM.Result.Data != null)
            {
                resultArrayList.Add(resM.Result.Data);
            }

            return(resM);
        }