public OperationResult SaveForm(XmlDocument xdoc, MSOWebServiceCallContextDTO context, byte[] formContent)
        {
            OperationResult result = OperationResult.OK;

            if (!validateContext(context, true))
            {
                result = OperationResult.InvalidContext;
                return(result);
            }

            switch (validateXmlData(xdoc, context))
            {
            case 0:
                result = OperationResult.InvalidXmlData;
                break;

            case -1:
                result = OperationResult.SchemaNotFound;
                break;

            case -2:
                result = OperationResult.XmlValidatorError;
                break;
            }

            MSOIntegrationDAO dao       = new MSOIntegrationDAO();
            OperationResult   tmpRes    = result;
            string            extension = null;

            try
            {
                extension = Path.GetExtension(dao.GetFormExtension(context.DocumentTypeID));
            }
            catch
            {
                return(OperationResult.DBConnectionError);
            }
            Guid tempFilename = Guid.NewGuid();

            try
            {
                int rv = dao.TrySaveExistingForm(xdoc, context);

                if (rv == 0 && tmpRes != OperationResult.OK)
                {
                    return(tmpRes);
                }

                rv = dao.SaveExistingForm(xdoc, context, tempFilename.ToString() + extension);

                switch (rv)
                {
                case -1:
                    result = OperationResult.InvalidDocument;
                    break;

                case -2:
                    result = OperationResult.InvalidTicket;
                    break;

                case -3:
                    result = OperationResult.TicketExpired;
                    break;

                case -4:
                    result = OperationResult.DocumentTypeChanged;
                    break;

                case -5:
                    result = OperationResult.DocumentContentChanged;
                    break;

                case -6:
                    result = OperationResult.InvalidFormHash;
                    break;
                }
            }
            catch (Exception)
            {
                result = OperationResult.UnableToSaveDocument;
                return(result);
            }

            if (result != OperationResult.OK)
            {
                return(result);
            }

            string filePath = Path.Combine(Pemi.Esoda.Tools.MSOIntegrationHelper.MSOProcessingHelper.MSODirectoryPath, tempFilename.ToString() + extension);

            try
            {
                File.WriteAllBytes(filePath, formContent);
            }
            catch
            {
                return(OperationResult.UnableToSaveFormContent);
            }
            dao.DeleteTicket(context);
            return(result);
        }