Netsuite 要从采购订单记录中的合同记录中搜索fileld值

Netsuite 要从采购订单记录中的合同记录中搜索fileld值,netsuite,suitescript,Netsuite,Suitescript,我正在采购记录中的合同记录中搜索值,但无法获取值所在的字段。下面是代码。我将此代码应用于合同记录,此功能在提交前使用。 我认为我用了错误的方法进行搜索 function srchfield() { var recordid = nlapiGetRecordId() //retunrs the contract id nlapiLogExecution('DEBUG', 'recordid ', recordid ); var record

我正在采购记录中的合同记录中搜索值,但无法获取值所在的字段。下面是代码。我将此代码应用于合同记录,此功能在提交前使用。 我认为我用了错误的方法进行搜索

 function srchfield() 
 {

        var recordid = nlapiGetRecordId() //retunrs the contract id
        nlapiLogExecution('DEBUG', 'recordid ', recordid );

        var recordtype = nlapiGetRecordType();     //retunrs the contract recordtype = jobs   
        nlapiLogExecution('DEBUG', 'RecordType', recordtype);

        var loadrecord = nlapiLoadRecord(recordtype, recordid); //loads the record
        nlapiLogExecution('DEBUG', 'Load Record', loadrecord );

        var contractname = nlapiGetFieldValue('entityid'); //returs the value of the field contractname whose fieldid is = entityid
        nlapiLogExecution('DEBUG', 'ContractName ', contractname );


   var filters = new Array();
      new nlobjSearchFilter('entityid', null, 'anyof', contractname ); // entityid is field id in contract Record and contractname is defined above for contract record

          // nlapiLogExecution('DEBUG', 'SearchFilter', filters );

  var columns = new Array();
  new nlobjSearchColumn('custbodycontract'); // custbodycontractis field id in PO Record


  var searchresults = nlapiSearchRecord('purchaseorder', null, filters, columns);


for ( var i = 0; searchresults != null && i < searchresults.length; i++ )
{
   var searchresult = searchresults[ i ];
   var record = searchresult.getId( );
   var rectype = searchresult.getRecordType( );
   var cntrct_name= searchresult.getValue( 'custbodycontract' );

}

 }
函数srchfield()
{
var recordid=nlapiGetRecordId()//重新计算合同id
nlapiLogExecution('DEBUG','recordid',recordid);
var recordtype=nlapiGetRecordType();//重新展开合同记录类型=作业
nlapiLogExecution('DEBUG','RecordType','RecordType');
var loadrecord=nlapiLoadRecord(recordtype,recordid);//加载记录
nlapiLogExecution('DEBUG','Load Record',loadrecord');
var contractname=nlapiGetFieldValue('entityid');//保留fieldid为=entityid的字段contractname的值
nlapiLogExecution('DEBUG','ContractName',ContractName);
var filters=新数组();
新的nlobjSearchFilter('entityid',null,'anyof',contractname);//entityid是合同记录中的字段id,而contractname是为合同记录定义的
//nlapiLogExecution('DEBUG','SearchFilter',filters);
var columns=新数组();
新建nlobjSearchColumn('custbodycontract');//采购订单记录中的CustBodyContracts字段id
var searchresults=nlapiSearchRecord('purchaseorder',null,filters,columns);
for(var i=0;searchresults!=null&&i

提前感谢更新:我已经根据提供的评论完成了我的回答。请看最后一节。我希望有帮助。谢谢***


**如果你能进一步解释的话,我可能会给你提供这个片段。请告知

如果我正确理解了您的代码,那么以下就是您正在做的事情以及您想要做的事情:

  • 您的合同记录是本机实体记录-项目/作业。您的职能顾问刚刚将其重命名为合同
  • 在提交并部署到合同(项目/作业)记录之前,您有一个用户事件脚本(SuiteScript 1.0)
  • 使用合同记录中的信息(在本例中使用合同名称(entityid),您希望搜索POs以在标题处获取“custbodycontract”
  • 然后,您使用“entityid”过滤POs上的搜索,但PO在标题上没有该本地字段。它只在费用行和项目行上有该字段,但id为“customer”。

    您能解释一下合同记录与采购订单的关系吗?采购订单上有哪些字段(本机/自定义)可以用作合同记录的联接?


    那么,请注意这个最佳实践作为免费赠品。
  • 优化您的脚本。您不需要在提交前使用nlapiLoadRecord。请参阅以下最佳实践:
    -使用beforesubmit,如果您仅获取或设置脚本部署记录上的值,请使用nlapiGet**和nlapiSet**API。
    -在beforesubmit上,只有在获取和设置不同记录的子列表上的值时才使用nlapiLoadRecord。但是,如果仅获取行级别(不同记录)的值,则使用第一个nlapiSearchRecord。如果它不能提供您所需的内容,请使用nlapiLoadRecord。
    -在aftersubmit上,仅当您在已部署记录和其他记录的行级别上设置和获取值时,才使用nlapiLoadRecord。如果您仅在级别上获取值,请使用beforesubmit的相同做法。
    -在提交后,使用nlapiLookUp从标头获取值,如果正在设置,则使用nlapiSubmitField。仅当nlapiLoadRecord无法提供所需内容时,才使用nlapiLoadRecord。


    ****这可能是你需要的。。。
for(var i=0;arrSearchresults!=null&&i
****更新:我已经根据提供的评论完成了我的答案。请参阅最后一节。我希望这有帮助。谢谢***


**如果你能进一步解释,我可能会提供给你这个片段。请建议

如果我正确理解了您的代码,那么以下就是您正在做的事情以及您想要做的事情:

  • 您的合同记录是本机实体记录-项目/作业。您的职能顾问刚刚将其重命名为合同
  • 在提交并部署到合同(项目/作业)记录之前,您有一个用户事件脚本(SuiteScript 1.0)
  • 使用合同记录中的信息(在本例中使用合同名称(entityid),您希望搜索POs以在标题处获取“custbodycontract”
  • 然后,您使用“entityid”过滤POs上的搜索,但PO在标题上没有该本地字段。它只在费用行和项目行上有该字段,但id为“customer”。

    您能解释一下合同记录与采购订单的关系吗?采购订单上有哪些字段(本机/自定义)可以用作合同记录的联接?


    那么,请注意这个最佳实践作为免费赠品。
  • 优化您的脚本。您不需要在提交前使用nlapiLoadRecord。请参阅以下最佳实践:
    -使用beforesubmit,如果您仅获取或设置脚本部署记录上的值,请使用nlapiGet**和nlapiSet**API。
    -在beforesubmit上,如果您正在获取和设置不同记录的子列表上的值,则仅使用nlapiLoadRecord。但是,如果您仅在行级别(不同记录)获取值,则使用第一个nlapiSearchRecord。如果它不会提供您需要的值,则使用第一个nlapiSearchRecord
    
    function srchfield()
    {
        var stRecordid = nlapiGetRecordId(); /*retunrs the contract id*/
        nlapiLogExecution('DEBUG', 'recordid ', stRecordid);
    
        var stRecordtype = nlapiGetRecordType(); /*retunrs the contract recordtype = jobs*/
        nlapiLogExecution('DEBUG', 'RecordType', stRecordtype);
    
        var stContractname = nlapiGetFieldValue('entityid'); /*returs the value of the field contractname whose fieldid is = entityid*/
        nlapiLogExecution('DEBUG', 'ContractName ', stContractname);
    
        var arrFilters = new Array();
        arrFilters.push(new nlobjSearchFilter('type', null, 'anyof',
            [
                'PurchOrd'
            ])); /*As best practice, instead of directly searching on POs, add filter for transaction type since you might use this later in other transaction.*/
        arrFilters.push(new nlobjSearchFilter('mainline', null, 'is', 'T')); /*This is to exclude line level results*/
        arrFilters.push(new nlobjSearchFilter('custbodycontract', null, 'is', stContractname));
    
        var arrColumns = new Array();
        arrColumns.push(new nlobjSearchColumn('trandate')); /*I just wanted to include this column on the result. :)*/
        arrColumns.push(new nlobjSearchColumn('type')); /*I just wanted to include this column on the result. :)*/
        arrColumns.push(new nlobjSearchColumn('tranid')); /*I just wanted to include this column on the result. :)*/
        arrColumns.push(new nlobjSearchColumn('custbodycontract')); /*This is what you need.*/
    
        var arrSearchresults = nlapiSearchRecord('transaction', null, arrFilters, arrColumns);
    
    for (var i = 0; arrSearchresults != null && i < arrSearchresults.length; i++)
    {
        var objResult = arrSearchresults[i];
        var stRecId = objResult.getId();
        var stRecType = objResult.getRecordType();
        var stCntrctName = objResult.getValue('custbodycontract');
    }
    
    function srchfield()
    {
    var stRecordid = nlapiGetRecordId(); /*retunrs the contract id*/
    nlapiLogExecution('DEBUG', 'recordid ', stRecordid);
    
    var stRecordtype = nlapiGetRecordType(); /*retunrs the contract recordtype = jobs*/
    nlapiLogExecution('DEBUG', 'RecordType', stRecordtype);
    
    var stContractname = nlapiGetFieldValue('entityid'); /*returs the value of the field contractname whose fieldid is = entityid*/
    nlapiLogExecution('DEBUG', 'ContractName ', stContractname);
    
    var arrFilters = new Array();
    arrFilters.push(new nlobjSearchFilter('type', null, 'anyof',
        [
            'PurchOrd'
        ])); /*As best practice, instead of directly searching on POs, add filter for transaction type since you might use this later in other transaction.*/
    arrFilters.push(new nlobjSearchFilter('mainline', null, 'is', 'T')); /*This is to exclude line level results*/
    arrFilters.push(new nlobjSearchFilter('custbodycontract', null, 'is', stContractname));
    
    var arrColumns = new Array();
    arrColumns.push(new nlobjSearchColumn('trandate')); /*I just wanted to include this column on the result. :)*/
    arrColumns.push(new nlobjSearchColumn('type')); /*I just wanted to include this column on the result. :)*/
    arrColumns.push(new nlobjSearchColumn('tranid')); /*I just wanted to include this column on the result. :)*/
    arrColumns.push(new nlobjSearchColumn('custbodycontract')); /*This is what you need.*/
    
    var arrSearchresults = nlapiSearchRecord('transaction', null, arrFilters, arrColumns);
    for (var i = 0; arrSearchresults != null && i < arrSearchresults.length; i++)
    {
        var objResult = arrSearchresults[i];
        var stRecId = objResult.getId();
        var stRecType = objResult.getRecordType();
        var stCntrctName = objResult.getValue('custbodycontract');
    }
    }