public IntershopWebService.TrackInfo GetTrackInfo(string company, string customerID, string salesID)
        {
            MessageLogger.info(string.Format("GetTrackInfo(company={0}, customerID={1}, salesID={2})", (object)company, (object)customerID, (object)salesID));
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            if (string.IsNullOrEmpty(customerID) || string.IsNullOrEmpty(salesID))
            {
                return new IntershopWebService.TrackInfo()
                       {
                           ErrorMsg  = "Please populate both lookup fields.",
                           ErrorCode = IntershopWebService.TrackInfoError.ERROR_NO_PARAM
                       }
            }
            ;
            Axapta axapta = this.axLogon(company);

            try
            {
                IntershopWebService.TrackInfo trackInfo = this.extractTrackInfo(Convert.ToString(axapta.CallStaticClassMethod("BTX_SharedFunctionsProxy", "getTrackAndTraceLinks", (object)customerID, (object)salesID)));

                stopwatch.Stop();
                MessageLogger.info(string.Format("GetTrackInfo() -> {0} ms", (object)stopwatch.ElapsedMilliseconds));
                return(trackInfo);
            }
            catch (Exception ex)
            {
                MessageLogger.info(string.Format("GetTrackInfo() -> error: {0}", (object)ex.Message));
                return((IntershopWebService.TrackInfo)null);
            }
            finally
            {
                axapta.Logoff();
            }
        }
        private IntershopWebService.TrackInfo extractTrackInfo(string links)
        {
            List <IntershopWebService.Package> packageList = new List <IntershopWebService.Package>();

            IntershopWebService.TrackInfo trackInfo = new IntershopWebService.TrackInfo();
            if (string.IsNullOrEmpty(links))
            {
                trackInfo.ErrorMsg  = "No sales order exists with the specified details.";
                trackInfo.ErrorCode = IntershopWebService.TrackInfoError.ERROR_SO_NOT_FOUND;
                return(trackInfo);
            }
            XmlDocument xmlDocument = new XmlDocument();

            xmlDocument.LoadXml(links);
            XmlNode childNode = xmlDocument.ChildNodes[0];
            string  str1      = "<a href=\"%1\" target=\"_blank\">%1</a>";
            string  str2      = "";

            IntershopWebService.Package package1 = new IntershopWebService.Package();
            package1.PackingSlipId = package1.Link = "&nbsp;";
            foreach (XmlElement xmlElement in xmlDocument.GetElementsByTagName("Item"))
            {
                if (!xmlElement["PackingSlipId"].InnerText.Equals(str2) && !string.IsNullOrEmpty(str2))
                {
                    packageList.Add(package1);
                    str2 = xmlElement["PackingSlipId"].InnerText;
                }
                else if (string.IsNullOrEmpty(str2))
                {
                    str2 = xmlElement["PackingSlipId"].InnerText;
                }
                IntershopWebService.Package package2 = new IntershopWebService.Package();
                package2.PackingSlipId = xmlElement["PackingSlipId"].InnerText;
                package2.PackageId     = xmlElement["PackageId"].InnerText;
                package2.DispatchDate  = xmlElement["DispatchDate"].InnerText;
                package2.Link          = !string.IsNullOrEmpty(xmlElement["Link"].InnerText) ? str1.Replace("%1", Uri.UnescapeDataString(xmlElement["Link"].InnerText)) : "ERROR_NA";
                if (string.IsNullOrEmpty(package2.PackageId) && string.IsNullOrEmpty(package2.PackingSlipId) && string.IsNullOrEmpty(xmlElement["Link"].InnerText))
                {
                    trackInfo.ErrorMsg  = "The sales order is being processed, shipping information is not available yet.";
                    trackInfo.ErrorCode = IntershopWebService.TrackInfoError.ERROR_NO_SHIPINFO;
                }
                if (string.IsNullOrEmpty(package2.PackageId))
                {
                    package2.PackageId = "ERROR_NA";
                }
                if (string.IsNullOrEmpty(package2.PackingSlipId))
                {
                    package2.PackingSlipId = "ERROR_NA";
                }
                if (string.IsNullOrEmpty(package2.DispatchDate))
                {
                    package2.DispatchDate = "ERROR_NA";
                    package2.Link         = "ERROR_NA";
                }
                packageList.Add(package2);
            }
            if (links.Trim().Length == 0)
            {
                trackInfo.ErrorMsg  = "No sales order exists with the specified details.";
                trackInfo.ErrorCode = IntershopWebService.TrackInfoError.ERROR_SO_NOT_FOUND;
            }
            else
            {
                trackInfo.TrackLinks = packageList;
            }
            return(trackInfo);
        }