Why the method return false

I try to create to
Erp.BO.CustShipPickedOrdersDataSet data=new Erp.BO.CustShipPickedOrdersDataSet();
and I try to pass this data to method
PrePickedOrders(data,out message);
but the result is false…

ProcessPickedOrder(false,out message,data);
and this method returns “No Orders were selected.”

Can you help me?

this is the code I try to create a CustShip

         string company = ((Session)oTrans.Session).CompanyID;
		string message=String.Empty;
		
		CustShipAdapter adapterCustShip = new CustShipAdapter(this.oTrans);
		adapterCustShip.BOConnect();	

		Erp.BO.CustShipPickedOrdersDataSet data=new Erp.BO.CustShipPickedOrdersDataSet();
		DataTable dt = new DataTable();
		data.Tables.Add(dt);
		dt.Columns.Add("IsSelected", typeof(bool));
		dt.Columns.Add("OrderNum", typeof(int));
		dt.Columns.Add("OrderRelNum", typeof(int));
		dt.Columns.Add("OrderLine", typeof(int));
		dt.Columns.Add("BinNum", typeof(string));
		dt.Columns.Add("Quantity", typeof(int));
		dt.Columns.Add("UOM", typeof(string));
		dt.Columns.Add("PartNum", typeof(string));
		dt.Columns.Add("Complete", typeof(int));
		dt.Columns.Add("WarehouseCode", typeof(string));
		dt.Columns.Add("CustNum", typeof(string));
		dt.Rows.Add(true,11584,1,1,"EMBARQUE",1,"PZ","X301116400",0,2,"462");			
		
		bool re1=adapterCustShip.PrePickedOrders(data,out message);
		MessageBox.Show("1.-Ejecuta PREPICKEDORDES: "+re1.ToString());
		
		bool re2=adapterCustShip.ProcessPickedOrder(false,out message,data);
		MessageBox.Show("2.-Ejecuta PROCESSPICKEDORDES: "+re2.ToString());

		adapterCustShip.GetNewShipHead();	
		DataRow ship = adapterCustShip.CustShipData.ShipHead[adapterCustShip.CustShipData.ShipHead.Rows.Count - 1];
		ship["Company"] = company;
		//ship["OTSOrderNum"] = 11584;
		ship["OrderNum"] = 11584;
		ship["CurrencyCode"] = "MXP";
		ship["ShipViaCode"] = 1;
		adapterCustShip.Update();
		adapterCustShip.Dispose();
		oTrans.Update();
		int resultado=Convert.ToInt32(ship["PackNum"].ToString());

		adapterCustShip.GetByID(resultado);

		adapterCustShip.POGetNew(0,resultado,out message);

		adapterCustShip.POGetDtlList(resultado, message,0,message,out message);

		adapterCustShip.BuildShipToCustomerList(11584,out message);

		adapterCustShip.BuildShipToList(11584,462,out message);

Why are you manually creating a new DataTable and then adding this DataTable to the Erp.BO.CustShipPickedOrdersDataSet. This is not going to work, the Erp.BO.CustShipPickedOrdersDataSet already has all the tables, structures it needs you need to work within that object to create new rows etc as needed.

1 Like

Perfect… I understand. Can you helpme… How I can create a new Row and add this to Erp.BO.CustShipPickedOrdersDataSet
and how I can know what is the structures of the Erp.BO.CustShipPickedOrdersDataSet to a CustShip

Thanks.

Use a decompiler (DotPeek, Reflector, etc).
I can tell you the TableSet contains 2 tables: MtlQueue and PickedOrders (see Erp.Tablesets)

1 Like

Thanks, now I know what is the estructur of the dataset…
Can you tell me how I create a new Row for to add it ti the dataset

If you run a trace in Epicor it will show you what methods to call to get a new row

I already found how to create a new row, but when I set the PickedODataSet to the
method -->PrePickedOrders this returns FALSE
and this method returns “No Orders were selected.”

Canyou help me… Thanks

        string company = ((Session)oTrans.Session).CompanyID;
		string message=String.Empty;
		
		CustShipAdapter adapterCustShip = new CustShipAdapter(this.oTrans);
		adapterCustShip.BOConnect();	

		CustShipPickedOrdersDataSet PickedODataSet=new CustShipPickedOrdersDataSet();
		MessageBox.Show("Si creo dataset");
		CustShipPickedOrdersDataSet.PickedOrdersRow pickedOrdersRow = PickedODataSet.PickedOrders.NewPickedOrdersRow();
		MessageBox.Show("Si creo dataRow");
		pickedOrdersRow.IsSelected=true;
		pickedOrdersRow.OrderNum=11584;
		pickedOrdersRow.OrderRelNum=1;
		pickedOrdersRow.OrderLine=1;
		pickedOrdersRow.BinNum="EMBARQUE";
		pickedOrdersRow.Quantity=1;
		pickedOrdersRow.UOM="PZ";
		pickedOrdersRow.PartNum="X301116400";
		pickedOrdersRow.Complete=false;
		pickedOrdersRow.WarehouseCode="2";
		pickedOrdersRow.CustNum=462;		
		MessageBox.Show("Termina DataRow orden:"+pickedOrdersRow.OrderNum.ToString()
		 + " seleccionado:"+pickedOrdersRow.IsSelected.ToString() + " partNumLine" + 
		pickedOrdersRow.PartNum.ToString()+ "-"+pickedOrdersRow.OrderLine.ToString());

		bool re1=adapterCustShip.PrePickedOrders(PickedODataSet,out message);
		MessageBox.Show("1.-Ejecuta PREPICKEDORDES: "+re1.ToString());
		
		bool re2=adapterCustShip.ProcessPickedOrder(false,out message,PickedODataSet);
		MessageBox.Show("2.-Ejecuta PROCESSPICKEDORDES: "+re2.ToString());

