public void LoadBoxLabelDatabaseData(string id) //BoxLabelShipmentXmlCreator 主要的方法
        {
            logger.Debug("LoadBoxLabelDatabaseData begin id="+id); //log 寫入

            string[] idSplit = id.Split(@"/".ToCharArray()); //ID 拆分:利用split 方法將DN/SN 拆分成兩個值存放至數組中
            string internalID = idSplit[0];//取得DN數據
            //string BoxID = idSplit[1];
            string SerialNum = idSplit[1];//取得SN數據


            //fill boxList table
            BOXES boxList = new BOXES();//聲明一個BOXES實例,BOXES() 需引用xsd產生的cs文檔的namespace
  

            logger.Debug("LoadBoxLabelDatabaseData v_Shipment_PAKComn begin");
            DataTable packIDTable = EditsSqlProc.v_Shipment_PAKComn__by__InternalID(internalID);//抓取數據邏輯,將數據存放到一個data table中
            logger.Debug("LoadBoxLabelDatabaseData v_Shipment_PAKComn end");

            BOXES.BOXDataTable newTable = boxList.BOX;//實例化一個BOX的打他table,具體參照XSD 文檔

            int index = 0;
            foreach (DataRow readRow in packIDTable.Rows) //循環查找剛剛從數據庫中查詢的數據的沒一行
            {
                BOXES.BOXRow newRow = newTable.NewBOXRow();//定義xsd中的BOX介
                newRow.BOX_Id_0 = index;//定義該介爲第一BOXS下的第一介
               // index++;

                foreach (DataColumn column in newTable.Columns)//循環XSD BOX介的每一個節點
                {
                    if (packIDTable.Columns.Contains(column.ColumnName))//將從數據庫查找的數據欄位與XSD中的各個節點進行比對,在此需注意:在客戶給定了Schema和我們
					//編寫的數據源(view 或者SP)欄位需一致,不然將無法查找到相應的數據。
                    {
                        //HP_PN
                        if (column.ColumnName == "HP_PN")
                        {
                            newRow[column] = readRow[column.ColumnName].ToString();//.Split('/')[1];
                            continue;
                        }
                        //if table contains name, then populate
                        if (column.DataType != packIDTable.Columns[column.ColumnName].DataType)
                        {
                            if (column.DataType == typeof(Double))
                            {
                                newRow[column] = Convert.ToDouble(readRow[column.ColumnName]);
                            }
                            else if (column.DataType == typeof(String))
                            {
                                newRow[column] = Convert.ToString(readRow[column.ColumnName]);
                            }
                        }
                        else
                            newRow[column] = readRow[column.ColumnName];
                    }
                    else
                    {
                        //PACK_ID_BOX_QTY
                        if (column.ColumnName == "PACK_ID_BOX_QTY")
                        {
                            newRow[column] = Convert.ToDouble(readRow["PACK_ID_UNIT_QTY"]);
                            continue;
                        }

                        if (column.DataType == typeof(string))
                            newRow[column] = string.Empty;
                        else if (column.DataType == typeof(Double))
                            newRow[column] = 0;
                        else if (column.DataType == typeof(DateTime))
                            newRow[column] = string.Empty;
                    }
                }

                //get serial number
                /*
                string whereBoxClause = "WHERE InternalID='" + internalID + "' AND SERIAL_NUM='" + SerialNum + "'";
                //string whereMainClause = "WHERE InternalID='" + internalID + "' AND BoxID='" + BoxID + "'";            
                DataTable boxTable = DBFactory.PopulateTempTable("[PAK_PackkingData]", whereBoxClause, fields);
                */

                logger.Debug("LoadBoxLabelDatabaseData PAK_PackkingData 1 begin");
                DataTable boxTable = EditsSqlProc.PAK_PackkingData__by__InternalID__SERIAL_NUM(internalID, SerialNum);
                logger.Debug("LoadBoxLabelDatabaseData PAK_PackkingData 1 end");

                //newRow.SERIAL_NUM = boxTable.Rows[0]["SERIAL_NUM"].ToString().Trim();
                //get BoxID
                ChkRowNotNull("BoxLabelShipmentXmlCreator id=" + id + ", PAK_PackkingData internalID=" + internalID + ", SerialNum=" + SerialNum, boxTable);
                newRow.BOX_ID = boxTable.Rows[0]["BOX_ID"].ToString().Trim();//抓取BOXID 
                //get BOX_SEQUENCE
                /*
                List<string> fieldsSEQUENCE = new List<string>();
                fieldsSEQUENCE.Add("count(distinct SERIAL_NUM) as BOX_SEQUENCE");
                string whereBoxSEQUENCE = "WHERE ID<= (select ID from [PAK_PackkingData] where InternalID='" + internalID + "' and SERIAL_NUM='" + SerialNum + "') and left(InternalID,10)='" + internalID.Substring(0, 10) + "'";
                DataTable boxTableSEQUENCE = DBFactory.PopulateTempTable("[PAK_PackkingData]", whereBoxSEQUENCE, fieldsSEQUENCE);
                */

                logger.Debug("LoadBoxLabelDatabaseData PAK_PackkingData 2 begin");
                DataTable boxTableSEQUENCE = EditsSqlProc.count__PAK_PackkingData__by__InternalID__SERIAL_NUM__InternalID10(internalID, SerialNum, internalID.Substring(0, 10));
                logger.Debug("LoadBoxLabelDatabaseData PAK_PackkingData 2 end");

                ChkRowNotNull("BoxLabelShipmentXmlCreator id=" + id + ", PAK_PackkingData internalID=" + internalID + ", SerialNum=" + SerialNum, boxTableSEQUENCE);
                newRow.BOX_SEQUENCE = boxTableSEQUENCE.Rows[0]["BOX_SEQUENCE"].ToString();//獲取本機器是這筆船務的第幾臺

                //get BOX_UNIT_QTY
                /*
                List<string> fieldsUNTIQTY = new List<string>();
                fieldsUNTIQTY.Add("count(distinct SERIAL_NUM) as BOX_UNIT_QTY");
                string whereBOX_UNIT_QTY = "where BOX_ID = '" + newRow.BOX_ID.ToString() + "'";
                DataTable BoxTableUNITQTY = DBFactory.PopulateTempTable("[PAK_PackkingData]", whereBOX_UNIT_QTY, fieldsUNTIQTY);
                */

                logger.Debug("LoadBoxLabelDatabaseData PAK_PackkingData 3 begin");
                DataTable BoxTableUNITQTY = EditsSqlProc.count__PAK_PackkingData__by__BOX_ID(newRow.BOX_ID.ToString());
                logger.Debug("LoadBoxLabelDatabaseData PAK_PackkingData 3 end");

                ChkRowNotNull("BoxLabelShipmentXmlCreator id=" + id + ", PAK_PackkingData BOX_ID=" + newRow.BOX_ID.ToString(), BoxTableUNITQTY);
                newRow.BOX_UNIT_QTY = BoxTableUNITQTY.Rows[0]["BOX_UNIT_QTY"].ToString();//抓取這個BOX 裏面的機器數量

                // BSaM
                DataTable bsamTable;

                string C46 = readRow["C46"].ToString();
                if (string.IsNullOrEmpty(C46))
                {
                    logger.Debug("LoadBoxLabelDatabaseData C46=" + C46);
                    newRow.HAWB_BOX_QTY = "0";
                    newRow.HAWB_UNIT_QTY = "0";
                }
                else
                {
                    // HAWB_BOX_QTY
                    logger.Debug("LoadBoxLabelDatabaseData HAWB_BOX_QTY__by__C46 begin C46=" + C46);
                    bsamTable = EditsSqlProc.HAWB_BOX_QTY__by__C46(C46);
                    logger.Debug("LoadBoxLabelDatabaseData HAWB_BOX_QTY__by__C46 end");
                    newRow.HAWB_BOX_QTY = bsamTable.Rows[0]["HAWB_BOX_QTY"].ToString();//抓取分單的機器總數(emea地區)

                    // HAWB_UNIT_QTY
                    //newRow.HAWB_UNIT_QTY = "0"; //test
                    logger.Debug("LoadBoxLabelDatabaseData HAWB_UNIT_QTY__by__C46 begin");
                    bsamTable = EditsSqlProc.HAWB_UNIT_QTY__by__C46(C46);
                    logger.Debug("LoadBoxLabelDatabaseData HAWB_UNIT_QTY__by__C46 end");
                    newRow.HAWB_UNIT_QTY = bsamTable.Rows[0]["HAWB_UNIT_QTY"].ToString();
                }

                // BOX_PACKID_QTY
                logger.Debug("LoadBoxLabelDatabaseData BOX_PACKID_QTY__by__BOX_ID begin");
                bsamTable = EditsSqlProc.BOX_PACKID_QTY__by__BOX_ID(newRow.BOX_ID.ToString());//抓取這個個PACKID 的機器總數
                logger.Debug("LoadBoxLabelDatabaseData BOX_PACKID_QTY__by__BOX_ID end");
                newRow.BOX_PACKID_QTY = bsamTable.Rows[0]["BOX_PACKID_QTY"].ToString();

                newTable.Rows.Add(newRow);//當XSD 的所有節點都取得了相應的值後悔有一個保存動作。
				
				// BSaM PACK_ID_LINE_ITEM
                logger.Debug("LoadBoxLabelDatabaseData bsam InternalID__from__PAK_PackkingData__by__BOX_ID begin");
                DataTable boxInternalIDTable = EditsSqlProc.InternalID__from__PAK_PackkingData__by__BOX_ID(newRow.BOX_ID);
                logger.Debug("LoadBoxLabelDatabaseData bsam InternalID__from__PAK_PackkingData__by__BOX_ID end");
                if (boxInternalIDTable != null)
                {
                    foreach (DataRow boxi in boxInternalIDTable.Rows)
                    {
                        string tmpid = boxi["InternalID"].ToString();
                        logger.Debug("LoadBoxLabelDatabaseData bsam PAK_PackkingData InternalID begin");
                        DataTable dt = EditsSqlProc.v_PAKComn__by__InternalID(tmpid);
                        logger.Debug("LoadBoxLabelDatabaseData bsam PAK_PackkingData InternalID end");
                        if ((dt == null) || (dt.Rows.Count == 0))
                        {
                            logger.Error("LoadBoxLabelDatabaseData bsam PAK_PackkingData InternalID , no data in PAK_PackkingData for InternalID " + tmpid);
                            continue;
                        }

                        BOXES.PACK_ID_LINE_ITEMRow newLineRow = boxList.PACK_ID_LINE_ITEM.NewPACK_ID_LINE_ITEMRow();//抓取BOXES.PACK_ID_LINE_ITEMRow相應的數據
						newLineRow.BOX_Id_0 = index;//將PACK_ID_LINE_ITEMRow 的父節點指向BOX節點
                        foreach (DataColumn column in boxList.PACK_ID_LINE_ITEM.Columns)
                        {
                            if (dt.Columns.Contains(column.ColumnName))
                            {
                                newLineRow[column] = dt.Rows[0][column.ColumnName];
                            }
                            else
                            {
                                if (column.DataType == typeof(string))
                                    newLineRow[column] = string.Empty;
                                else if (column.DataType == typeof(Double))
                                    newLineRow[column] = 0;
                                else if (column.DataType == typeof(DateTime))
                                    newLineRow[column] = string.Empty;
                            }
                        }

                        // PACK_ID_LINE_ITEM_BOX_UNIT_QTY
                        //newLineRow.PACK_ID_LINE_ITEM_BOX_UNIT_QTY = 0; //test
                        logger.Debug("LoadBoxLabelDatabaseData bsam PACK_ID_LINE_ITEM_BOX_UNIT_QTY__by__PACK_ID begin");
                        bsamTable = EditsSqlProc.PACK_ID_LINE_ITEM_BOX_UNIT_QTY__by__PACK_ID(newLineRow.PACK_ID.ToString(), newRow.BOX_ID);
                        logger.Debug("LoadBoxLabelDatabaseData bsam PACK_ID_LINE_ITEM_BOX_UNIT_QTY__by__PACK_ID end");
                        newLineRow.PACK_ID_LINE_ITEM_BOX_UNIT_QTY = Convert.ToDouble(bsamTable.Rows[0]["PACK_ID_LINE_ITEM_BOX_UNIT_QTY"]);

                        boxList.PACK_ID_LINE_ITEM.Rows.Add(newLineRow); //數據抓取完成後做保存動作
                    }
                }

                

                //get SERIAL_NUMTable
                /*
                string whereSERIALClause = "WHERE BOX_ID = '" + newRow.BOX_ID.ToString().Trim() + "'";
                DataTable SERIALTable = DBFactory.PopulateTempTable("[PAK_PackkingData]", whereSERIALClause, fields);
                */

                logger.Debug("LoadBoxLabelDatabaseData PAK_PackkingData 4 begin");
                DataTable SERIALTable = EditsSqlProc.PAK_PackkingData__by__BOX_ID(newRow.BOX_ID.ToString().Trim());
                logger.Debug("LoadBoxLabelDatabaseData PAK_PackkingData 4 end");

                foreach (DataRow readRow4 in SERIALTable.Rows)
                {
                    LoadSERIAL_NUMPairs(boxList.SERIAL_NUM,
                        readRow4,
                        "SERIAL_NUM",
                        "BOX_ID_0",
                        newRow.BOX_Id_0);
                }

                //get LABEL_INSTR_HEADER
                /*
                string whereLneItemClause_LABEL = "WHERE PO_NUM='" + packIDTable.Rows[0]["PO_NUM"].ToString().Trim() + "' and FIELDS = 'LABEL_INSTR_HEAD'";
                DataTable lineItemTable_LABEL = DBFactory.PopulateTempTable("[PAKEDI_INSTR]", whereLneItemClause_LABEL, fields);
                */

                logger.Debug("LoadBoxLabelDatabaseData PAKEDI_INSTR begin");
                ChkRowNotNull("BoxLabelShipmentXmlCreator id=" + id + ", PAKEDI_INSTR internalID=" + internalID, packIDTable);
                DataTable lineItemTable_LABEL = EditsSqlProc.PAKEDI_INSTR__by__PO_NUM__FIELDS(packIDTable.Rows[0]["PO_NUM"].ToString().Trim());
                logger.Debug("LoadBoxLabelDatabaseData PAKEDI_INSTR end");
                   
                foreach (DataRow readRow4 in lineItemTable_LABEL.Rows)
                {
                    LoadINSTRPairs(boxList.LABEL_INSTR_HEAD,
                        readRow4,
                        "VALUE",
                        "BOX_ID_0",
                        newRow.BOX_Id_0);
                }

                //get line item
                /*
                string whereLneItemClause = "WHERE SERIAL_NUM='" + boxTable.Rows[0]["SERIAL_NUM"].ToString().Trim() + "' order by SHOW_ORDER";
                DataTable lineItemTable = DBFactory.PopulateTempTable("[PAKODMSESSION]", whereLneItemClause, fields);
                */

                logger.Debug("LoadBoxLabelDatabaseData PAKODMSESSION begin");
                //ChkRowNotNull("BoxLabelShipmentXmlCreator id=" + id + ", PAK_PackkingData", boxTable);
                //DataTable lineItemTable = EditsSqlProc.PAKODMSESSION__by__SERIAL_NUM(boxTable.Rows[0]["SERIAL_NUM"].ToString().Trim());
                DataTable lineItemTable = EditsSqlProc.PAKODMSESSION__by__SERIAL_NUM_forUdfDetail(boxTable.Rows[0]["SERIAL_NUM"].ToString().Trim());

                logger.Debug("LoadBoxLabelDatabaseData PAKODMSESSION end");

                foreach (DataRow readRow2 in lineItemTable.Rows)//抓取UDF信息並保存到UDF節點,在此需注意UDF是BOX 的子節點。
                {
                    LoadKeyValuePairs(boxList.UDF_HEADER,
                        readRow2,
                        "UDF_KEY_HEADER",
                        "UDF_VALUE_HEADER",
                        "BOX_Id_0",
                        newRow.BOX_Id_0);
                    LoadKeyValuePairs(boxList.UDF_DETAIL,
                        readRow2,
                        "UDF_KEY_DETAIL",
                        "UDF_VALUE_DETAIL",
                        "BOX_Id_0",
                        newRow.BOX_Id_0);


                }
                //--------------add  by  Fan 20091119  -------------
                /*
                string whereTwoD = "'" + internalID + "', '" +newRow.BOX_ID.ToString().Trim()+ "'";
                DataTable TwoDTable = DBFactory.PopulateTempTable_BySp("[op_TwoDCode_Solution_Box]", whereTwoD);
                */

                logger.Debug("LoadBoxLabelDatabaseData op_TwoDCode_Solution_Box begin");
                DataTable TwoDTable = EditsSqlProc.sp__op_TwoDCode_Solution_Box(internalID, newRow.BOX_ID.ToString().Trim());//抓取是否使用TwoDCode 目前沒有
                logger.Debug("LoadBoxLabelDatabaseData op_TwoDCode_Solution_Box end");

                //ChkRowNotNull("BoxLabelShipmentXmlCreator id=" + id + ", op_TwoDCode_Solution_Box internalID=" + internalID, TwoDTable);
                string EnCoding = TwoDTable.Rows.Count>0 ? TwoDTable.Rows[0]["EnCoding"].ToString() : ""; // Y/N
                string EnCoder = TwoDTable.Rows.Count>0 ? TwoDTable.Rows[0]["EnCoder"].ToString() : ""; //PDF417/MaxICode
                string StringIDValue = "";
                if (EnCoding == "Y")
                {
                    //encoder
                    if (EnCoder == "PDF417")
                    {
                        //20130314
                        /*
                        //PDF417 generator
                        //StringIDValue = TransferCode.Encoder(TwoDTable.Rows[0]["StringIDValue"].ToString());
                        foreach (DataRow readRowtdbox in TwoDTable.Rows)
                        {
                            BOXES.UDF_BOXRow newRowtwodbox = boxList.UDF_BOX.NewUDF_BOXRow();
                            StringIDValue = TransferCode.Encoder(readRowtdbox["StringIDValue"].ToString());
                            newRowtwodbox.KEY = readRowtdbox["StringIDKey"].ToString();
                            newRowtwodbox.VALUE = StringIDValue.ToString();
                            newRowtwodbox.BOX_Id_0 = index;
                            boxList.UDF_BOX.Rows.Add(newRowtwodbox);
                        }
                        */
                    }

                }
                else
                {

                    foreach (DataRow readRowtdbox in TwoDTable.Rows)
                    {
                        BOXES.UDF_BOXRow newRowtwodbox = boxList.UDF_BOX.NewUDF_BOXRow();
                        newRowtwodbox.KEY = readRowtdbox["StringIDKey"].ToString();
                        newRowtwodbox.VALUE = readRowtdbox["StringIDValue"].ToString();
                        newRowtwodbox.BOX_Id_0 = index;
                        boxList.UDF_BOX.Rows.Add(newRowtwodbox);
                    }

                }
                //------------------------------  end   ----------------------------------------
                index++;//xsd的一行循環完成

            }
            //populate mini tables
            //set this dataset to packinglist so we can outputXML
            this.m_DataSet = boxList;//保存數據到xmlcreater 的dataset中。用來輸出xml

            logger.Debug("LoadBoxLabelDatabaseData end");
        }
        public void LoadBoxLabelDatabaseData(string id)
        {
            logger.Debug("LoadBoxLabelDatabaseData begin id="+id);

            string[] idSplit = id.Split(@"/".ToCharArray());
            string internalID = idSplit[0];
            //string BoxID = idSplit[1];
            string SerialNum = idSplit[1];


            //fill boxList table
            BOXES boxList = new BOXES();
            //string whereMainClause = "WHERE InternalID='" + internalID + "' AND BoxID='" + BoxID + "'";            
            /*
            string whereMainClause = "WHERE InternalID='" + internalID + "'";
            List<string> fields = new List<string>();
            fields.Add("*");
            DataTable packIDTable = DBFactory.PopulateTempTable("[v_Shipment_PAKComn]", whereMainClause, fields);
            */

            logger.Debug("LoadBoxLabelDatabaseData v_Shipment_PAKComn begin");
            DataTable packIDTable = EditsSqlProc.v_Shipment_PAKComn__by__InternalID(internalID);
            logger.Debug("LoadBoxLabelDatabaseData v_Shipment_PAKComn end");

            BOXES.BOXDataTable newTable = boxList.BOX;

            int index = 0;
            foreach (DataRow readRow in packIDTable.Rows)
            {
                BOXES.BOXRow newRow = newTable.NewBOXRow();
                newRow.BOX_Id_0 = index;
               // index++;

                foreach (DataColumn column in newTable.Columns)
                {
                    if (packIDTable.Columns.Contains(column.ColumnName))
                    {
                        //HP_PN
                        if (column.ColumnName == "HP_PN")
                        {
                            newRow[column] = readRow[column.ColumnName].ToString();//.Split('/')[1];
                            continue;
                        }
                        //if table contains name, then populate
                        if (column.DataType != packIDTable.Columns[column.ColumnName].DataType)
                        {
                            if (column.DataType == typeof(Double))
                            {
                                newRow[column] = Convert.ToDouble(readRow[column.ColumnName]);
                            }
                            else if (column.DataType == typeof(String))
                            {
                                newRow[column] = Convert.ToString(readRow[column.ColumnName]);
                            }
                        }
                        else
                            newRow[column] = readRow[column.ColumnName];
                    }
                    else
                    {
                        //PACK_ID_BOX_QTY
                        if (column.ColumnName == "PACK_ID_BOX_QTY")
                        {
                            newRow[column] = Convert.ToDouble(readRow["PACK_ID_UNIT_QTY"]);
                            continue;
                        }

                        if (column.DataType == typeof(string))
                            newRow[column] = string.Empty;
                        else if (column.DataType == typeof(Double))
                            newRow[column] = 0;
                        else if (column.DataType == typeof(DateTime))
                            newRow[column] = string.Empty;
                    }
                }

                //get serial number
                /*
                string whereBoxClause = "WHERE InternalID='" + internalID + "' AND SERIAL_NUM='" + SerialNum + "'";
                //string whereMainClause = "WHERE InternalID='" + internalID + "' AND BoxID='" + BoxID + "'";            
                DataTable boxTable = DBFactory.PopulateTempTable("[PAK_PackkingData]", whereBoxClause, fields);
                */

                logger.Debug("LoadBoxLabelDatabaseData PAK_PackkingData 1 begin");
                DataTable boxTable = EditsSqlProc.PAK_PackkingData__by__InternalID__SERIAL_NUM(internalID, SerialNum);
                logger.Debug("LoadBoxLabelDatabaseData PAK_PackkingData 1 end");

                //newRow.SERIAL_NUM = boxTable.Rows[0]["SERIAL_NUM"].ToString().Trim();
                //get BoxID
                ChkRowNotNull("BoxLabelShipmentXmlCreator id=" + id + ", PAK_PackkingData internalID=" + internalID + ", SerialNum=" + SerialNum, boxTable);
                newRow.BOX_ID = boxTable.Rows[0]["BOX_ID"].ToString().Trim();
                //get BOX_SEQUENCE
                /*
                List<string> fieldsSEQUENCE = new List<string>();
                fieldsSEQUENCE.Add("count(distinct SERIAL_NUM) as BOX_SEQUENCE");
                string whereBoxSEQUENCE = "WHERE ID<= (select ID from [PAK_PackkingData] where InternalID='" + internalID + "' and SERIAL_NUM='" + SerialNum + "') and left(InternalID,10)='" + internalID.Substring(0, 10) + "'";
                DataTable boxTableSEQUENCE = DBFactory.PopulateTempTable("[PAK_PackkingData]", whereBoxSEQUENCE, fieldsSEQUENCE);
                */

                logger.Debug("LoadBoxLabelDatabaseData PAK_PackkingData 2 begin");
                DataTable boxTableSEQUENCE = EditsSqlProc.count__PAK_PackkingData__by__InternalID__SERIAL_NUM__InternalID10(internalID, SerialNum, internalID.Substring(0, 10));
                logger.Debug("LoadBoxLabelDatabaseData PAK_PackkingData 2 end");

                ChkRowNotNull("BoxLabelShipmentXmlCreator id=" + id + ", PAK_PackkingData internalID=" + internalID + ", SerialNum=" + SerialNum, boxTableSEQUENCE);
                newRow.BOX_SEQUENCE = boxTableSEQUENCE.Rows[0]["BOX_SEQUENCE"].ToString();

                //get BOX_UNIT_QTY
                /*
                List<string> fieldsUNTIQTY = new List<string>();
                fieldsUNTIQTY.Add("count(distinct SERIAL_NUM) as BOX_UNIT_QTY");
                string whereBOX_UNIT_QTY = "where BOX_ID = '" + newRow.BOX_ID.ToString() + "'";
                DataTable BoxTableUNITQTY = DBFactory.PopulateTempTable("[PAK_PackkingData]", whereBOX_UNIT_QTY, fieldsUNTIQTY);
                */

                logger.Debug("LoadBoxLabelDatabaseData PAK_PackkingData 3 begin");
                DataTable BoxTableUNITQTY = EditsSqlProc.count__PAK_PackkingData__by__BOX_ID(newRow.BOX_ID.ToString());
                logger.Debug("LoadBoxLabelDatabaseData PAK_PackkingData 3 end");

                ChkRowNotNull("BoxLabelShipmentXmlCreator id=" + id + ", PAK_PackkingData BOX_ID=" + newRow.BOX_ID.ToString(), BoxTableUNITQTY);
                newRow.BOX_UNIT_QTY = BoxTableUNITQTY.Rows[0]["BOX_UNIT_QTY"].ToString();

                // BSaM
                DataTable bsamTable;

                string C46 = readRow["C46"].ToString();
                if (string.IsNullOrEmpty(C46))
                {
                    logger.Debug("LoadBoxLabelDatabaseData C46=" + C46);
                    newRow.HAWB_BOX_QTY = "0";
                    newRow.HAWB_UNIT_QTY = "0";
                }
                else
                {
                    // HAWB_BOX_QTY
                    logger.Debug("LoadBoxLabelDatabaseData HAWB_BOX_QTY__by__C46 begin C46=" + C46);
                    bsamTable = EditsSqlProc.HAWB_BOX_QTY__by__C46(C46);
                    logger.Debug("LoadBoxLabelDatabaseData HAWB_BOX_QTY__by__C46 end");
                    newRow.HAWB_BOX_QTY = bsamTable.Rows[0]["HAWB_BOX_QTY"].ToString();

                    // HAWB_UNIT_QTY
                    //newRow.HAWB_UNIT_QTY = "0"; //test
                    logger.Debug("LoadBoxLabelDatabaseData HAWB_UNIT_QTY__by__C46 begin");
                    bsamTable = EditsSqlProc.HAWB_UNIT_QTY__by__C46(C46);
                    logger.Debug("LoadBoxLabelDatabaseData HAWB_UNIT_QTY__by__C46 end");
                    newRow.HAWB_UNIT_QTY = bsamTable.Rows[0]["HAWB_UNIT_QTY"].ToString();
                }

                // BOX_PACKID_QTY
                logger.Debug("LoadBoxLabelDatabaseData BOX_PACKID_QTY__by__BOX_ID begin");
                bsamTable = EditsSqlProc.BOX_PACKID_QTY__by__BOX_ID(newRow.BOX_ID.ToString());
                logger.Debug("LoadBoxLabelDatabaseData BOX_PACKID_QTY__by__BOX_ID end");
                newRow.BOX_PACKID_QTY = bsamTable.Rows[0]["BOX_PACKID_QTY"].ToString();

                newTable.Rows.Add(newRow);
				
				// BSaM PACK_ID_LINE_ITEM
                logger.Debug("LoadBoxLabelDatabaseData bsam InternalID__from__PAK_PackkingData__by__BOX_ID begin");
                DataTable boxInternalIDTable = EditsSqlProc.InternalID__from__PAK_PackkingData__by__BOX_ID(newRow.BOX_ID);
                logger.Debug("LoadBoxLabelDatabaseData bsam InternalID__from__PAK_PackkingData__by__BOX_ID end");
                if (boxInternalIDTable != null)
                {
                    foreach (DataRow boxi in boxInternalIDTable.Rows)
                    {
                        string tmpid = boxi["InternalID"].ToString();
                        logger.Debug("LoadBoxLabelDatabaseData bsam PAK_PackkingData InternalID begin");
                        DataTable dt = EditsSqlProc.v_PAKComn__by__InternalID(tmpid);
                        logger.Debug("LoadBoxLabelDatabaseData bsam PAK_PackkingData InternalID end");
                        if ((dt == null) || (dt.Rows.Count == 0))
                        {
                            logger.Error("LoadBoxLabelDatabaseData bsam PAK_PackkingData InternalID , no data in PAK_PackkingData for InternalID " + tmpid);
                            continue;
                        }

                        BOXES.PACK_ID_LINE_ITEMRow newLineRow = boxList.PACK_ID_LINE_ITEM.NewPACK_ID_LINE_ITEMRow();
						newLineRow.BOX_Id_0 = index;
                        foreach (DataColumn column in boxList.PACK_ID_LINE_ITEM.Columns)
                        {
                            if (dt.Columns.Contains(column.ColumnName))
                            {
                                newLineRow[column] = dt.Rows[0][column.ColumnName];
                            }
                            else
                            {
                                if (column.DataType == typeof(string))
                                    newLineRow[column] = string.Empty;
                                else if (column.DataType == typeof(Double))
                                    newLineRow[column] = 0;
                                else if (column.DataType == typeof(DateTime))
                                    newLineRow[column] = string.Empty;
                            }
                        }

                        // PACK_ID_LINE_ITEM_BOX_UNIT_QTY
                        //newLineRow.PACK_ID_LINE_ITEM_BOX_UNIT_QTY = 0; //test
                        logger.Debug("LoadBoxLabelDatabaseData bsam PACK_ID_LINE_ITEM_BOX_UNIT_QTY__by__PACK_ID begin");
                        bsamTable = EditsSqlProc.PACK_ID_LINE_ITEM_BOX_UNIT_QTY__by__PACK_ID(newLineRow.PACK_ID.ToString(), newRow.BOX_ID);
                        logger.Debug("LoadBoxLabelDatabaseData bsam PACK_ID_LINE_ITEM_BOX_UNIT_QTY__by__PACK_ID end");
                        newLineRow.PACK_ID_LINE_ITEM_BOX_UNIT_QTY = Convert.ToDouble(bsamTable.Rows[0]["PACK_ID_LINE_ITEM_BOX_UNIT_QTY"]);

                        boxList.PACK_ID_LINE_ITEM.Rows.Add(newLineRow);
                    }
                }

                

                //get SERIAL_NUMTable
                /*
                string whereSERIALClause = "WHERE BOX_ID = '" + newRow.BOX_ID.ToString().Trim() + "'";
                DataTable SERIALTable = DBFactory.PopulateTempTable("[PAK_PackkingData]", whereSERIALClause, fields);
                */

                logger.Debug("LoadBoxLabelDatabaseData PAK_PackkingData 4 begin");
                DataTable SERIALTable = EditsSqlProc.PAK_PackkingData__by__BOX_ID(newRow.BOX_ID.ToString().Trim());
                logger.Debug("LoadBoxLabelDatabaseData PAK_PackkingData 4 end");

                foreach (DataRow readRow4 in SERIALTable.Rows)
                {
                    LoadSERIAL_NUMPairs(boxList.SERIAL_NUM,
                        readRow4,
                        "SERIAL_NUM",
                        "BOX_ID_0",
                        newRow.BOX_Id_0);
                }

                //get LABEL_INSTR_HEADER
                /*
                string whereLneItemClause_LABEL = "WHERE PO_NUM='" + packIDTable.Rows[0]["PO_NUM"].ToString().Trim() + "' and FIELDS = 'LABEL_INSTR_HEAD'";
                DataTable lineItemTable_LABEL = DBFactory.PopulateTempTable("[PAKEDI_INSTR]", whereLneItemClause_LABEL, fields);
                */

                logger.Debug("LoadBoxLabelDatabaseData PAKEDI_INSTR begin");
                ChkRowNotNull("BoxLabelShipmentXmlCreator id=" + id + ", PAKEDI_INSTR internalID=" + internalID, packIDTable);
                DataTable lineItemTable_LABEL = EditsSqlProc.PAKEDI_INSTR__by__PO_NUM__FIELDS(packIDTable.Rows[0]["PO_NUM"].ToString().Trim());
                logger.Debug("LoadBoxLabelDatabaseData PAKEDI_INSTR end");

                foreach (DataRow readRow4 in lineItemTable_LABEL.Rows)
                {
                    LoadINSTRPairs(boxList.LABEL_INSTR_HEAD,
                        readRow4,
                        "VALUE",
                        "BOX_ID_0",
                        newRow.BOX_Id_0);
                }

                //get line item
                /*
                string whereLneItemClause = "WHERE SERIAL_NUM='" + boxTable.Rows[0]["SERIAL_NUM"].ToString().Trim() + "' order by SHOW_ORDER";
                DataTable lineItemTable = DBFactory.PopulateTempTable("[PAKODMSESSION]", whereLneItemClause, fields);
                */

                logger.Debug("LoadBoxLabelDatabaseData PAKODMSESSION begin");
                //ChkRowNotNull("BoxLabelShipmentXmlCreator id=" + id + ", PAK_PackkingData", boxTable);
                //DataTable lineItemTable = EditsSqlProc.PAKODMSESSION__by__SERIAL_NUM(boxTable.Rows[0]["SERIAL_NUM"].ToString().Trim());
                DataTable lineItemTable = EditsSqlProc.PAKODMSESSION__by__SERIAL_NUM_forUdfDetail(boxTable.Rows[0]["SERIAL_NUM"].ToString().Trim());

                logger.Debug("LoadBoxLabelDatabaseData PAKODMSESSION end");

                foreach (DataRow readRow2 in lineItemTable.Rows)
                {
                    LoadKeyValuePairs(boxList.UDF_HEADER,
                        readRow2,
                        "UDF_KEY_HEADER",
                        "UDF_VALUE_HEADER",
                        "BOX_Id_0",
                        newRow.BOX_Id_0);
                    LoadKeyValuePairs(boxList.UDF_DETAIL,
                        readRow2,
                        "UDF_KEY_DETAIL",
                        "UDF_VALUE_DETAIL",
                        "BOX_Id_0",
                        newRow.BOX_Id_0);


                }
                //--------------add  by  Fan 20091119  -------------
                /*
                string whereTwoD = "'" + internalID + "', '" +newRow.BOX_ID.ToString().Trim()+ "'";
                DataTable TwoDTable = DBFactory.PopulateTempTable_BySp("[op_TwoDCode_Solution_Box]", whereTwoD);
                */

                logger.Debug("LoadBoxLabelDatabaseData op_TwoDCode_Solution_Box begin");
                DataTable TwoDTable = EditsSqlProc.sp__op_TwoDCode_Solution_Box(internalID, newRow.BOX_ID.ToString().Trim());
                logger.Debug("LoadBoxLabelDatabaseData op_TwoDCode_Solution_Box end");

                //ChkRowNotNull("BoxLabelShipmentXmlCreator id=" + id + ", op_TwoDCode_Solution_Box internalID=" + internalID, TwoDTable);
                string EnCoding = TwoDTable.Rows.Count>0 ? TwoDTable.Rows[0]["EnCoding"].ToString() : ""; // Y/N
                string EnCoder = TwoDTable.Rows.Count>0 ? TwoDTable.Rows[0]["EnCoder"].ToString() : ""; //PDF417/MaxICode
                string StringIDValue = "";
                if (EnCoding == "Y")
                {
                    //encoder
                    if (EnCoder == "PDF417")
                    {
                        //20130314
                        /*
                        //PDF417 generator
                        //StringIDValue = TransferCode.Encoder(TwoDTable.Rows[0]["StringIDValue"].ToString());
                        foreach (DataRow readRowtdbox in TwoDTable.Rows)
                        {
                            BOXES.UDF_BOXRow newRowtwodbox = boxList.UDF_BOX.NewUDF_BOXRow();
                            StringIDValue = TransferCode.Encoder(readRowtdbox["StringIDValue"].ToString());
                            newRowtwodbox.KEY = readRowtdbox["StringIDKey"].ToString();
                            newRowtwodbox.VALUE = StringIDValue.ToString();
                            newRowtwodbox.BOX_Id_0 = index;
                            boxList.UDF_BOX.Rows.Add(newRowtwodbox);
                        }
                        */
                    }

                }
                else
                {

                    foreach (DataRow readRowtdbox in TwoDTable.Rows)
                    {
                        BOXES.UDF_BOXRow newRowtwodbox = boxList.UDF_BOX.NewUDF_BOXRow();
                        newRowtwodbox.KEY = readRowtdbox["StringIDKey"].ToString();
                        newRowtwodbox.VALUE = readRowtdbox["StringIDValue"].ToString();
                        newRowtwodbox.BOX_Id_0 = index;
                        boxList.UDF_BOX.Rows.Add(newRowtwodbox);
                    }

                }
                //------------------------------  end   ----------------------------------------
                index++;

            }
            //populate mini tables
            //set this dataset to packinglist so we can outputXML
            this.m_DataSet = boxList;

            logger.Debug("LoadBoxLabelDatabaseData end");
        }