public XDocument SaveBusinessObject(FinancialDocument document) { DictionaryMapper.Instance.CheckForChanges(); this.CorrectDocumentConsistency(document); //Bezwarunkowo skopiuj kontrahenta z dokumentu do płatności. document.Payments.CopyDocumentContractor(); //load alternate version if (!document.IsNew) { IBusinessObject alternateBusinessObject = this.mapper.LoadBusinessObject(document.BOType, document.Id.Value); document.SetAlternateVersion(alternateBusinessObject); } //validate document.Validate(); this.ExecuteCustomLogic(document); //update status document.UpdateStatus(true); if (document.AlternateVersion != null) { document.AlternateVersion.UpdateStatus(false); } SqlConnectionManager.Instance.BeginTransaction(); try { DictionaryMapper.Instance.CheckForChanges(); this.mapper.CheckBusinessObjectVersion(document); DocumentLogicHelper.AssignNumber(document, this.mapper); this.ExecuteLogicDuringTransaction(document); this.ValidateDuringTransaction(document); //Make operations list XDocument operations = XDocument.Parse("<root/>"); document.SaveChanges(operations); if (document.AlternateVersion != null) { document.AlternateVersion.SaveChanges(operations); } bool generateComPackage = false; if (operations.Root.HasElements) { this.mapper.ExecuteOperations(operations); this.mapper.UpdateDictionaryIndex(document); generateComPackage = true; } Coordinator.LogSaveBusinessObjectOperation(); document.SaveRelatedObjects(); operations = XDocument.Parse("<root/>"); document.SaveRelations(operations); if (document.AlternateVersion != null) { ((FinancialDocument)document.AlternateVersion).SaveRelations(operations); } if (operations.Root.HasElements) { this.mapper.ExecuteOperations(operations); generateComPackage = true; } this.ValidateAfterSave(document); this.mapper.UpdateDocumentInfoOnPayments(document); this.mapper.DeleteDocumentAccountingData(document); if (generateComPackage) { this.mapper.CreateCommunicationXml(document); if (operations.Root.HasElements) { this.mapper.CreateCommunicationXmlForDocumentRelations(operations); //generowanie paczek dla relacji dokumentow } } XDocument returnXml = XDocument.Parse(String.Format(CultureInfo.InvariantCulture, "<root><id>{0}</id></root>", document.Id.ToUpperString())); //Custom validation this.mapper.ExecuteOnCommitValidationCustomProcedure(document); if (this.coordinator.CanCommitTransaction) { if (!ConfigurationMapper.Instance.ForceRollbackTransaction) { SqlConnectionManager.Instance.CommitTransaction(); } else { SqlConnectionManager.Instance.RollbackTransaction(); } } return(returnXml); } catch (SqlException sqle) { RoboFramework.Tools.RandomLogHelper.GetLog().Debug("FractusRefactorTraceCatch:65"); Coordinator.ProcessSqlException(sqle, document.BOType, this.coordinator.CanCommitTransaction); throw; } catch (Exception) { RoboFramework.Tools.RandomLogHelper.GetLog().Debug("FractusRefactorTraceCatch:66"); if (this.coordinator.CanCommitTransaction) { SqlConnectionManager.Instance.RollbackTransaction(); } throw; } }