Quantcast
Channel: SharePoint 2013 - Development and Programming forum
Viewing all articles
Browse latest Browse all 25064

Save conflict error in sharepoint 2010

$
0
0

I am trying to add a set of documents and folders through webservice.While creating the documents when two users try to access the document library with diffrent files and folders i am getting this save conflict error.Note:At no instant will 2 users be able to access the same file or folders as it is handled ny a lock in the calling application.

But when multiple users try to add documents to the library this error occurs.

Any help in ny form is appreciated.I am unable to identify the problem statement here !! :( The code snippet is as below:

   #region Create Folder structures   in Sharepoint
        private void Create_Folders(string LoanID, string PackName, string PackNo, string customerName)
        {
            try
            {

                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    //Get sharepoint url and document library name from Constants file
                    string SharepointUrl = ConfigValues.SharePointRootUrl;
                    // string DocLib = Constants.SharepointDoclib;
                    string DocLib = ConfigValues.DocumentLibraryName;

                    SPSite _MySite = new SPSite(SharepointUrl);
                    SPWeb _MyWeb = _MySite.OpenWeb();
                    SPDocumentLibrary _MyDocLibrary = (SPDocumentLibrary)_MyWeb.Lists[DocLib];
                    SPFolder folder = _MyWeb.GetFolder(SharepointUrl + DocLib + "/" + LoanID + "/" + PackName + "-" + PackNo);
                    SPFolderCollection _MyFolders = _MyWeb.Folders;

                    //Check if folder with the same loan id already exists within the document library
                    bool sflag = FolderExists(SharepointUrl + DocLib + "/" + LoanID, _MyWeb);

                    //Only if the folder does ot exist ,a new folder would be created,
                    //else the existing folder would be verified to check if a folder with the same pack name already exists.
                    if (!sflag)
                    {
                        
                        _MyWeb.AllowUnsafeUpdates = true;
                        _MySite.AllowUnsafeUpdates = true;

                        _MyFolders.Add(SharepointUrl + DocLib + "/" + LoanID);


                        _MyDocLibrary.Update();
                        _MyWeb.Update();

                        _MyWeb.AllowUnsafeUpdates = false;
                        _MySite.AllowUnsafeUpdates = false;

                        if (ConfigValues.LogTraceFlag == "true")
                        {
                            Diagnostics.WriteToTopUpsDiagnosticsLog(Constants.CreateInfoLog, "Create_Folders()", LoanID, "Loan Folder Created successsfully");
                        }

                    }

                    else
                    {
                        if (ConfigValues.LogTraceFlag == "true")
                        {
                            Diagnostics.WriteToTopUpsDiagnosticsLog(Constants.CreateInfoLog, "Create_Folders()", LoanID, "Loan Folder already exists");
                        }
                    }


                    //Creation of Pack Folders

                    _MyWeb.AllowUnsafeUpdates = true;
                    _MySite.AllowUnsafeUpdates = true;


                    //Set properties for Loan Folder
                    SPFolder loanfolder = _MyWeb.GetFolder(SharepointUrl + DocLib + "/" + LoanID);

                    loanfolder.Item["InvolvedParty"] = customerName;
                    loanfolder.Item.Update();
                    if (ConfigValues.LogTraceFlag == "true")
                    {
                        Diagnostics.WriteToTopUpsDiagnosticsLog(Constants.CreateInfoLog, "Create_Folders()", LoanID, "Updated customer name to the loan folder");
                    }
                    _MyDocLibrary.Update();
                    _MyWeb.Update();

                    //If a folder with the same name already exists,delete the exisitng folder
                    if (folder.Exists)
                    {
                        SPFileCollection fileCollection = folder.Files;

                        //Get the list of files inside the existing pack folder and verify if any of the files
                        //are checked out or locked by any user.If the file is checked out,undocheckout is given and
                        //then the entire Pack Folder is deleted


                        for (int fileIndex = 0; fileIndex < fileCollection.Count; fileIndex++)
                        {
                            if (fileCollection[fileIndex].CheckedOutBy != null)
                            {
                                fileCollection[fileIndex].UndoCheckOut();

                            }
                        }

                        _MyDocLibrary.Update();
                        _MyWeb.Update();

                        //Delete Pack Folder
                        folder.Delete();

                        _MyDocLibrary.Update();
                        _MyWeb.Update();


                        if (ConfigValues.LogTraceFlag == "true")
                        {
                            Diagnostics.WriteToTopUpsDiagnosticsLog(Constants.CreateInfoLog, "Create_Folders()", LoanID, "Pack folder with the same name already exists.Hence deleted");
                        }

                    }


                    //Now add a folder with the same pack name

                    _MyFolders.Add(SharepointUrl + DocLib + "/" + LoanID + "/" + PackName + "-" + PackNo);

                    if (ConfigValues.LogTraceFlag == "true")
                    {
                        Diagnostics.WriteToTopUpsDiagnosticsLog(Constants.CreateInfoLog, "Create_Folders()", LoanID, "Pack folder created succesfully" + PackName + "-" + PackNo);
                    }

                    _MyDocLibrary.Update();
                    _MyWeb.Update();

                    _MyWeb.AllowUnsafeUpdates = false;
                    _MySite.AllowUnsafeUpdates = false;

                    //Perform Cleanup
                    _MyWeb.Dispose();
                    _MySite.Dispose();

                    if (ConfigValues.LogTraceFlag == "true")
                    {
                        Diagnostics.WriteToTopUpsDiagnosticsLog(Constants.CreateInfoLog, "Create_Folders()", LoanID, "Pack folder step completed" + PackName + "-" + PackNo);
                    }

                });

            }

            catch (Exception e)
            {
                if (ConfigValues.LogTraceFlag == "true")
                {
                    Diagnostics.WriteToTopUpsDiagnosticsLog(Constants.CreateErrorLog, "Create_LoanFolder()", LoanID, "Unable to Create Loan/Pack Folder-" + e.Message);
                }
                TechMessage = Constants.ERR_GENERAL + e.Message;
                StatusType = ResponseType.Error;
                StatusCode = ResponseType.ErrorCode_3;
                errormessage = e.Message;
                throw e;

            }

        }
        #endregion

