我们在通过 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;
}
我到处寻找解决方案以避免硬编码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;
}
您可以将internalid设置为外部属性,以便您可以根据环境更改它。 仅当您首次安装到环境中时,internalId 才会更改。当您将其部署到该环境中时,除非您在部署期间选择“添加/重命名”选项,否则内部 ID 不会随着未来的部署而更改。