public FailureProcessingResult ProcessFailures(FailuresAccessor data) { if (isDoorFail) { isDoorFail = false; return(FailureProcessingResult.ProceedWithRollBack); } else { IList <FailureResolutionType> resolutionTypeList = new List <FailureResolutionType>(); IList <FailureMessageAccessor> failList = new List <FailureMessageAccessor>(); // Inside event handler, get all warnings failList = data.GetFailureMessages(); foreach (FailureMessageAccessor failure in failList) { FailureDefinitionId failId = failure.GetFailureDefinitionId(); string failureMessage = failure.GetDescriptionText(); FailureSeverity severity = failure.GetSeverity(); resolutionTypeList = data.GetAttemptedResolutionTypes(failure); foreach (ElementId id in failure.GetFailingElementIds()) { int elementId = id.IntegerValue; } } return(FailureProcessingResult.Continue); } }
FailureProcessingResult FixFailures(FailuresAccessor failuresAccessor, IEnumerable <FailureDefinitionId> failureIds) { foreach (var failureId in failureIds) { int solvedErrors = 0; foreach (var error in failuresAccessor.GetFailureMessages().Where(x => x.GetFailureDefinitionId() == failureId)) { if (!failuresAccessor.IsFailureResolutionPermitted(error)) { continue; } // Don't try to fix two times same issue if (failuresAccessor.GetAttemptedResolutionTypes(error).Any()) { continue; } AddRuntimeMessage(error, true); failuresAccessor.ResolveFailure(error); solvedErrors++; } if (solvedErrors > 0) { return(FailureProcessingResult.ProceedWithCommit); } } return(FailureProcessingResult.Continue); }
static private bool GetFailureResolutionType(FailuresAccessor failuresAccessor, FailureMessageAccessor failure, ref FailureResolutionType type) { IList <FailureResolutionType> resolutionTypeList = failuresAccessor.GetAttemptedResolutionTypes(failure); if (!resolutionTypeList.Contains(FailureResolutionType.Default) && failure.HasResolutionOfType(FailureResolutionType.Default)) { type = FailureResolutionType.Default; return(true); } else if (!resolutionTypeList.Contains(FailureResolutionType.CreateElements) && failure.HasResolutionOfType(FailureResolutionType.CreateElements)) { type = FailureResolutionType.CreateElements; return(true); } else if (!resolutionTypeList.Contains(FailureResolutionType.DeleteElements) && failure.HasResolutionOfType(FailureResolutionType.DeleteElements)) { type = FailureResolutionType.DeleteElements; return(true); } else if (!resolutionTypeList.Contains(FailureResolutionType.SkipElements) && failure.HasResolutionOfType(FailureResolutionType.SkipElements)) { type = FailureResolutionType.SkipElements; return(true); } else if (!resolutionTypeList.Contains(FailureResolutionType.MoveElements) && failure.HasResolutionOfType(FailureResolutionType.MoveElements)) { type = FailureResolutionType.MoveElements; return(true); } else if (!resolutionTypeList.Contains(FailureResolutionType.FixElements) && failure.HasResolutionOfType(FailureResolutionType.FixElements)) { type = FailureResolutionType.FixElements; return(true); } else if (!resolutionTypeList.Contains(FailureResolutionType.DetachElements) && failure.HasResolutionOfType(FailureResolutionType.DetachElements)) { type = FailureResolutionType.DetachElements; return(true); } else if (!resolutionTypeList.Contains(FailureResolutionType.QuitEditMode) && failure.HasResolutionOfType(FailureResolutionType.QuitEditMode)) { type = FailureResolutionType.QuitEditMode; return(true); } else if (!resolutionTypeList.Contains(FailureResolutionType.UnlockConstraints) && failure.HasResolutionOfType(FailureResolutionType.UnlockConstraints)) { type = FailureResolutionType.UnlockConstraints; return(true); } else if (!resolutionTypeList.Contains(FailureResolutionType.SetValue) && failure.HasResolutionOfType(FailureResolutionType.SetValue)) { type = FailureResolutionType.SetValue; return(true); } else if (!resolutionTypeList.Contains(FailureResolutionType.SaveDocument) && failure.HasResolutionOfType(FailureResolutionType.SaveDocument)) { type = FailureResolutionType.SaveDocument; return(true); } else if (!resolutionTypeList.Contains(FailureResolutionType.ShowElements) && failure.HasResolutionOfType(FailureResolutionType.ShowElements)) { type = FailureResolutionType.ShowElements; return(true); } else if (!resolutionTypeList.Contains(FailureResolutionType.Others) && failure.HasResolutionOfType(FailureResolutionType.Others)) { type = FailureResolutionType.Others; return(true); } return(false); }