-2

我使用批量上传地址的方法,下面的代码是使用excel文件上传地址。

我的要求是如何更新客户如果地址已经可用意味着不需要更新,如果地址不可用则意味着需要更新。 在此处输入图像描述

4

3 回答 3

0

我希望能够在 Kentico 中使用此上传新地址,同时也可以修改/更新地址及其信息。

在下面的代码中,现有地址工作正常,但我上传的新地址意味着不工作。

 AddressInfo address = AddressInfoProvider.GetAddresses()
        .WhereEquals("AddressCustomerID", customerID )
        .FirstOrDefault();

        if (address != null)
        {
            //address = new AddressInfo();
            address.AddressName = string.Join(", ", addressNameFields);
            address.AddressCustomerID = customerID;
            address.AddressLine1 = userDto.AddressLine;
            address.AddressLine2 = userDto.AddressLine2;
            address.AddressZip = userDto.PostalCode;
            address.AddressCity = userDto.City;
            address.AddressCountryID = country.CountryID;
            address.AddressStateID = state.StateID;
            address.AddressPhone = userDto.PhoneNumber;
            address.AddressPersonalName = userDto.ContactName ?? $"{userDto.FirstName} {userDto.LastName}";
            address.SetValue("Email", userDto.Email);
            address.SetValue("CompanyName", userDto.Company);
            address.SetValue("Status", "1");
            address.SetValue("AddressType", AddressType.Shipping.Code);
        }
        else
        {
            address.AddressName = string.Join(", ", addressNameFields);
            address.AddressCustomerID = customerID;
            address.AddressLine1 = userDto.AddressLine;
            address.AddressLine2 = userDto.AddressLine2;
            address.AddressZip = userDto.PostalCode;
            address.AddressCity = userDto.City;
            address.AddressCountryID = country.CountryID;
            address.AddressStateID = state.StateID;
            address.AddressPhone = userDto.PhoneNumber;
            address.AddressPersonalName = userDto.ContactName ?? $"{userDto.FirstName} {userDto.LastName}";
            address.SetValue("Email", userDto.Email);
            address.SetValue("CompanyName", userDto.Company);
            address.SetValue("Status", "1");
            address.SetValue("AddressType", AddressType.Shipping.Code);
        }
        AddressInfoProvider.SetAddressInfo(address);
于 2019-07-29T14:14:26.647 回答
0

看起来您的问题可能是您不应该创建新对象。当您通过 查找地址时AddressCustomerID,如果找到主键,AddressID将填充 ,。因此,当SetAddressInfo()调用该方法时,它已经知道它AddressID有一个值,因此它将使用您在这些字段中填充的那些值执行更新。如果没有AddressID,它将执行插入。

所以尝试这样的事情:

// see if address exists
AddressInfo address = AddressInfoProvider.GetAddresses() .WhereEquals("AddressCustomerID", customerID) .FirstOrDefault(); 

if (address == null) 
{
    // set the values
    address = new AddressInfo();
    address.AddressName = "Address1";
    address.customerID = customerID;
    address.AddressLine1 = userDto.AddressLine;
    ...
}
else
{
    // assuming the address was found
    address.AddressLine1 = userDto.AddressLine;
    address.SetValue("Email", userDto.Email);
    address.SetValue("CompanyName", userDto.Company);
    ...
}

AddressInfoProvider.SetAddressInfo(address);

address在整个过程中继续使用相同的对象而不是创建新对象。

于 2019-07-26T12:51:40.397 回答
-1

您是否查看过电子商务 API,特别是客户 API 更新地址

于 2019-07-25T15:19:09.223 回答