public async Task
UpdateAddress(string accountId, Address address) { var accountData = await GetAccountData(new ZMiuWsMiaReadAccount { ContractAccountNo = accountId, WithAccountMailAddr = SapFlags.Yes }); // Check if the posted address is the same as the current address. var serializationSettings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; var originalJson = JsonConvert.SerializeObject(await mapper.Map(accountData.AccountMailingAddress, new Address()), serializationSettings); var newJson = JsonConvert.SerializeObject(address, serializationSettings); if (originalJson == newJson) return address; // Nothing was changed. var mailingAddressData = accountData.AccountMailingAddress; mailingAddressData.City = address.City?.Trim(); mailingAddressData.Country = address.CountryCode?.Trim(); mailingAddressData.HouseNumber = address.HouseNumber?.Trim(); mailingAddressData.HouseNumberSupplement = address.SuiteNumber?.Trim(); mailingAddressData.POBox = address.PoBox?.Trim(); mailingAddressData.State = address.Region?.Trim(); mailingAddressData.Street = address.Street?.Trim(); mailingAddressData.PostalCode = address.PostalCode?.Trim(); mailingAddressData.DefaultFlag = address.IsPrimary ? SapFlags.Yes : SapFlags.No; var invoker = SapInvoker.Create(() => SapEndpointFactory.GetAccountEndpoint(Settings), Logger); var updateAccountResponse = await invoker.Invoke(client => client.ZMiuWsMiaUpdateAccountAsync(new ZMiuWsMiaUpdateAccountRequest { ZMiuWsMiaUpdateAccount = new ZMiuWsMiaUpdateAccount { ContractAccountNo = accountId, AccountMailingAddress = mailingAddressData } })); if (updateAccountResponse.ZMiuWsMiaUpdateAccountResponse.MailingAddressChanged != SapFlags.Yes) throw new SystemOfRecordException(updateAccountResponse.ZMiuWsMiaUpdateAccountResponse.ReturnMessage.ReturnMessageText); // Reload the address. accountData = await GetAccountData(new ZMiuWsMiaReadAccount { ContractAccountNo = accountId, WithAccountMailAddr = SapFlags.Yes }); mailingAddressData = accountData.AccountMailingAddress; var newAddress = await mapper.Map(mailingAddressData, new Address()); await SendMessageToServiceBus(MailingAddressUpdatedMessage.MessageName, new MailingAddressUpdatedMessage { AccountId = accountId, Address = newAddress }); return newAddress; }