public void CheckPermissoinToEdit(DR_Requester requester, DR_ResultEdit result, List <QueryItem> allQueryItems) { BizTableDrivedEntity bizTableDrivedEntity = new BizTableDrivedEntity(); bool permission = true; foreach (var entityGroup in allQueryItems.GroupBy(x => x.TargetEntity.ID)) { if (!bizTableDrivedEntity.DataIsAccessable(requester, entityGroup.Key, new List <SecurityAction>() { SecurityAction.EditAndDelete })) { permission = false; var entity = allQueryItems.First(x => x.TargetEntity.ID == entityGroup.Key).TargetEntity; result.Details.Add(ToResultDetail("عدم دسترسی", "عدم دسترسی ثبت به موجودیت" + " " + entity.Alias, "")); } else if (bizTableDrivedEntity.DataIsReadonly(requester, entityGroup.Key)) { permission = false; var entity = allQueryItems.First(x => x.TargetEntity.ID == entityGroup.Key).TargetEntity; result.Details.Add(ToResultDetail("عدم دسترسی", "عدم دسترسی ثبت به موجودیت" + " " + entity.Alias, "")); } } if (permission) { BizColumn bizColumn = new BizColumn(); foreach (var query in allQueryItems) { foreach (var column in query.EditingProperties) { if (!bizColumn.DataIsAccessable(requester, column.ColumnID)) { permission = false; result.Details.Add(ToResultDetail("عدم دسترسی", "عدم دسترسی به ستون" + " " + column.Column.Alias, "")); } else if (column.IsChanged && bizColumn.DataIsReadonly(requester, column.ColumnID)) { permission = false; result.Details.Add(ToResultDetail("عدم دسترسی", "عدم دسترسی ثبت به ستون" + " " + column.Column.Alias, "")); } } } } if (permission == false) { result.Result = Enum_DR_ResultType.ExceptionThrown; result.Message = "خطا در ثبت"; } }
public DR_ResultEdit Process(DR_EditRequest request) { DR_ResultEdit result = new DR_ResultEdit(); var preEditQueryResults = new List <EditQueryPreItem>(); foreach (var item in request.EditPackages) { preEditQueryResults.Add(new EditQueryPreItem(item)); } actionActivityManager.DoBeforeEditActionActivities(request.Requester, preEditQueryResults); if (preEditQueryResults.Any(x => x.BeforeSaveActionActivitiesResult == Enum_DR_SimpleResultType.ExceptionThrown)) { var exceptionItem = preEditQueryResults.First(x => x.BeforeSaveActionActivitiesResult == Enum_DR_SimpleResultType.ExceptionThrown); result.Result = Enum_DR_ResultType.ExceptionThrown; var logResult = bizLogManager.AddLog(GetBeforeSaveExceptionLog(exceptionItem), request.Requester); if (!string.IsNullOrEmpty(logResult)) { result.Details.Add(ToResultDetail("خطا در ثبت لاگ", "", logResult)); } result.Details.Add(ToResultDetail(exceptionItem.DataItem.ViewInfo, "فعالیتهای قبل از ذخیره شدن داده با خطا همراه بود", exceptionItem.BeforeSaveActionActivitiesMessage)); } else { //var internalResult = GetInternalResult(request as DR_EditRequest); var allQueryItems = editQueryItemManager.GetQueryItems(request.Requester, request.EditPackages); if (allQueryItems.Any(x => string.IsNullOrEmpty(x.Query))) { throw new Exception("sdfsdf"); } CheckPermissoinToEdit(request.Requester, result, allQueryItems); if (result.Result == Enum_DR_ResultType.ExceptionThrown) { return(result); } var editQueryResults = new List <EditQueryResultItem>(); foreach (var item in allQueryItems) { editQueryResults.Add(new EditQueryResultItem(item)); } actionActivityManager.DoBeforeDeleteActionActivities(request.Requester, editQueryResults); if (editQueryResults.Any(x => x.BeforeSaveActionActivitiesResult == Enum_DR_SimpleResultType.ExceptionThrown)) { var exceptionItem = editQueryResults.First(x => x.BeforeSaveActionActivitiesResult == Enum_DR_SimpleResultType.ExceptionThrown); result.Result = Enum_DR_ResultType.ExceptionThrown; var logResult = bizLogManager.AddLog(GetBeforeDeleteExceptionLog(exceptionItem), request.Requester); if (!string.IsNullOrEmpty(logResult)) { result.Details.Add(ToResultDetail("خطا در ثبت لاگ", "", logResult)); } result.Details.Add(ToResultDetail(exceptionItem.QueryItem.DataItem.ViewInfo, "فعالیتهای قبل از ذخیره شدن داده با خطا همراه بود", exceptionItem.BeforeSaveActionActivitiesMessage)); } else { var transactionresult = ConnectionManager.ExecuteTransactionalQueryItems(allQueryItems); if (transactionresult.Successful) { actionActivityManager.DoAfterEditActionActivities(request.Requester, editQueryResults); var logResult = bizLogManager.AddLogs(GetUpdateDataSuccessfulLogs(editQueryResults), request.Requester); if (!string.IsNullOrEmpty(logResult)) { result.Details.Add(ToResultDetail("خطا در ثبت لاگ", "", logResult)); } foreach (var item in request.EditPackages) { var baseData = new DP_BaseData(item.TargetEntityID, item.TargetEntityAlias); var listKeyProperties = new List <EntityInstanceProperty>(); if (item.IsNewItem && item.KeyProperties.Any(x => x.IsIdentity)) { var dataItem = editQueryResults.First(x => x.QueryItem.DataItem == item).QueryItem.DataItem; foreach (var key in dataItem.KeyProperties) { baseData.Properties.Add(key); } } else { foreach (var key in item.KeyProperties) { baseData.Properties.Add(key); } } result.UpdatedItems.Add(baseData); } if (editQueryResults.Any(x => x.AfterSaveActionActivitiesResult == Enum_DR_SimpleResultType.ExceptionThrown)) { result.Result = Enum_DR_ResultType.JustMajorFunctionDone; foreach (var item in editQueryResults.Where(x => x.AfterSaveActionActivitiesResult == Enum_DR_SimpleResultType.ExceptionThrown)) { result.Details.Add(ToResultDetail(item.QueryItem.DataItem.ViewInfo, "فعالیتهای بعد از ذخیره شدن داده با خطا همراه بود", item.AfterSaveActionActivitiesMessage)); } } else { result.Result = Enum_DR_ResultType.SeccessfullyDone; } } else { result.Result = Enum_DR_ResultType.ExceptionThrown; if (editQueryResults.Any(x => x.DataUpdateResult == Enum_DR_SimpleResultType.ExceptionThrown)) { foreach (var item in transactionresult.QueryItems.Where(x => x.Exception != null)) { editQueryResults.First(x => x.QueryItem == item.QueryItem).DataUpdateMessage = item.Exception.Message; editQueryResults.First(x => x.QueryItem == item.QueryItem).DataUpdateResult = Enum_DR_SimpleResultType.ExceptionThrown; } var exceptionItem = editQueryResults.First(x => x.DataUpdateResult == Enum_DR_SimpleResultType.ExceptionThrown); var logResult = bizLogManager.AddLog(GetUpdateDataExceptionLog(exceptionItem), request.Requester); if (!string.IsNullOrEmpty(logResult)) { result.Details.Add(ToResultDetail("خطا در ثبت لاگ", "", logResult)); } result.Details.Add(ToResultDetail(exceptionItem.QueryItem.DataItem.ViewInfo, "ذخیره شدن داده با خطا همراه بود", exceptionItem.DataUpdateMessage)); } else { result.Details.Add(ToResultDetail("خطای عمومی ثبت", "ذخیره شدن داده با خطا همراه بود", transactionresult.Message)); } } } } return(result); }