创建客户位置

时间:2019-02-12 10:46:49

标签: acumatica

我的要求是创建从第三方购物车下载订单的客户位置部分。

我已经尝试过下面的代码,并且它不保存任何位置,也不会引发任何错误。

private static void CreateCustomerLocation(Customer cust, string locationcode, OrderDTO ord, OrderDownloadActivityEntry grp)
        {
            try
            {
                LocationMaint graph = CustomerLocationMaint.CreateInstance<CustomerLocationMaint>();
                SelectedLocation loc = new SelectedLocation();
                loc.BAccountID = cust.BAccountID;
                loc.LocationCD = locationcode;
                loc.Descr = ord.CustomerLocationName;
                loc.IsContactSameAsMain = false;
                loc.IsAddressSameAsMain = false;
                graph.Location.Insert(loc);

                Contact contact = new Contact();
                contact.Attention = ord.OrderCustomerContactName;
                contact.Phone1 = ord.OrderCustomerContactPhone;
                contact.DisplayName = ord.CustomerLocationName;
                contact.LastName = ord.OrderCustomerContactName;
                contact = graph.Contact.Update(contact);
                Address address = new Address();
                address.AddressLine1 = ord.OrderShippingLocationAddress1;
                address.AddressLine2 = ord.OrderShippingLocationAddress2;
                address.City = ord.OrderShippingLocationCity;
                address.State = ord.OrderShippingLocationState;
                address.PostalCode = ord.OrderShippingLocationZip;
                address.CountryID = "US";

                contact = graph.Contact.Update(contact);
                address = graph.Address.Update(address);
                loc.DefAddressID = address.AddressID;
                loc.DefContactID = contact.ContactID;
                graph.Location.Update(loc);
                graph.Save.Press();
            }
            catch(Exception e)
            {
                grp.AddLogData(SessionID, "Create Location", "Create Location falied", null, null, e.StackTrace);
            }
        }

我无法弄清楚我在哪里犯错。对这个问题有什么建议吗?

更新

我尝试了以下代码,但出现以下错误

CARAccountLocationID'不能为空。

private static void CreateCustomerLocation(Customer cust, string locationcode, OrderDTO ord, OrderDownloadActivityEntry grp)
        {
            try
            {
                LocationMaint graph = PXGraph.CreateInstance<CustomerLocationMaint>();
                graph.BusinessAccount.Current = PXSelect<BAccount, Where<BAccount.bAccountID, Equal<Required<BAccount.bAccountID>>>>.Select(graph, cust.BAccountID);
                var newLocation = (Location)graph.Location.Cache.CreateInstance();
                var locType = LocTypeList.CustomerLoc;
                newLocation.LocType = locType;
                graph.Location.Insert(newLocation);

                var loc = (Location)graph.Location.Cache.CreateCopy(graph.Location.Current);




                Contact contact = graph.Contact.Cache.CreateCopy(graph.Contact.Current) as Contact;
                contact.Attention = ord.OrderCustomerContactName;
                contact.Phone1 = ord.OrderCustomerContactPhone;
                contact.DisplayName = ord.CustomerLocationName;
                contact.LastName = ord.OrderCustomerContactName;
                contact = graph.Contact.Update(contact);
                Address address = graph.Address.Cache.CreateCopy(graph.Address.Current) as Address;
                address.AddressLine1 = ord.OrderShippingLocationAddress1;
                address.AddressLine2 = ord.OrderShippingLocationAddress2;
                address.City = ord.OrderShippingLocationCity;
                address.State = ord.OrderShippingLocationState;
                address.PostalCode = ord.OrderShippingLocationZip;
                address.CountryID = "US";
                contact = graph.Contact.Update(contact);
                address = graph.Address.Update(address);
                contact.DefAddressID = address.AddressID;
                loc.IsAddressSameAsMain = false;
                loc.IsContactSameAsMain = false;
                loc.IsAPAccountSameAsMain = true;
                loc.IsAPPaymentInfoSameAsMain = true;
                loc.IsARAccountSameAsMain = true;
                loc.LocationCD = locationcode;
                loc.Descr = ord.CustomerLocationName;
                loc = graph.Location.Update(loc);
                loc.BAccountID = cust.BAccountID;
                graph.Location.Cache.RaiseFieldUpdated<Location.isARAccountSameAsMain>(loc, null);
                if (loc.CARAccountLocationID == null)
                    loc.CARAccountLocationID = cust.DefLocationID;
                graph.Location.Update(loc);
                graph.Save.Press();
            }
            catch(Exception e)
            {
                grp.AddLogData(SessionID, "Create Location", "Create Location falied", null, null, e.StackTrace);
            }
        }

1 个答案:

答案 0 :(得分:0)

CARAccountLocationID是给定BAccount /客户的主要位置的LocationID。在屏幕AR303020上设置GLAccounts.SameAsDefaultLocationS时,业务逻辑将使用它。 我已经看到“'CARAccountLocationID'不能为空。”在未先设置客户的情况下创建位置时发生错误。 解决方法是先设置客户,然后设置SameAsDefaultLocationS,然后设置其余字段。 在屏幕API中,操作顺序很重要。

在这种情况下,您可能需要直接将loc.CARAccountLocationID设置为客户的主要位置的LocationID。