Поиск пользовательских записей NetSuite через suiteTalk с использованием C #

У нас возникла проблема с поиском пользовательской записи через SuiteTalk. Ниже приведен пример того, что мы вызываем. Проблема, с которой мы сталкиваемся, заключается в попытке настроить поиск с использованием internalId записи. Проблема здесь заключается в нашей начальной учетной записи разработки, внутренний идентификатор этой настраиваемой записи - 482, но когда мы развернули ее через наш пакет, записи был назначен внутренний идентификатор 314. Разумеется, этот внутренний идентификатор не static на сайте для каждой установки сайта, поэтому мы задались вопросом, какое свойство настроить для ссылки на настраиваемую запись. Когда мы создавали запись, мы присвоили ее «scriptId» значение «customrecord_myCustomRecord», но через suitetalk у нас нет «scriptId». Как лучше всего разрешить этому коду работать во всех средах, а не в какой-то конкретной? И если да, то не могли бы вы привести пример того, как это можно было бы использовать.

Код (C #), из которого мы пытаемся выполнить вызов. В настоящее время мы используем конечные точки 2013.2.

частный SearchResult NetSuite_getPackageContentsCustomRecord (строка sParentRef) {список PackageSearchResults = новый список ();

    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;
}

person cepatt    schedule 18.02.2014    source источник


Ответы (2)


Я повсюду искал решение, чтобы избежать жесткого кодирования внутренних идентификаторов. Даже служба поддержки NetSuite не смогла мне помочь. Наконец, я наткнулся на решение в базе знаний NetSuite, getCustomizationId.

Это возвращает internalId, scriptId и имя для всех customRecord (или 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;
}
person Matt    schedule 10.03.2015
comment
спасибо, дружище, ты помог мне найти customRecordType. Меня искали почти повсюду, но я ничего не нашел о customRecordType. - person kriznaraj; 14.03.2018

вы можете сделать internalid внешним свойством, чтобы вы могли изменять его в зависимости от среды. InternalId будет изменен только при первой установке в среду. когда вы развертываете его в этой среде, внутренний идентификатор не изменится с будущими развертываниями, если вы не выберете параметр «Добавить / переименовать» во время развертывания.

person Faz    schedule 19.02.2014
comment
Можете ли вы подробнее рассказать о том, что вы имеете в виду, говоря о том, что internalid является внешним свойством? Я чувствую, что почти понимаю идею, которую вы передаете, но могу использовать ее под другим углом. - person cepatt; 19.02.2014
comment
Я имел в виду, что у вас может быть internalId в файле конфигурации (файле свойств), а не в коде. - person Faz; 19.02.2014
comment
Это уже вариант, над которым мы работаем. Но, поскольку это может касаться нескольких разных клиентов, мы стараемся держаться подальше от этого сценария, чтобы ограничить количество усилий во время настройки. Хотя это действительный обходной путь. - person cepatt; 19.02.2014
comment
Это неизбежно прямо сейчас. В будущем Netsuite должна предложить подходящие решения для этого. - person Faz; 20.02.2014