【问题标题】:NetSuite custom record search through suiteTalk using C#使用 C# 通过 suiteTalk 搜索 NetSuite 自定义记录
【发布时间】:2014-02-18 16:00:20
【问题描述】:

我们在通过 SuiteTalk 搜索自定义记录时遇到问题。以下是我们所称的示例。我们遇到的问题是尝试使用记录的 internalId 设置搜索。这里的问题在于我们最初的开发帐户,这个自定义记录的内部 id 是 482,但是当我们通过我们的包部署它时,记录被分配了 314 的内部 ID。按理说这个内部 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


    【解决方案1】:

    我到处寻找避免硬编码 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;
    }
    

    【讨论】:

    • 谢谢哥们,你帮我找到了customRecordType。我最多到处搜索,找不到有关 customRecordType 的任何信息。
    【解决方案2】:

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

    【讨论】:

    • 您能否详细说明“将 internalid 作为外部属性”是什么意思?我觉得我几乎理解你所传达的想法,但可以从不同的角度使用它。
    • 我的意思是你可以在配置文件(属性文件)中而不是在代码中拥有 internalId。
    • 这已经是我们正在研究的一个选项。但鉴于这可能会影响到多个不同的客户,我们试图避免这种情况,以限制设置过程中的工作量。虽然这是一个有效的解决方法。
    • 这些现在是不可避免的。 Netsuite 必须在未来为此提出适当的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多