public void Execute(IServiceProvider serviceProvider) { context = serviceProvider.GetService(typeof(IPluginExecutionContext)) as IPluginExecutionContext; factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); service = factory.CreateOrganizationService(context.UserId); if (context.MessageName == "bsd_Action_CheckUpdateWareHouseProduct") { EntityReference target = (EntityReference)context.InputParameters["Target"]; try { bool connect_ax = getConfigdefaultconnectax(); if (connect_ax == false) { throw new Exception("Thiếu khai báo connect ax"); } #region KHai báo service AX NetTcpBinding binding = new NetTcpBinding(); //net.tcp://AOS_SERVICE_HOST/DynamicsAx/Services/AXConectorAIF binding.Name = "NetTcpBinding_BHS_BSD_CRMSERVICEAXService"; EndpointAddress endpoint = new EndpointAddress(new Uri("net.tcp://" + _port + "/DynamicsAx/Services/BHS_BSD_CRMSERVICEAXServiceGroup")); ServiceReferenceAIF.BHS_BSD_CRMSERVICEAXServiceClient client = new ServiceReferenceAIF.BHS_BSD_CRMSERVICEAXServiceClient(binding, endpoint); client.ClientCredentials.Windows.ClientCredential.Domain = _domain; client.ClientCredentials.Windows.ClientCredential.UserName = _userName; client.ClientCredentials.Windows.ClientCredential.Password = _passWord; ServiceReferenceAIF.CallContext contextService = new ServiceReferenceAIF.CallContext() { Company = _company }; #endregion string bsd_site = ""; string productnumber = ""; string lst_CheckProductAX = ""; string lst_Product = ""; Entity requestDelivery = service.Retrieve(target.LogicalName, target.Id, new ColumnSet(true)); // throw new Exception("okie"); if (requestDelivery.HasValue("bsd_site")) { #region EntityReference rf_Entity = (EntityReference)requestDelivery["bsd_site"]; #endregion EntityCollection lstWarehouse; if (getConsignmentSitesConfigDefault(rf_Entity.Id)) { lstWarehouse = getWareHouse(); } else { lstWarehouse = getWareHouse(rf_Entity.Id); } #region EntityCollection lstRequestDeliveryProduct = getRequestDeliveryProduct(requestDelivery.Id); //string s_Result1 = client.BHS_ValidateOnHand(contextService, "01D.01.013:102:KD01-102:0"); //throw new Exception(s_Result1); if (lstWarehouse.Entities.Any() && lstRequestDeliveryProduct.Entities.Any()) { //throw new Exception(lstWarehouse.Entities.Count.ToString()); foreach (Entity warehouse in lstWarehouse.Entities) { int i = 0; rf_Entity = (EntityReference)warehouse["bsd_site"]; Entity en_Site = service.Retrieve(rf_Entity.LogicalName, rf_Entity.Id, new ColumnSet("bsd_code")); if (en_Site.HasValue("bsd_code")) { bsd_site = en_Site["bsd_code"].ToString().Trim(); } foreach (Entity RequestDeliveryProduct in lstRequestDeliveryProduct.Entities) { rf_Entity = (EntityReference)RequestDeliveryProduct["bsd_product"]; Entity en = service.Retrieve(rf_Entity.LogicalName, rf_Entity.Id, new ColumnSet("productnumber")); if (en.HasValue("productnumber")) { productnumber = en["productnumber"].ToString().Trim(); } if (i == 0) { lst_Product = productnumber + ":" + bsd_site + ":" + warehouse["bsd_warehouseid"].ToString().Trim() + ":0"; } else { lst_Product += ";" + productnumber + ":" + bsd_site + ":" + warehouse["bsd_warehouseid"].ToString().Trim() + ":0"; } i++; } #region call Service Update Avalible WareHouse string s_Result = ""; // throw new Exception("okie1" + lst_Product); try { s_Result = client.BHS_ValidateOnHand_RequestDelivery(contextService, lst_Product); } catch (Exception ex) { throw new Exception("Service:" + ex.Message + " lst_Product:" + lst_Product); } // if (warehouse["bsd_warehouseid"].ToString().Trim() == "KD01-102") throw new Exception("okie:"+ s_Result); //throw new Exception(s_Result + "---" + lst_Product); string[] lstProduct_Result = new string[] { }; string[] lstitem = new string[] { }; lstProduct_Result = s_Result.Split(';'); // throw new Exception(s_Result); foreach (string item in lstProduct_Result) { lstitem = item.Split(':'); decimal Quantity = Convert.ToDecimal(lstitem[4]); decimal QuantityRequestDeliveryProduct = 0m; //throw new Exception(QuantityRequestDeliveryProduct.ToString()); //throw new Exception(QuantityRequestDeliveryProduct.ToString()); EntityCollection wareHouse_Product = getWareHouseProduct(en_Site.Id, warehouse.Id, lstitem[0]); if (wareHouse_Product.Entities.Any()) { //foreach (var en in wareHouse_Product.Entities) //{ // Entity wareHouse_Product_Update = new Entity(en.LogicalName, en.Id); // wareHouse_Product_Update["bsd_date"] = DateTime.Now; // wareHouse_Product_Update["bsd_quantity"] = Quantity; // service.Update(wareHouse_Product_Update); //} foreach (var en in wareHouse_Product.Entities) { QuantityRequestDeliveryProduct = getQuantityRequestDeliveryProduct(lstitem[0], ((EntityReference)en["bsd_warehouses"]).Name);//productnumber Entity wareHouse_Product_Update = new Entity(en.LogicalName, en.Id); wareHouse_Product_Update["bsd_date"] = DateTime.Now; if (Quantity < 0 && Quantity != 0) { wareHouse_Product_Update["bsd_quantity"] = (Quantity - QuantityRequestDeliveryProduct) * -1; } //else //{ // wareHouse_Product_Update["bsd_quantity"] = Quantity; //} //wareHouse_Product_Update["bsd_quantity"] = Quantity; if (Quantity == 0) { wareHouse_Product_Update["bsd_quantity"] = Quantity; } if (Quantity > 0) { wareHouse_Product_Update["bsd_quantity"] = Quantity - QuantityRequestDeliveryProduct; wareHouse_Product_Update["bsd_description"] = "AX Check WareHouse3"; } service.Update(wareHouse_Product_Update); } } else { Entity wareHouse_Product_Create = new Entity("bsd_warehourseproduct", Guid.NewGuid()); if (Quantity < 0 && Quantity != 0) { wareHouse_Product_Create["bsd_quantity"] = (Quantity - QuantityRequestDeliveryProduct) * -1; } if (Quantity == 0) { wareHouse_Product_Create["bsd_quantity"] = 0m; } if (Quantity > 0) { wareHouse_Product_Create["bsd_quantity"] = Quantity - QuantityRequestDeliveryProduct; } //wareHouse_Product_Create["bsd_quantity"] = Quantity; wareHouse_Product_Create["bsd_name"] = lstitem[1].ToString(); wareHouse_Product_Create["bsd_date"] = DateTime.Now; wareHouse_Product_Create["bsd_site"] = new EntityReference(en_Site.LogicalName, en_Site.Id); wareHouse_Product_Create["bsd_warehouses"] = new EntityReference(warehouse.LogicalName, warehouse.Id); wareHouse_Product_Create["bsd_productid"] = lstitem[0].ToString().Trim(); Entity en_product = getProduct(lstitem[0].ToString().Trim()); wareHouse_Product_Create["bsd_product"] = new EntityReference(en_product.LogicalName, en_product.Id); wareHouse_Product_Create["bsd_unit"] = (EntityReference)en_product["defaultuomid"]; wareHouse_Product_Create["bsd_description"] = "AX Check WareHouse"; if (Quantity > 0) { wareHouse_Product_Create["bsd_description"] = "AX Check WareHouse1"; } service.Create(wareHouse_Product_Create); } } #endregion } } #endregion } //string bsd_site = ""; //string productnumber = ""; //string lst_CheckProductAX = ""; //string lst_Product = ""; //Entity requestDelivery = service.Retrieve(target.LogicalName, target.Id, new ColumnSet(true)); //// throw new Exception("okie"); //if (requestDelivery.HasValue("bsd_site")) //{ // #region // EntityReference rf_Entity = (EntityReference)requestDelivery["bsd_site"]; // #endregion // EntityCollection lstWarehouse; // if (getConsignmentSitesConfigDefault(rf_Entity.Id)) // { // lstWarehouse = getWareHouse(); // } // else // lstWarehouse = getWareHouse(rf_Entity.Id); // #region // EntityCollection lstRequestDeliveryProduct = getRequestDeliveryProduct(requestDelivery.Id); // //string s_Result1 = client.BHS_ValidateOnHand(contextService, "01D.01.013:102:KD01-102:0"); // //throw new Exception(s_Result1); // if (lstWarehouse.Entities.Any() && lstRequestDeliveryProduct.Entities.Any()) // { // foreach (Entity warehouse in lstWarehouse.Entities) // { // int i = 0; // rf_Entity = (EntityReference)warehouse["bsd_site"]; // Entity en_Site = service.Retrieve(rf_Entity.LogicalName, rf_Entity.Id, new ColumnSet("bsd_code")); // if (en_Site.HasValue("bsd_code")) bsd_site = en_Site["bsd_code"].ToString().Trim(); // foreach (Entity RequestDeliveryProduct in lstRequestDeliveryProduct.Entities) // { // rf_Entity = (EntityReference)RequestDeliveryProduct["bsd_product"]; // Entity en = service.Retrieve(rf_Entity.LogicalName, rf_Entity.Id, new ColumnSet("productnumber")); // if (en.HasValue("productnumber")) productnumber = en["productnumber"].ToString().Trim(); // if (i == 0) lst_Product = productnumber + ":" + bsd_site + ":" + warehouse["bsd_warehouseid"].ToString().Trim() + ":0"; // else lst_Product += ";" + productnumber + ":" + bsd_site + ":" + warehouse["bsd_warehouseid"].ToString().Trim() + ":0"; // i++; // } // #region call Service Update Avalible WareHouse // string s_Result = ""; // // throw new Exception("okie1" + lst_Product); // try // { // s_Result = client.BHS_ValidateOnHand_RequestDelivery(contextService, lst_Product); // } // catch (Exception ex) { throw new Exception("Service:" + ex.Message + " lst_Product:" + lst_Product); } // // if (warehouse["bsd_warehouseid"].ToString().Trim() == "KD01-102") throw new Exception("okie:"+ s_Result); // //throw new Exception(s_Result + "---" + lst_Product); // string[] lstProduct_Result = new string[] { }; // string[] lstitem = new string[] { }; // lstProduct_Result = s_Result.Split(';'); // // throw new Exception(s_Result); // //throw new Exception(lstProduct_Result.Count().ToString() + "ta"); // foreach (string item in lstProduct_Result) // { // lstitem = item.Split(':'); // decimal Quantity = Convert.ToDecimal(lstitem[4]); // // decimal Quantity = 11000000; // EntityCollection wareHouse_Product = getWareHouseProduct(en_Site.Id, warehouse.Id, lstitem[0]); // throw new Exception(lstWarehouse.Entities.Count.ToString()); // decimal QuantityRequestDeliveryProduct = getQuantityRequestDeliveryProduct(lstitem[0]);//productnumber // if (wareHouse_Product.Entities.Any()) // { // foreach (var en in wareHouse_Product.Entities) // { // Entity wareHouse_Product_Update = new Entity(en.LogicalName, en.Id); // wareHouse_Product_Update["bsd_date"] = DateTime.Now; // if (Quantity ==0) // { // wareHouse_Product_Update["bsd_quantity"] = QuantityRequestDeliveryProduct; // } // else // { // if (Quantity - QuantityRequestDeliveryProduct < 0) // { // wareHouse_Product_Update["bsd_quantity"] = (Quantity - QuantityRequestDeliveryProduct) * -1; // } // else // { // wareHouse_Product_Update["bsd_quantity"] = Quantity - QuantityRequestDeliveryProduct; // } // } // service.Update(wareHouse_Product_Update); // } // } // else // { // Entity wareHouse_Product_Create = new Entity("bsd_warehourseproduct", Guid.NewGuid()); // if (Quantity == 0) // { // wareHouse_Product_Create["bsd_quantity"] = QuantityRequestDeliveryProduct; // } // else // { // if (Quantity - QuantityRequestDeliveryProduct < 0) // { // wareHouse_Product_Create["bsd_quantity"] = (Quantity - QuantityRequestDeliveryProduct)*-1; // } // else // { // wareHouse_Product_Create["bsd_quantity"] = Quantity - QuantityRequestDeliveryProduct; // } // } // wareHouse_Product_Create["bsd_name"] = lstitem[1].ToString(); // wareHouse_Product_Create["bsd_date"] = DateTime.Now; // wareHouse_Product_Create["bsd_site"] = new EntityReference(en_Site.LogicalName, en_Site.Id); // wareHouse_Product_Create["bsd_warehouses"] = new EntityReference(warehouse.LogicalName, warehouse.Id); // wareHouse_Product_Create["bsd_productid"] = lstitem[0].ToString().Trim(); // Entity en_product = getProduct(lstitem[0].ToString().Trim()); // wareHouse_Product_Create["bsd_product"] = new EntityReference(en_product.LogicalName, en_product.Id); // wareHouse_Product_Create["bsd_unit"] = (EntityReference)en_product["defaultuomid"]; // wareHouse_Product_Create["bsd_description"] = "AX Check WareHouse"; // service.Create(wareHouse_Product_Create); // } // } // #endregion // } // } // #endregion //} context.OutputParameters["ReturnId"] = "true"; } catch (Exception ex) { throw new Exception("Can not check available Warehouse because: " + ex.Message); } } }