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

时间:2014-02-18 16:00:21

标签: 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;
}

2 个答案:

答案 0 :(得分:7)

我搜遍了一个解决方案,以避免对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;
}

答案 1 :(得分:0)

您可以将internalid作为外部属性,以便您可以根据环境进行更改。 只有在第一次安装到环境中时,才会更改internalId。当您将其部署到该环境中时,除非您在部署期间选择“添加/重命名”选项,否则internalid将不会随将来的部署而更改。