Make sure in the trace you track changes, this will show you the records as they are added.

Most likely you are missing the RowMod
pickedOrdersRow.RowMod = “A”; // or “U” i dont know

1 Like

I try this ----> pickedOrdersRow.RowMod = “A”; // or “U” i dont know

both “A” and “U” but it is not works, the result is FALSE

this is all the code:

		string company = ((Session)oTrans.Session).CompanyID;
		string message=String.Empty;
		
		CustShipAdapter adapterCustShip = new CustShipAdapter(this.oTrans);
		adapterCustShip.BOConnect();	

		CustShipPickedOrdersDataSet PickedODataSet=new CustShipPickedOrdersDataSet();
		MessageBox.Show("Si creo dataset");
		CustShipPickedOrdersDataSet.PickedOrdersRow pickedOrdersRow = PickedODataSet.PickedOrders.NewPickedOrdersRow();
		MessageBox.Show("Si creo dataRow");
		pickedOrdersRow.IsSelected=true;
		pickedOrdersRow.OrderNum=11584;
		pickedOrdersRow.OrderRelNum=1;
		pickedOrdersRow.OrderLine=1;
		pickedOrdersRow.BinNum="EMBARQUE";
		pickedOrdersRow.Quantity=1;
		pickedOrdersRow.UOM="PZ";
		pickedOrdersRow.PartNum="X301116400";
		pickedOrdersRow.Complete=false;
		pickedOrdersRow.WarehouseCode="2";
		pickedOrdersRow.CustNum=462;	
		pickedOrdersRow.RowMod = "U";	
		MessageBox.Show("Termina DataRow orden:"+pickedOrdersRow.OrderNum.ToString()
		 + " seleccionado:"+pickedOrdersRow.IsSelected.ToString() + " partNumLine" + 
		pickedOrdersRow.PartNum.ToString()+ "-"+pickedOrdersRow.OrderLine.ToString());

		bool re1=adapterCustShip.PrePickedOrders(PickedODataSet,out message);
		MessageBox.Show("1.-Ejecuta PREPICKEDORDES: "+re1.ToString());
		
		bool re2=adapterCustShip.ProcessPickedOrder(false,out message,PickedODataSet);
		MessageBox.Show("2.-Ejecuta PROCESSPICKEDORDES: "+re2.ToString());

		adapterCustShip.GetNewShipHead();	
		DataRow ship = adapterCustShip.CustShipData.ShipHead[adapterCustShip.CustShipData.ShipHead.Rows.Count - 1];
		ship["Company"] = company;
		//ship["OTSOrderNum"] = 11584;
		ship["OrderNum"] = 11584;
		ship["CurrencyCode"] = "MXP";
		ship["ShipViaCode"] = 1;
		adapterCustShip.Update();
		int resultado=Convert.ToInt32(ship["PackNum"].ToString());
		MessageBox.Show("3.-CREA HEAD:"+resultado.ToString());

		//adapterCustShip.GetByID(resultado);
		//MessageBox.Show("4.-EJECUTA GETBYID");

		adapterCustShip.POGetNew(0,resultado,out message);
		MessageBox.Show("5.-EJECUTA POGetNew");

		adapterCustShip.POGetDtlList(resultado, message,0,message,out message);
		MessageBox.Show("6.-EJECUTA POGetDtlList");

		adapterCustShip.BuildShipToCustomerList(11584,out message);
		MessageBox.Show("7.-EJECUTA BuildShipToCustomerList");

		adapterCustShip.BuildShipToList(11584,462,out message);
		MessageBox.Show("8.-EJECUTA BuildShipToList");


		adapterCustShip.Dispose();
		oTrans.Update();

can anybody help me?

You can help yourself by using a full trace. Do the process manually on the form will full trace running. This will expose EXACTLY what data is in that dataset at the time PrePickedOrders is called. You can also potentially decompile the UI form to see what it is doing. You may want to consider hiring a consultant to help you out. While everyone here on the forum is more than willing to help, more advanced problems like this that require detective work are taxing for a busy expert.

Perhaps sharing your full trace here will help. (Make sure you remove any sensitive information)

1 Like