2014-02-18 131 views
5

我們遇到了通過SuiteTalk搜索自定義記錄的問題。以下是我們所調用的示例。我們遇到的問題是嘗試使用記錄的internalId設置搜索。這裏的問題在於,在我們最初的開發賬戶中,這個自定義記錄的內部標識是482,但是當我們通過我們的捆綁包部署它時,記錄被分配了314的內部標識。這可能是因爲這個內部標識不是每個站點的安裝都是靜態的,所以我們想知道要設置什麼屬性來引用定製記錄。當我們創建記錄時,我們將其「scriptId」分配爲「customrecord_myCustomRecord」,但通過suitetalk,我們沒有「scriptId」。我們允許此代碼在所有環境中工作而不是特定工作的最佳方式是什麼?如果是這樣,你能舉一個例子來說明它可能如何被使用。通過SuiteTalk使用C#進行NetSuite自定義記錄搜索#

我們正在嘗試撥打電話的代碼(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"; 
    [email protected] = 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; 
} 

回答

6

我搜索了一個解決方案,以避免硬編碼internalId的。即使NetSuite支持也未能給我一個解決方案。最後,我偶然發現了NetSuite知識庫中的一個解決方案,getCustomizationId

這將返回所有customRecord年代internalId,scriptId和名稱(或customRecordType在NetSuite的條款!這是什麼使得它很難找到。)

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

你能更詳細地說明你的意思是什麼「將內部人員作爲外部財產「?我覺得我幾乎理解你正在傳達的想法,但可以從不同的角度來使用它。 – cepatt

+0

我的意思是你可以在配置文件(屬性文件)中有internalId,而不是在代碼中。 – Faz

+0

這已經是我們正在努力的一個選項。但是,鑑於這可能會出現在多個不同的客戶身上,我們試圖遠離這種情況,以便限制安裝過程中的工作量。雖然這是一個有效的工作。 – cepatt

相關問題