Создание местоположения клиента - PullRequest
0 голосов
/ 12 февраля 2019

Мое требование состоит в том, чтобы создать часть местоположения клиента в заказе на загрузку из корзины покупок третьей стороны.

Я попробовал этот код ниже, и он не сохраняет местоположение, а также не вызывает никакой ошибки.

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 голосов
/ 08 марта 2019

CARAccountLocationID - это LocationID ГЛАВНОГО местоположения для данного BAccount / Customer.Он используется бизнес-логикой при настройке GLAccounts.SameAsDefaultLocationS на экране AR303020.Я видел, что «CARAccountLocationID» не может быть пустым ».ошибка при создании локации без предварительной настройки Заказчика.Решением было сначала установить клиента, затем установить SameAsDefaultLocationS, а затем установить остальные поля.В экране API порядок операций имеет значение.

В вашем случае вам может потребоваться напрямую установить loc.CARAccountLocationID в LocationID МАГНИТНОГО местоположения клиента.

...