извлечение адреса из объекта XML в переменную в NetSuite - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь создать сценарий заказа на продажу, который извлекает XML из ebay, а затем создает заказ на продажу в соответствии с информацией.

Это работает, когда я использую следующий код для сохранения адреса изXML для адресной книги в записи клиента, а затем использовать его в качестве адреса доставки, используя приведенный ниже код

var xmlobj = nlapiStringToXML(xmlstring);
var customerInternalID = findCustomerByEbayID(nlapiSelectValue(xmlobj, '/GetOrdersResponse/OrderArray/Order['+(i+1)+']//BuyerUserID'));
if (!customerInternalID){
            var customer = nlapiCreateRecord('customer');
            customer.setFieldValue('subsidiary', SUBSIDIARY);
            customer.setFieldValue('isperson', 'T');
            var emailAddr = nlapiSelectValue(xmlobj, '/GetOrdersResponse/OrderArray/Order['+(i+1)+']//Buyer/Email');
            if (emailAddr.indexOf("@") === -1 ){
                emailAddr = nlapiSelectValue(xmlobj, '/GetOrdersResponse/OrderArray/Order['+(i+1)+']//Buyer/StaticAlias');
            }
            if (emailAddr.indexOf("@") === -1 ){
                emailAddr = null;
            }
            customer.setFieldValue('email', emailAddr);
            customer.setFieldValue('custentity_ebay_user_id', nlapiSelectValue(xmlobj, '/GetOrdersResponse/OrderArray/Order['+(i+1)+']//BuyerUserID'));
            customer.setFieldValue('firstname', nlapiSelectValue(xmlobj, '/GetOrdersResponse/OrderArray/Order['+(i+1)+']//UserFirstName'));
            customer.setFieldValue('lastname', nlapiSelectValue(xmlobj, '/GetOrdersResponse/OrderArray/Order['+(i+1)+']//UserLastName'));
            customer.setFieldValue('phone', nlapiSelectValue(xmlobj, '/GetOrdersResponse/OrderArray/Order['+(i+1)+']//ShippingAddress/Phone').substring(0, 12));
            customer.setLineItemValue('addressbook', 'addressee', 1, nlapiSelectValue(xmlobj, '/GetOrdersResponse/OrderArray/Order['+(i+1)+']//ShippingAddress/Name'));
            customer.setLineItemValue('addressbook', 'addr1', 1, nlapiSelectValue(xmlobj, '/GetOrdersResponse/OrderArray/Order['+(i+1)+']//ShippingAddress/Street1'));
            customer.setLineItemValue('addressbook', 'addr2', 1, nlapiSelectValue(xmlobj, '/GetOrdersResponse/OrderArray/Order['+(i+1)+']//ShippingAddress/Street2'));
            customer.setLineItemValue('addressbook', 'addr3', 1, nlapiSelectValue(xmlobj, '/GetOrdersResponse/OrderArray/Order['+(i+1)+']//ShippingAddress/Street3'));
            customer.setLineItemValue('addressbook', 'city', 1, nlapiSelectValue(xmlobj, '/GetOrdersResponse/OrderArray/Order['+(i+1)+']//ShippingAddress/CityName'));
            customer.setLineItemValue('addressbook', 'state', 1, nlapiSelectValue(xmlobj, '/GetOrdersResponse/OrderArray/Order['+(i+1)+']//ShippingAddress/StateOrProvince'));
            customer.setLineItemValue('addressbook', 'zip', 1, nlapiSelectValue(xmlobj, '/GetOrdersResponse/OrderArray/Order['+(i+1)+']//ShippingAddress/PostalCode'));
            customer.setLineItemValue('addressbook', 'country', 1, nlapiSelectValue(xmlobj, '/GetOrdersResponse/OrderArray/Order['+(i+1)+']//ShippingAddress/Country'));

            customer.setFieldValue('custentity11', 'T');
            customerInternalID = nlapiSubmitRecord(customer, true, true);
            nlapiLogExecution('DEBUG', 'SUBMIT', 'Customer submitted with internal ID' + customerInternalID);
        }

        var customerRec = nlapiLoadRecord('customer', customerInternalID);  
        var defaultAddress = customerRec.getLineItemValues('addressbook', 'id', 1);

, но когда я пытаюсь использовать адрес из XML непосредственно в качестве адреса доставки с использованием приведенного ниже кода, я заканчиваюне имея адреса в заказе на продажу

    var defaultAddress = nlapiSelectValues(xmlobj, '/GetOrdersResponse/OrderArray/Order['+(i+1)+']//ShippingAddress');

1 Ответ

0 голосов
/ 20 ноября 2018

nlapiSelectValues выбирает текстовое значение узла.

Если вы просто пытаетесь упростить свой код, то вам нужно что-то вроде:

var defaultAdress = nlapiSelectNode(xmlobj, '/GetOrdersResponse/OrderArray/Order['+(i+1)+']//ShippingAddress');
customer.setLineItemValue('addressbook', 'addressee', 1, nlapiSelectValue(defaultAdress , 'Name'));
...
customer.setLineItemValue('addressbook', 'defaultshipping', 1, 'T'); // don't forget this
...
var soRec = nlapiTransformRecord('customer', customerInternalID, 'salesorder'); 
// the new sales order has the default shipping address as the ship to address

//however in case you have an existing customer and just want to use the supplied address:
    var shippingAddr = soRec.getSubrecord({fieldId:'shippingaddress'});
    var setShip = function(fld, val){
        shippingAddr.setValue({fieldId:fld, value:val});
    };

    var getP = function(fld){
      return nlapiSelectValue(defaultAdress , fld);
    };


    setShip('addressee', getP('Name'));
    setShip('addr1', getP('Street1'));
    setShip('addr2', getP('Street2'));
    setShip('city', getP('CityName'));
    ...
...