使用C#通过suiteTalk进行NetSuite自定义记录搜索

cep*_*att 6 c# netsuite

我们在通过SuiteTalk搜索自定义记录时遇到问题.以下是我们呼吁的样本.我们遇到的问题是尝试使用记录的internalId设置搜索.这里的问题在于我们的初始开发帐户中这个自定义记录的内部id是482但是当我们通过我们的bundle部署它时,记录被分配了内部Id为314.这可能是因为这个内部id不是每个站点安装一个站点中的静态,所以我们想知道要设置什么属性来引用自定义记录.当我们创建记录时,我们将其"scriptId"指定为'customrecord_myCustomRecord'但是通过suitetalk我们没有"scriptId".我们允许此代码在所有环境中工作而不是特定环境的最佳方式是什么?如果是这样,你能举例说明它是如何使用的.

我们试图从中调用的代码(C#).我们目前正在使用2013.2端点.

private SearchResult NetSuite_getPackageContentsCustomRecord(string sParentRef){List PackageSearchResults = new List();

    CustomRecord custRec = new CustomRecord();

    CustomRecordSearch customRecordSearch = new CustomRecordSearch();

    SearchMultiSelectCustomField searchFilter1 = new SearchMultiSelectCustomField();
    searchFilter1.internalId = "customrecord_myCustomRecord_sublist";
    searchFilter1.@operator = SearchMultiSelectFieldOperator.anyOf;
    searchFilter1.operatorSpecified = true;
    ListOrRecordRef lRecordRef = new ListOrRecordRef();
    lRecordRef.internalId = sParentRef;
    searchFilter1.searchValue = new ListOrRecordRef[] { lRecordRef };

    CustomRecordSearchBasic customRecordBasic = new CustomRecordSearchBasic();
    customRecordBasic.recType = new RecordRef();
    customRecordBasic.recType.internalId = "314";  // "482";  //THIS LINE IS GIVING US THE TROUBLE
    //customRecordBasic.recType.name = "customrecord_myCustomRecord";
    customRecordBasic.customFieldList = new SearchCustomField[] { searchFilter1 };

    customRecordSearch.basic = customRecordBasic;

    // Search for the customer entity
    SearchResult results = _service.search(customRecordSearch);

    return results;
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*att 8

我搜遍了一个解决方案,以避免硬编码internalId.甚至NetSuite支持都没能给我一个解决方案.最后,我在NetSuite的知识库getCustomizationId中偶然发现了一个解决方案.

这将返回所有customRecord的internalId,scriptId和name(或NetSuite条款中的customRecordType!这是很难找到的.)

public string GetCustomizationId(string scriptId)
{
    // Perform getCustomizationId on custom record type
    CustomizationType ct = new CustomizationType();
    ct.getCustomizationTypeSpecified = true;
    ct.getCustomizationType = GetCustomizationType.customRecordType;

    // Retrieve active custom record type IDs. The includeInactives param is set to false.
    GetCustomizationIdResult getCustIdResult = _service.getCustomizationId(ct, false);

    foreach (var customizationRef in getCustIdResult.customizationRefList)
    {
        if (customizationRef.scriptId == scriptId) return customizationRef.internalId;
    }

    return null;
}
Run Code Online (Sandbox Code Playgroud)