เหตุใดสคริปต์ NetSuite ของฉันจึงล้มเหลวโดยมีข้อผิดพลาด RCRD_DSNT_EXIST

ฉันเป็นมือใหม่กับ NetSuite ดังนั้นโปรดใช้ความสุภาพ

ฉันมีสคริปต์ง่ายๆ ซึ่งมีจุดประสงค์เพื่อลบเครื่องหมายคำพูดทั้งหมดที่ส่งคืนจากการค้นหาเฉพาะ

นี่คือ:

function executeSavedSearch()
{
    var searchresults = nlapiSearchRecord('estimate', 1234, null, null);
    for (var i = 0; searchresults != null && i < searchresults.length; i++) 
    {
        var searchresult = searchresults[i];
        nlapiDeleteRecord(searchresults[i].getRecordType(), searchresults[i].getId());
    }
}

แค่นั้นแหละ. แต่ทุกครั้งที่ฉันเรียกใช้ มันล้มเหลว และบันทึกการดำเนินการจะแสดง RCRD_DSNT_EXIST พร้อมด้วยรายละเอียดของ "ไม่มีบันทึกนั้น"

ฉันขอยืนยันว่ารหัสการค้นหา (1234 ข้างต้น) ถูกต้องกี่ครั้งก็ได้ การค้นหาจะส่งกลับเรกคอร์ดจำนวนหนึ่ง ดังนั้นจึงไม่ใช่ว่าไม่มีผลลัพธ์สำหรับสคริปต์ที่จะทำงาน

ความช่วยเหลือใด ๆ ที่ได้รับอย่างสุดซึ้ง


person Bud    schedule 27.01.2020    source แหล่งที่มา


คำตอบ (4)


คุณช่วยแบ่งปันตัวกรองและคอลัมน์การค้นหาที่บันทึกไว้ได้ไหม อาจมีโอกาสที่สายหลัก/สายภาษี/สายการเดินเรือไม่ได้ถูกกำหนดไว้ ซึ่งทำให้หลายบรรทัดจะแสดงในการค้นหาที่บันทึกไว้สำหรับธุรกรรม

person NetSuite Help    schedule 28.01.2020

ลองสิ่งนี้

var estimateSearch = nlapiSearchRecord("estimate", null,
        [
            // add or remove filters as per your need.
            ["formulanumeric: {internalid}", "between", "200", "300"],
            "AND",
            ["mainline", "is", "T"] // In order to avoid duplicate records in result, do not remove this filter 
        ],
        [
            new nlobjSearchColumn("internalid") // Result column
        ]
    );
    var quoteId;
    for (var i = 0; estimateSearch != null && i < estimateSearch.length; i++) {
        quoteId = estimateSearch[i].getValue('internalid');
        nlapiLogExecution("Debug", "Quote ID: " + quoteId, " Index: " + i);
        // nlapiDeleteRecord('Estimate', quoteId); // Verify the Execution Logs before you uncomment this line of code.
    }

ฉันหวังว่านี่จะช่วยได้

person Sidd    schedule 28.01.2020
comment
ขอบคุณซิด โปรดดูคำตอบที่ยาวกว่าของฉันด้านล่าง (นั่นคือวิธีที่คุณควรตอบใครบางคนที่นี่) - person Bud; 28.01.2020

ขอบคุณซิดด์ ด้วยการบันทึกข้อผิดพลาดตามที่คุณแนะนำ ฉันจึงจำกัดให้แคบลงเหลือเพียงการเรียกจริงไปยัง nlapiDeleteRecord นี่คือวงของฉัน:

for (var i = 0; searchresults != null && i < searchresults.length; i++) { try { nlapiLogExecution("Debug", "About to delete record id " + searchresults[i].getId());
nlapiDeleteRecord(searchresults[i].getRecordType(), searchresults[i].getId()); } catch (err) { var errMessage = err; if(err instanceof nlobjError) { errMessage = errMessage + ' ' + err.getDetails() + ' ' + 'Failed to Delete ID : ' + id; } nlapiLogExecution('ERROR', 'Error', errMessage); return err } }

ID ที่บันทึกและ ID ที่แสดงในข้อความแสดงข้อผิดพลาดเหมือนกัน - ดังนั้นจึงบันทึก "เกี่ยวกับการลบบันทึก ID 1234" จากนั้นจึงแสดงข้อความแสดงข้อผิดพลาด:

รหัส: RCRD_DSNT_EXIST รายละเอียด: ไม่มีเรกคอร์ดนั้น ไม่มีบันทึกนั้น ไม่สามารถลบ ID : 1234

แต่เมื่อฉันเรียกใช้การค้นหาที่บันทึกไว้ ฉันพบว่าจริงๆ แล้ว ได้ ลบบันทึก 1234 แล้ว ครั้งถัดไปที่ฉันเรียกใช้ มันจะพ่นข้อความเดียวกันออกมา - แต่เกี่ยวกับ ID 1235 จากนั้นมันก็จะถูกลบออกไป 1235 ราวกับว่ามันพยายามลบมันสองครั้งด้วยเหตุผลบางอย่าง สำเร็จในครั้งแรกแล้วก็ล้มเหลวในครั้งที่สองเนื่องจากถูกลบไปแล้ว

และฉันได้ตรวจสอบการค้นหาซ้ำแล้วซ้ำอีก - ไม่มีแถวหลายแถวต่อเครื่องหมายคำพูด ถ้าฉันดำเนินการข้างต้นโดยใส่เครื่องหมายลบบรรทัด ฉันจะได้รับสิ่งที่ฉันคาดหวัง - รายการบันทึกสำหรับทุก ID ในการค้นหาของฉัน

มีข้อเสนอแนะอะไรบ้าง?

person Bud    schedule 28.01.2020
comment
โปรดแบ่งปันตัวกรองและคอลัมน์ของการค้นหาที่คุณบันทึกไว้ ดูเหมือนว่าปัญหาจะอยู่ที่การค้นหาที่บันทึกไว้ - person Sidd; 29.01.2020

ครั้งต่อไปให้ลองเรียกใช้สคริปต์ของคุณใน Script Debugger คุณสามารถติดตามสาเหตุของข้อผิดพลาดนี้ได้อย่างง่ายดายใน Script Debugger

person vVinceth    schedule 29.01.2020