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

问题描述 投票:0回答:3

我们在通过 SuiteTalk 搜索自定义记录时遇到问题。以下是我们调用的示例。我们遇到的问题是尝试使用记录的内部 ID 设置搜索。这里的问题在于我们最初的开发帐户中,此自定义记录的内部 ID 是 482,但是当我们通过捆绑包部署它时,该记录被分配了内部 ID 314。按理说,这个内部 ID 不是每个站点安装的站点中都是静态的,因此我们想知道要设置什么属性来引用自定义记录。当我们创建记录时,我们将其“scriptId”指定为“customrecord_myCustomRecord”,但通过 suitetalk,我们没有“scriptId”。让此代码在所有环境而不是特定环境中运行的最佳方法是什么?如果是这样,您能否举例说明如何使用它。

我们尝试从中进行调用的代码 (C#)。我们目前使用的是 2013.2 端点。

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

        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;
    }
c# netsuite
3个回答
10
投票

我到处寻找解决方案以避免硬编码internalId。 即使 NetSuite 支持也未能给我解决方案。 最后我在 NetSuite 的知识库中偶然发现了一个解决方案,getCustomizationId

这将返回所有customRecord 的internalId、scriptId 和名称(或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;
}

0
投票

您可以将internalid设置为外部属性,以便您可以根据环境更改它。 仅当您首次安装到环境中时,internalId 才会更改。当您将其部署到该环境中时,除非您在部署期间选择“添加/重命名”选项,否则内部 ID 不会随着未来的部署而更改。


0
投票

还有另一种简单的方法来查找自定义记录的记录类型。 您可以从 URL 中获取它。

  1. 转到设置 > 设置管理器
  2. 单击侧面导航栏中的记录类型
  3. 找到您的记录类型并单击它。
  4. 单击“列表”即可显示该类型的记录。
  5. 然后将鼠标悬停在“查看”链接上以查看 URL 中的 recType。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.