在自动化测试过程中删除已有记录时,经常遇到“这条记录有依赖记录,无法删除”的错误。现在,我为每个依赖记录的记录类型和 ID 抓取依赖记录页面,并在继续之前使用 nlapiDeleteRecord 删除它们。必须有更好的方法来识别和删除依赖记录。
问问题
1343 次
1 回答
1
如果返回该错误的记录是事务,您可以使用几种不同的方法来识别它们。
您可以像这样查看 NetSuite 记录对象上的“Links”行项目:(请注意,它确实返回了一些奇怪的record type
字符串(“Bill”,当它应该是“vendorbill”时,等等):
var recordtype = 'purchaseorder'; // Any valid transaction record type
var recordid = 2709498; // Any valid Transaction Internal ID that has links
var recordlinks = getRecordLinks(recordtype,recordid);
/**
* Returns the an array containing the Record Type and Internal Id of each record linked to the input record
* @param {Object} rec - A NetSuite record object, or record type internal id (salesorder, purchaseorder, etc)
* @param {String} recordid - The Internal ID of the record to load (if a nlobjRecord was not provided)
* @return {Array} - Returns an array of links, or null
*/
function getRecordLinks(rec,recordid) {
if(!(typeof rec == 'object')) rec = nlapiLoadRecord(rec,recordid);
if(rec.getLineItemCount('links') == 0) return null;
var links = [];
for(var i=1,total=rec.getLineItemCount('links');i<=total;i++) {
links.push({type:rec.getLineItemValue('links','type',i),id:rec.getLineItemValue('links','id',i)});
}
return links;
}
或者,您可以执行搜索以找到它们。可能更快,并record type
为每个链接返回正确的:
var recordid = 2709498; // Any valid Transaction Internal ID that has links
var links = nlapiSearchRecord('transaction',null,[['mainline','IS','T'],'AND',['createdfrom','IS',recordid]]);
if(links != null) {
for(var i=0,total=links.length;i<total;i++) {
var link_recordtype = links[i].getRecordType();
var link_recordid = links[i].getId();
console.log('Link type:'+link_recordtype+' ID:'+link_recordid);
// nlapiDeleteRecord(link_recordtype,link_recordid);
}
}
于 2020-06-11T10:09:37.003 回答