2016-05-16 77 views
0

我试图在客户记录上设置地址。我已经知道地址是客户子列表​​的子记录,我相信我可以在子记录上设置字段,但我无法获取要保存的更改。如何使用SuiteScript 2.0设置客户的地址信息?如何使用SuiteScript 2.0为客户设置地址

当前代码:

customer.selectNewLine({ 
    sublistId: 'addressbook' 
}); 

var addressSubrecord = customer.getCurrentSublistSubrecord({ 
    sublistId: 'addressbook', 
    fieldId: 'addressbookaddress' 
}); 

subrecordAddressDetail.setValue({ 
    fieldId: 'addr1', 
    value: 'Test Street' 
}); 

subrecordAddressDetail.setValue({ 
    fieldId: 'country', 
    value: 'US' 
}); 

customer.commitLine({ 
    sublistId: 'addressbook' 
}); 

我也试过.commitList后加入customer.save(),但我得到的错误Record has changed当我尝试这样做。

回答

1

我认为你需要把这个地址当作正确的记录。因此,在检索它之后,设置它的值,然后单独提交。沿着这些路线的东西:

customer.selectNewLine({ 
    sublistId: 'addressbook' 
}); 

var addressSubrecord = customer.getCurrentSublistSubrecord({ 
    sublistId: 'addressbook', 
    fieldId: 'addressbookaddress' 
}); 

addressSubrecord.setValue({ 
    fieldId: 'addr1', 
    value: 'Test Street' 
}); 

addressSubrecord.setValue({ 
    fieldId: 'country', 
    value: 'US' 
}); 

addressSubrecord.save() 

customer.commitLine({ //probably not necessary since address is already updated 
    sublistId: 'addressbook' 
}); 
+0

@TonyH嗨 - 感谢您的帮助。它看起来像Subrecords在SuiteScript2.0中没有'.save()'方法。调用save会返回该方法未定义的错误。我能够弄清楚我的问题 - 我发布了一个概述问题的答案。 –

1

我错过的部分是,您需要保存父记录的子记录的subrecord的任何更改才能生效。我无法保存上述父记录,因为我已对该记录进行了更改并将其保存起来,这导致了Record has already changed error

一般来说地址可以被添加到客户记录:

  1. 选择在addressbook子列表线。
  2. 检索当前选定行的地址子记录。
  3. 更新子记录。
  4. 提交addressbook子列表中的选定行。
  5. 保存父记录。

例如,这将更新的第一个地址给定客户,或者如果它不创建它存在:

function updateAddress(customer, address) { 
    var currentAddressCount = customer.getLineCount({ 
     'sublistId': 'addressbook' 
    }); 

    if (currentAddressCount === 0){ 
     customer.selectNewLine({ 
     sublistId: 'addressbook' 
     }); 
    } else { 
     customer.selectLine({ 
     sublistId: 'addressbook', 
     line: 0 
     });  
    } 

    var addressSubrecord = customer.getCurrentSublistSubrecord({ 
     sublistId: 'addressbook', 
     fieldId: 'addressbookaddress' 
    }); 

    // Set all required values here. 
    addressSubrecord.setValue({ 
     fieldId: 'addr1', 
     value: address.line_one 
    }) 

    customer.commitLine({ 
     sublistId: 'addressbook' 
    }); 
    customer.save() 
    } 
+0

一个令人讨厌的障碍是:因为这些子列表API只能在动态模式下使用,所以如果要更改它,则必须确保先设置Country字段。如果在动态模式下设置其他字段后更改国家/地区字段,则会丢失所有更改。最好在UI中进行空运行,以确保您知道应该设置字段的顺序。 – Eidolon108