In a recent SLX Web project, it was requested that I add a contact lookup to the insert SalesOrder view, and when that was set, use the contact's address for the Shipping and Billing address in the SalesOrder. I was able to add a new Contact property to the SalesOrder and add the lookup to the insert SalesOrder view, but I wasn't able to reference the new property after it was set.
It turned out that on the insert form, the Contact property wasn't actually being written until after the new SalesOrder record was saved. In order to get the selected contact's address information, I simply referenced the Contact entity returned in the lookup as shown in this sample.
This code was added to a C# Snippet action in the OnChange Action event of the new contact lookup.
Sage.Entity.Interfaces.ISalesOrder salesOrder = BindingSource.Current as Sage.Entity.Interfaces.ISalesOrder;
Sage.Entity.Interfaces.IContact con = lkeContact.LookupResultValue as Sage.Entity.Interfaces.IContact;
if (salesOrder != null && con != null && con.Address != null)
salesOrder.BillingAddress = salesOrder.SetSalesOrderBillingAddress(con.Address);
salesOrder.BillingContact = con;
salesOrder.BillToName = con.NameLF;
salesOrder.ShippingAddress = salesOrder.SetSalesOrderShippingAddress(con.Address);
salesOrder.ShippingContact = con;
salesOrder.ShipToName = con.NameLF;
In addition, I added similar code the OnChange Action of the Account lookup, only instead I set the SalesOrder properties to Null instead. I did this so that if a new Account was selected, a new contact would also need to be selected along with the new address information.
Hope you find this example helpful. Thanks for reading!