private string HandleMessageType(HAPITRANS transfer)
        {
            string error = "";
            string Url   = "";

            try
            {
                Url = FindUrlToUse(transfer.WEBS_PROFILE_ID, transfer.HAPIOBJECTNAME);

                Tracing.TraceEvent(TraceEventType.Verbose, 0, String.Format(" use Url = {0}", Url));

                if (String.IsNullOrEmpty(Url))
                {
                    return("unknown url for " + transfer.WEBS_PROFILE_ID + " - " + transfer.HAPIOBJECTNAME);
                }

                sender.Url = Url;

                switch (transfer.HAPIOBJECTNAME)
                {
                case "DR":     // -- HAPIOBJECTNAME_Delivery_Receipt
                {
                    DeliveryReceiptHeadSelect handler = new DeliveryReceiptHeadSelect(this.db);
                    DeliveryReceiptHeadDoc    message = handler.Process(transfer.HAPITRANS_ID);

                    if (message == null)
                    {
                        error = string.Format("{0} obj missing.", transfer.HAPIOBJECTNAME);
                    }
                    else
                    {
                        sender.DeliveryReceipt(transfer.CHANNEL_ID, transfer.COMPANY_ID, transfer.HAPITRANS_ID, message);
                    }

                    break;
                }

                case "BA":      // -- HAPIOBJECTNAME_Balance_Answer
                {
                    BalanceAnswerLineSelect handler = new BalanceAnswerLineSelect(this.db);
                    BalanceAnswerLineDoc    message = handler.Process(transfer.HAPITRANS_ID);

                    if (message == null)
                    {
                        error = string.Format("{0} obj missing.", transfer.HAPIOBJECTNAME);
                    }
                    else
                    {
                        sender.BalanceAnswer(transfer.CHANNEL_ID, transfer.COMPANY_ID, transfer.HAPITRANS_ID, message);
                    }

                    break;
                }

                case "PR":      // -- HAPIOBJECTNAME_Pick_Receipt
                {
                    PickReceiptHeadSelect handler = new PickReceiptHeadSelect(this.db);
                    PickReceiptHeadDoc    message = handler.Process(transfer.HAPITRANS_ID);

                    if (message == null)
                    {
                        error = string.Format("{0} obj missing.", transfer.HAPIOBJECTNAME);
                    }
                    else
                    {
                        sender.PickReceipt(transfer.CHANNEL_ID, transfer.COMPANY_ID, transfer.HAPITRANS_ID, message);
                    }

                    break;
                }

                case "IC":      // -- HAPIOBJECTNAME_Item_Change
                {
                    InventoryChangeLineSelect handler = new InventoryChangeLineSelect(this.db);
                    InventoryChangeLineDoc    message = handler.Process(transfer.HAPITRANS_ID);

                    if (message == null)
                    {
                        error = string.Format("{0} obj missing.", transfer.HAPIOBJECTNAME);
                    }
                    else
                    {
                        sender.InventoryChange(transfer.CHANNEL_ID, transfer.COMPANY_ID, transfer.HAPITRANS_ID, message);
                    }

                    break;
                }

                case "PM":      // -- HAPIOBJECTNAME_Packing_Material
                {
                    ReturnedPackingMaterialHeadSelect handler = new ReturnedPackingMaterialHeadSelect(this.db);
                    ReturnedPackingMaterialHeadDoc    message = handler.Process(transfer.HAPITRANS_ID);

                    if (message == null)
                    {
                        error = string.Format("{0} obj missing.", transfer.HAPIOBJECTNAME);
                    }
                    else
                    {
                        sender.ReturnedPackingMaterial(transfer.CHANNEL_ID, transfer.COMPANY_ID, transfer.HAPITRANS_ID, message);
                    }

                    break;
                }

                case "RR":      // -- HAPIOBJECTNAME_Return_Receipt
                {
                    ReturnReceiptHeadSelect handler = new ReturnReceiptHeadSelect(this.db);
                    ReturnReceiptHeadDoc    message = handler.Process(transfer.HAPITRANS_ID);

                    if (message == null)
                    {
                        error = string.Format("{0} obj missing.", transfer.HAPIOBJECTNAME);
                    }
                    else
                    {
                        sender.VendorReturnReceipt(transfer.CHANNEL_ID, transfer.COMPANY_ID, transfer.HAPITRANS_ID, message);
                    }

                    break;
                }

                case "IR":      // -- HAPIOBJECTNAME_Inspection_Receipt
                {
                    InspectionReceiptHeadSelect handler = new InspectionReceiptHeadSelect(this.db);
                    InspectionReceiptHeadDoc    message = handler.Process(transfer.HAPITRANS_ID);

                    if (message == null)
                    {
                        error = string.Format("{0} obj missing.", transfer.HAPIOBJECTNAME);
                    }
                    else
                    {
                        sender.InspectionReceipt(transfer.CHANNEL_ID, transfer.COMPANY_ID, transfer.HAPITRANS_ID, message);
                    }

                    break;
                }

                case "SR":      // -- HAPIOBJECTNAME_Shipment_Report
                {
                    ASNHeadSelect handler = new ASNHeadSelect(this.db);
                    ASNHeadDoc    message = handler.Process(transfer.HAPITRANS_ID);

                    if (message == null)
                    {
                        error = string.Format("{0} obj missing.", transfer.HAPIOBJECTNAME);
                    }
                    else
                    {
                        sender.ASN(transfer.CHANNEL_ID, transfer.COMPANY_ID, transfer.HAPITRANS_ID, message);
                    }

                    break;
                }

                case "COR":     // -- HAPIOBJECTNAME_Confirmation_Of_Receipt
                {
                    ConfirmationOfReceiptHeadSelect handler = new ConfirmationOfReceiptHeadSelect(this.db);
                    ConfirmationOfReceiptHeadDoc    message = handler.Process(transfer.HAPITRANS_ID);

                    if (message == null)
                    {
                        error = string.Format("{0} obj missing.", transfer.HAPIOBJECTNAME);
                    }
                    else
                    {
                        sender.ConfirmationOfReceipt(transfer.CHANNEL_ID, transfer.COMPANY_ID, transfer.HAPITRANS_ID, message);
                    }

                    break;
                }

                case "IOC":     // -- HAPIOBJECTNAME_Inbound_Order_Completed
                {
                    InboundOrderCompletedSelect handler = new InboundOrderCompletedSelect(this.db);
                    InboundOrderCompletedDoc    message = handler.Process(transfer.HAPITRANS_ID);

                    if (message == null)
                    {
                        error = string.Format("{0} obj missing.", transfer.HAPIOBJECTNAME);
                    }
                    else
                    {
                        sender.InboundOrderCompleted(transfer.CHANNEL_ID, transfer.COMPANY_ID, transfer.HAPITRANS_ID, message);
                    }

                    break;
                }

                default:

                    error = string.Format("transfer type {0} not found", transfer.HAPIOBJECTNAME);
                    break;
                }  // switch (transfer.HAPIOBJECTNAME)
            }
            catch (UriFormatException e)
            {
                error = "The format of the URI is invalid. URL: " + Url + ", HAPITRANS_ID: " + transfer.HAPITRANS_ID + Environment.NewLine +
                        e.Message + Environment.NewLine +
                        e.StackTrace;
            }
            catch (InvalidOperationException e)
            {
                error = "Failed to reach " + sender.Url + " for " + transfer.HAPIOBJECTNAME + Environment.NewLine +
                        e.Message + Environment.NewLine +
                        e.StackTrace;
            }
            catch (System.Web.Services.Protocols.SoapException e)
            {
                error = "Interface mismatch. URL: " + sender.Url + ", HAPIOBJECTNAME: " + transfer.HAPIOBJECTNAME + ", HAPITRANS_ID: " + transfer.HAPITRANS_ID + Environment.NewLine +
                        e.Message + Environment.NewLine +
                        e.StackTrace;
            }
            catch (Exception e)
            {
                error = "Unexpected error. URL: " + sender.Url + ", HAPIOBJECTNAME: " + transfer.HAPIOBJECTNAME + ", HAPITRANS_ID: " + transfer.HAPITRANS_ID + Environment.NewLine +
                        e.Message + Environment.NewLine +
                        e.StackTrace;
            }

            return(error);
        }
        private List <HAPITRANS> FindMessagesToSend()
        {
            List <HAPITRANS> transList = new List <HAPITRANS>();

            IDataReader r = dbWebServiceSend.GetHAPITRANSCur();

            try
            {
                while (r.Read())
                {
                    HAPITRANS t = new HAPITRANS();

                    // Build HAPITRANS object

                    if (r["HAPITRANS_ID"] == DBNull.Value)
                    {
                        t.HAPITRANS_ID = "";
                    }
                    else
                    {
                        t.HAPITRANS_ID = r["HAPITRANS_ID"] as String;
                    }

                    if (r["HAPIOBJECTNAME"] == DBNull.Value)
                    {
                        t.HAPIOBJECTNAME = "";
                    }
                    else
                    {
                        t.HAPIOBJECTNAME = r["HAPIOBJECTNAME"] as String;
                    }

                    if (r["HAPISTAT"] == DBNull.Value)
                    {
                        t.HAPISTAT = "";
                    }
                    else
                    {
                        t.HAPISTAT = r["HAPISTAT"] as String;
                    }

                    if (r["HAPIERRCOD"] == DBNull.Value)
                    {
                        t.HAPIERRCOD = "";
                    }
                    else
                    {
                        t.HAPIERRCOD = r["HAPIERRCOD"] as String;
                    }

                    if (r["HAPIERRMSG"] == DBNull.Value)
                    {
                        t.HAPIERRMSG = "";
                    }
                    else
                    {
                        t.HAPIERRMSG = r["HAPIERRMSG"] as String;
                    }

                    if (r["CREATEDTM"] == DBNull.Value)
                    {
                        t.CREATEDTM = null;
                    }
                    else
                    {
                        t.CREATEDTM = (DateTime)r["CREATEDTM"];
                    }

                    if (r["FIRSTSNDDTM"] == DBNull.Value)
                    {
                        t.FIRSTSNDDTM = System.DateTime.Now;
                    }
                    else
                    {
                        t.FIRSTSNDDTM = (DateTime)r["FIRSTSNDDTM"];
                    }

                    if (r["LASTSNDDTM"] == DBNull.Value)
                    {
                        t.LASTSNDDTM = null;
                    }
                    else
                    {
                        t.LASTSNDDTM = (DateTime)r["LASTSNDDTM"];
                    }

                    if (r["NOSNDS"] == DBNull.Value)
                    {
                        t.NOSNDS = 0;
                    }
                    else
                    {
                        t.NOSNDS = Int32.Parse(r["NOSNDS"].ToString());
                    }

                    if (r["COMPANY_ID"] == DBNull.Value)
                    {
                        t.COMPANY_ID = "";
                    }
                    else
                    {
                        t.COMPANY_ID = r["COMPANY_ID"] as String;
                    }

                    if (r["WEBS_PROFILE_ID"] == DBNull.Value)
                    {
                        t.WEBS_PROFILE_ID = "";
                    }
                    else
                    {
                        t.WEBS_PROFILE_ID = r["WEBS_PROFILE_ID"] as String;
                    }

                    if (r["CHANNEL_ID"] == DBNull.Value)
                    {
                        t.CHANNEL_ID = "";
                    }
                    else
                    {
                        t.CHANNEL_ID = r["CHANNEL_ID"] as String;
                    }

                    transList.Add(t);

                    Tracing.TraceEvent(TraceEventType.Verbose, 0,
                                       String.Format("{0} - {1}", t.HAPITRANS_ID, t.HAPIOBJECTNAME));
                }
            }
            finally
            {
                if (r != null)
                {
                    r.Close();
                }
            }

            return(transList);
        }