/// <summary>
        /// Get Params of sourcePartyId,partyName,Address from returned xml data
        /// </summary>
        /// <param name="xdoc"></param>
        /// <returns></returns>
        private List<PartySearchResult> ReadXML(XDocument xDoc)
        {
            Instrument instrument = new Instrument();
            List<PartySearchResult> partyResults = (from party in xDoc.Descendants("partySearchResults").Elements("partySearchResult")
                                               select new PartySearchResult
                                               {
                                                   SourcePartyId = party.Element("sourcePartyId").Value,
                                                   PartyName = party.Element("partyName").Value,
                                                   PrimaryAddresses = (from address in party.Element("primaryAddresses").Elements("address")
                                                                       select new Address
                                                                       {
                                                                           AddressLine = (instrument.GetElementValue(address.Element("addressLine1")) + " " + instrument.GetElementValue(address.Element("addressLine2"))).Trim(),
                                                                           City = instrument.GetElementValue(address.Element("city")),

                                                                           State = instrument.GetElementValue(address.Element("state").Element("code")),

                                                                           ZipCode = instrument.GetElementValue(address.Element("postalCode"))
                                                                       }).ToList(),
                                               }).ToList();

            return partyResults;
        }
        /// <summary>
        /// sample:
        /// partyId = 5fed522f-4f34-4db6-8385-5802ea6e219d
        /// sourcePartyId = b1fd3502-3b31-465a-a0b8-cd844bd7004a
        /// string sbParam = "<getPartyDetailRequest><sourcePartyId>sourcePartyId</sourcePartyId></getPartyDetailRequest>";
        /// string url = "http://10.22.53.151:9080/USMDMV2/REST/party?" + sbParam;
        /// </summary>
        /// <param name="sourcePartyId"></param>
        /// <returns></returns>
        public object GetPartyDetails(string sourcePartyId)
        {
            //input param check
            if (string.IsNullOrEmpty(sourcePartyId))
            {
                return null;
            }

            //params defines
            string responeContent = string.Empty;
            string serviceURL = string.Empty;
            serviceURL = Constants.APIURL_Prodect;
            StringBuilder sbParam = new StringBuilder();
            Instrument inStrument = new Instrument();
            PartyDetailSearchResult partyResult = new PartyDetailSearchResult();

            //Get URL
            sourcePartyId = inStrument.HandleSpecialCharacters(sourcePartyId);
            sbParam = GetParams(sourcePartyId);
            serviceURL = serviceURL + "?" + sbParam.ToString();

            //Init http request
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(serviceURL);
            httpWebRequest.ContentType = "application/xml";
            httpWebRequest.Method = "POST";
            httpWebRequest.Headers.Add("usmdm-action", "GET");
            httpWebRequest.Headers.Add("APIkey", Constants.APIkey_Product);
            httpWebRequest.Headers.Add("APIKeySecret", Constants.APIKeySecret_Product);

            //send http request
            byte[] bStream = System.Text.Encoding.Default.GetBytes(sbParam.ToString());
            httpWebRequest.ContentLength = bStream.Length;
            using (Stream stream = httpWebRequest.GetRequestStream())
            {
                stream.Write(bStream, 0, bStream.Length);
            }
            try
            {
                //Get http response
                HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), UTF8Encoding.UTF8);
                responeContent = streamReader.ReadToEnd();
                httpWebResponse.Close();
                streamReader.Close();

                if (responeContent.Trim().Length <= 0)
                {
                    return null;
                }

                //rebuild the returned xml data
                XmlDocument xmlDoc = inStrument.GetXmlDocByXmlContent(responeContent);
                string[] paramArray = { };
                string statusValue = inStrument.GetNodeValue(xmlDoc, "overallStatus", paramArray);
                string statusDesc = inStrument.GetNodeValue(xmlDoc, "statusMessageDescription", paramArray);

                XDocument xdoc = XDocument.Parse(responeContent);
                if (statusValue.Equals("Success"))
                {
                    partyResult = GetPartyFromXML(xdoc);
                    //res = new JavaScriptSerializer().Serialize(GetPartyFromXML(xdoc));
                }
                else
                {
                    partyResult.IndependenceStatus = statusDesc;
                    partyResult.IndependenceStatusCode = "-1";
                }
            }
            catch (Exception ex)
            {
                partyResult.IndependenceStatusCode = "-1";
                partyResult.IndependenceStatus = ex.Message;
            }
            return partyResult;
        }
        /// <summary>
        /// api/GetCompanyStatus?partyname=Morgan&city=Burbank&state=CA
        /// </summary>
        /// <param name="partyName">Morgan</param>
        /// <param name="city">Burbank</param>
        /// <param name="state">CA</param>
        /// <returns></returns>
        public List<PartySearchResult> GetParties(string partyName, string city, string state)
        {
            //build request
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(Constants.APIURL_Prodect);
            httpWebRequest.Method = "POST";
            httpWebRequest.ContentType = "application/xml";
            httpWebRequest.Headers.Add("usmdm-action", "SB4C");
            httpWebRequest.Headers.Add("APIkey", Constants.APIkey_Product);
            httpWebRequest.Headers.Add("APIKeySecret", Constants.APIKeySecret_Product);

            //pass data
            Instrument inStrument = new Instrument();
            string sbParam = string.Format(DATA, inStrument.HandleSpecialCharacters(partyName), inStrument.HandleSpecialCharacters(city), inStrument.HandleSpecialCharacters(state));
            byte[] formData = UTF8Encoding.UTF8.GetBytes(sbParam);
            httpWebRequest.ContentLength = formData.Length;
            using (Stream postStream = httpWebRequest.GetRequestStream())
            {
                postStream.Write(formData, 0, formData.Length);
            }

            //get response
            string response = string.Empty;
            try
            {
                WebResponse webResponse = httpWebRequest.GetResponse();
                using (Stream webStream = webResponse.GetResponseStream())
                {
                    if (webStream != null)
                    {
                        using (StreamReader responseReader = new StreamReader(webStream))
                        {
                            response = responseReader.ReadToEnd();
                        }
                    }
                }
            }
            catch (Exception)
            {
                //To do log the exception
            }
            XDocument xDoc = XDocument.Parse(response);
            return ReadXML(xDoc);
            //var XMLLoadfullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "XMLFile_Hardcode_Source.xml");
            //XDocument xdoc = XDocument.Load(XMLLoadfullPath);
            //List<PartySearchResult> Parties = ReadXML(xdoc);
            //string output = new JavaScriptSerializer().Serialize(Parties);
            //return output;
        }
 /// <summary>
 /// Get party details of code and desc in xml
 /// </summary>
 /// <param name="xmlDoc"></param>
 /// <returns></returns>
 private PartyDetailSearchResult GetPartyFromXML(XDocument xmlDoc)
 {
     Instrument inStrument = new Instrument();
     List<SourceParty> sourceParties = (from sourceParty in xmlDoc.Descendants("responseGetParty").Elements("party")
                                  select new SourceParty
                                        {
                                            independenceRestrictionStatus = new CodeDesc
                                            {
                                                Code = inStrument.GetElementValue(sourceParty.Element("independenceRestrictionStatus").Element("code")), //需要返回的Independence status code
                                                Desc = inStrument.GetElementValue(sourceParty.Element("independenceRestrictionStatus").Element("desc")), //需要返回的Independence status
                                            }
                                        }).ToList();
     PartyDetailSearchResult partyDetailSearchResult = new PartyDetailSearchResult
     {
         IndependenceStatus = sourceParties[0].independenceRestrictionStatus.Desc,
         IndependenceStatusCode = sourceParties[0].independenceRestrictionStatus.Code
     };
     return partyDetailSearchResult;
 }