#region Read all the documents and its Properties
        private string StoreDocuments(XmlDocument xdoc, string LoanFolder, string Documentpath)
        {

            XPathNavigator nav;
            string strPackName = string.Empty;
            // string Docs;

            nav = xdoc.CreateNavigator();
            XmlElement xe = xdoc.DocumentElement;
            XmlNodeList lstTitles = xdoc.GetElementsByTagName("Message:Document");
            int no = lstTitles.Count;
            StringBuilder responseXML = new StringBuilder();
            string XMLresp = string.Empty;
            ArrayList DocumentNames = new ArrayList();

            if (ConfigValues.LogTraceFlag == "true")
            {
                Diagnostics.WriteToTopUpsDiagnosticsLog(Constants.CreateInfoLog, "StoreDocuments()", LoanFolder, "Creation of documents commenced Step commenced");
            }

            try
            {

                foreach (XmlNode node in lstTitles)
                {
                    XmlNodeList prop = node.ChildNodes;
                    int count = prop.Count;
                    string Documentdata = string.Empty;
                    string xmldocumentname = string.Empty;
                    string xml_documentname = string.Empty;
                    string xmlFormID = string.Empty;
                    string xmlDateAndTime = string.Empty;
                    string xmlPrintOrder = string.Empty;
                    string xmlRenditionType = string.Empty;
                    string created_date = string.Empty;
                    string xmlEditable = string.Empty;
                    string created_byuser = string.Empty;

                    foreach (XmlNode document in prop)
                    {


                        // to extract the document base 64 content
                        if (document.Name == "Message:Data")
                        {
                            Documentdata = document.FirstChild.InnerText;
                        }


                        // to extract the metadata related to each document
                        else
                        {
                            if (document.Name == "Message:KeywordIndex")
                            {
                                XmlNodeList keywordlist = document.ChildNodes;

                                foreach (XmlNode keywords in keywordlist)
                                {
                                    string docattribute = keywords.Attributes["Name"].Value.ToString();
                                    string sdocname = Constants.Attribute_DocumentName.ToString();
                                    string sformid = Constants.Attribute_FormID.ToString();
                                    string sdate = Constants.Attribute_Date.ToString();
                                    string sprintorder = Constants.Attribute_PrintOrder.ToString();
                                    string srendition = Constants.Attribute_Rendition.ToString();
                                    string seditable = Constants.Attribute_Editable.ToString();

                                    if (docattribute != null)
                                    {
                                        switch (docattribute)
                                        {
                                            case "DocumentName":

                                                xmldocumentname = keywords.InnerText;

                                                break;

                                            case "FormID":

                                                xmlFormID = keywords.InnerText;
                                                break;

                                            case "DateAndTime":

                                                xmlDateAndTime = keywords.InnerText;
                                                break;

                                            case "PrintOrder":

                                                xmlPrintOrder = keywords.InnerText;
                                                break;

                                            case "RenditionType":

                                                xmlRenditionType = keywords.InnerText;
                                                break;

                                            case "Editable":

                                                xmlEditable = keywords.InnerText;

                                                break;
                                        }
                                    }

                                    else
                                    {
                                        Diagnostics.WriteToTopUpsDiagnosticsLog(Constants.CreateInfoLog, "StoreDocuments()", LoanFolder, "Document Metadata is null-" + docattribute);
                                    }


                                }

                            }
                        }

                    }

                    //Add documents to ArrayList

                    DocumentNames.Add(
                        new DocumentsNameList
                        {
                            DocumentName = xmldocumentname,

                        });


                    //Get count of same document names in array list

                    var DocumentCount = from DocumentsNameList doc in DocumentNames
                                        where doc.DocumentName == xmldocumentname
                                        select doc;


                    int NameCount = DocumentCount.Count();


                    // Check if document exists in the directory
                    if (xmldocumentname != null && Documentdata != null)
                    {
                        string SharepointUrl = ConfigValues.SharePointRootUrl;

                        string SharepointPath = ConfigValues.DocumentLibraryName;
                        byte[] binaryData1;


                        // Converting base 64 string to byte array to be added in the document library
                        binaryData1 = System.Convert.FromBase64String(Documentdata);

                        //Add the document name value to a temporay variable inorder to create the response xml
                        xml_documentname = xmldocumentname;

                        //Get append count-1 value to the 2nd document such that the 1st document is <documentname>,
                        //2nd document is <documentname>-1 and 3rd is <documentname>-2 and so on
                        int DocCount = 0;

                        if (NameCount > 1)
                        {
                            DocCount = NameCount - 1;
                            xmldocumentname = xmldocumentname + "-" + DocCount;
                        }


                        // Add document properties to the hash table
                        Hashtable properties = new Hashtable();
                        properties.Add("FormID", xmlFormID);
                        properties.Add("RenditionType", xmlRenditionType);
                        properties.Add("Modified_User", "System Account");


                        DateTime date = DateTime.Now;
                        date = date.AddHours(-10);

                        properties.Add("CreatedDate", date);

                        if (xmldocumentname != "CBAEnvelope")
                        {
                            properties.Add("XMLDateTime", xmlDateAndTime);
                            properties.Add("OrderNo", xmlPrintOrder);
                            properties.Add("Restricted Type", xmlEditable);
                        }

                        properties.Add("FileDisplayStatus", "0");

                        if (xmldocumentname == "CBAEnvelope")
                        {
                            xmldocumentname = "Data File";
                        }
                        // properties.Add("DocumentName", xmldocumentname);

                        SPSecurity.RunWithElevatedPrivileges(delegate()
                        {
                          
                            SPSite _MySite = new SPSite(SharepointUrl + SharepointPath + "/" + LoanFolder);
                            SPWeb _MyWeb = _MySite.OpenWeb();
                            string PackFolderPath = SharepointUrl + SharepointPath + "/" + LoanFolder + "/" + Documentpath + "/";
                            SPFolder DocLibrary = _MyWeb.GetFolder(PackFolderPath);
                           // _MyWeb.AllowUnsafeUpdates = true;
                           
                            //Add File name to the collection and get the file number

                            string SharepointFilepath = SharepointUrl + SharepointPath + "/" + LoanFolder + "/" + Documentpath;
                            SPFolder folder = _MyWeb.GetFolder(SharepointFilepath);
                            SPFileCollection fileCollection = folder.Files;

                            _MyWeb.AllowUnsafeUpdates = true;
                            _MySite.AllowUnsafeUpdates = true;


                            //Add file to the document library along with all the properties
                            SPFile file = DocLibrary.Files.Add(xmldocumentname + "." + xmlRenditionType, binaryData1, properties, false);

                             DocLibrary.Update();
                            _MyWeb.Update();

                            _MyWeb.AllowUnsafeUpdates = false;
                            _MySite.AllowUnsafeUpdates = false;

                            // Perform Clean Up
                            _MyWeb.Dispose();
                            _MySite.Dispose();


                        });


                        if (ConfigValues.LogTraceFlag == "true")
                        {
                            Diagnostics.WriteToTopUpsDiagnosticsLog("FileList", "StoreDocuments()",LoanFolder, xmldocumentname);

                        }

                    }

                  
            }

            catch (Exception e)
            {

                if (ConfigValues.LogTraceFlag == "true")
                {
                    Diagnostics.WriteToTopUpsDiagnosticsLog(Constants.CreateErrorLog, "StoreDocuments()-error while creating Document" , LoanFolder, e.Message);
                }
                TechMessage = ResponseType.Error;
                TechMessage = Constants.ERR_GENERAL;
                StatusCode = ResponseType.ErrorCode_1;
                errormessage = e.Message;
                throw e;
            }


            xdoc = null;

            //return the <tns:DocumentInformation> tag contents values back to the calling function
            return XMLresp;
        }
        #endregion


Viewing all articles
Browse latest Browse all 25064

Trending Articles