Arhn - архитектура программирования

Netsuite: как прикрепить настраиваемые поля к заказам на продажу

Документации для Netsuite довольно мало, они охватывают основы, а затем позволяют вам исследовать. Любой, кто не обладает обширными знаниями PHP, пытаясь использовать их инструментарий php, будет на коленях просить о пощаде.

В любой момент на протяжении всего проекта это были пробы и ошибки, попытки разобраться во всем, пока все не заработало.

Я в тупике при назначении настраиваемых полей заказам на продажу, я знаю, что это должен быть объект объекта объекта, чтобы он мог снизить уровень XML для мыла, но что с чем с чем?

У меня есть код, над которым я работал, но он жалуется, что это неправильный тип RecordRef. Если кто-то работал с Netsuite и чувствует мою боль, пожалуйста, поделитесь со мной своими знаниями, прежде чем я выдерну все свои волосы.

Заранее спасибо.

Код:

$customFields = array('internalId' => 'custbody_new_die_yn','value' => array('name' => 'custbody_new_die_yn','internalId' => 'NO'));
$customObject = new nsComplexObject("SelectCustomFieldRef");
$customObject->setFields($customFields);

$salesOrderFields = array(

    'entity'        => new nsRecordRef(array('internalId' => $userId)),
    'paymentMethod' => array('internalId' => 8),
    'ccNumber'      => 4111111111111111,
    'ccExpireDate'  => date("c", mktime(0,0,0,11,1,2011)),
    'ccName'        => 'Test Testerson',
    'itemList'  => array(
        'item'  => array(
            'item'      => array('internalId' => 5963),
            'quantity'  => 5
        )
    ),
    'department' => new nsRecordRef(array('internalId' => 1)),
    'class' => new nsRecordRef(array('internalId' => 47)),
    'customFieldList' => $customObject
);
13.01.2011

  • Я обнаружил, что мне нужно прототипировать все мои взаимодействия с веб-сервисами Netsuite на Java, используя сгенерированный Axis интерфейс, чтобы выяснить, как правильно создавать запросы SOAP. Только после того, как я заработаю на Java, я попытаюсь перевести это в инструментарий PHP. По возможности я избегаю PHP с netsuite. 14.01.2011

Ответы:


1

Я не знаком с использованием PHP с Netsuite, но я много работал с c#/.net Netsuite. Как упомянул Крейг, мне гораздо проще использовать такой язык, как c#/.net, с интерфейсом, сгенерированным Visual Studio, чтобы выяснить, что доступно в API веб-службы Netsuite SuiteTalk.

В Справочном центре NetSuite есть довольно много документации по этому поводу — далеко не все, что вам нужно, но хорошее начало. Справочный центр Netsuite

Ознакомьтесь с разделом SuiteFlex/SuiteTalk (веб-сервисы), особенно на этой странице Ids & References. Использование внутренних идентификаторов, внешних идентификаторов и ссылок

С учетом сказанного я попытаюсь помочь с примером .net и объяснением добавления настраиваемого поля в заказ на продажу.

Вот несколько примеров добавления различных CustomFieldRefs:

//A list object to store all the customFieldRefs
List<CustomFieldRef> oCustomFieldRefList = new List<CustomFieldRef>();

//List or Record Type reference
SelectCustomFieldRef custbody_XXX_freight_terms = new SelectCustomFieldRef();
custbody_XXX_freight_terms.internalId = "custbody_XXX_freight_terms";
ListOrRecordRef oFreightTermsRecordRef = new ListOrRecordRef();
oFreightTermsRecordRef.internalId = <internalId of specific record in Netsuite>;
//See the References link above for more info on this - trying to figure out typeId caused me a lot of pain.
oFreightTermsRecordRef.typeId = <internalId of the List Record Type in Netsuite>; 
custbody_XXX_freight_terms.value = oFreightTermsRecordRef;
oCustomFieldRefList.Add(custbody_XXX_freight_terms);

//Freeform text sorta field            
StringCustomFieldRef objStringCustomFieldRef = new StringCustomFieldRef();
objStringCustomFieldRef.internalId = "custbody_XXX_tracking_link";
objStringCustomFieldRef.value = "StringValue";
oCustomFieldRefList.Add(objStringCustomFieldRef);

//Checkbox field type
BooleanCustomFieldRef custbody_XXX_if_fulfilled = new BooleanCustomFieldRef();
custbody_XXX_if_fulfilled.internalId = "custbody_XXX_if_fulfilled";
custbody_XXX_if_fulfilled.value = true;
oCustomFieldRefList.Add(custbody_XXX_if_fulfilled);

//By far the most complicated example a multi-select list referencing other records in Netsuite
MultiSelectCustomFieldRef custrecord_XXX_transaction_link = new MultiSelectCustomFieldRef();
//internal id of field you are updating
custrecord_XXX_transaction_link.internalId = "custrecord_XXX_transaction_link";

List<ListOrRecordRef> oListOrRecordRefList = new List<ListOrRecordRef>();

ListOrRecordRef oListOrRecordRefItemFulfillment = new ListOrRecordRef();
oListOrRecordRefItemFulfillment.name = "Item Fulfillment";
oListOrRecordRefItemFulfillment.internalId = <ItemFulfillmentInternalId>;
//Item Fulfillment is record type (Transaction -30) - this is from the above Reference links
oListOrRecordRefItemFulfillment.typeId = "-30";
oListOrRecordRefList.Add(oListOrRecordRefItemFulfillment);

ListOrRecordRef oListOrRecordRefSalesOrder = new ListOrRecordRef();
oListOrRecordRefSalesOrder.name = "Sales Order";
oListOrRecordRefSalesOrder.internalId = <SalesOrderInternalId>;
//Sales Order is record type (Transaction -30) - this is from the above Reference links
oListOrRecordRefSalesOrder.typeId = "-30";
oListOrRecordRefList.Add(oListOrRecordRefSalesOrder);

//Add array of all the ListOrRecordRefs to the MultiSelectCustomFieldRef        
custrecord_XXX_transaction_link.value = oListOrRecordRefList.ToArray();
oCustomFieldRefList.Add(custrecord_XXX_transaction_link);

//And then add all these to the Custom Record List (Array) on the Sales Order Record
objSalesOrder.customFieldList = oCustomFieldRefList.ToArray();

Из того, что я могу сказать в приведенном выше примере, я думаю, что ваша проблема связана с идентификатором типа ListOrRecordRef. Из вашего примера трудно сказать, на какой typeId вы ссылаетесь, но если вы можете понять это и установить TypeId в своем SelectCustomFieldRef, я думаю, это должно решить вашу проблему.

22.02.2011
  • Я понял это, вероятно, через 3-4 дня после того, как отправил вопрос через группу пользователей netsuite, наконец, кто-то решился. Это было именно то, о чем вы думали, что ListOrRecordRef был проблемой после того, как мне сказали, что NS примет его только так, стало легко понять, почему NS принимает это именно так. Спасибо за подробную информацию, кто-то будет искать это однажды и найдет это полезным, и поэтому я отмечаю этот ответ. Спасибо еще раз. 23.02.2011
  • @ Рик, ты случайно не знаешь, можно ли программно идентифицировать typeID? Другими словами, зная имя настраиваемого поля, есть ли способ определить текущий ассоциированный CustomList? 31.12.2014
  • Обратите внимание, что для StringCustomFieldRef это должно быть свойство scriptId, а не internalId. Вот как теперь будет выглядеть эта строка: objStringCustomFieldRef.scriptId = custbody_XXX_tracking_link; 11.08.2016

  • 2

    Внутренний идентификатор ссылки на настраиваемое поле — это идентификатор ссылки на запись, которую вы пытаетесь обновить. Это можно найти в полях «Тело транзакции» для этой записи в Netsuite.

    Внутренний идентификатор для ListOrRecordRef — это внутренний идентификатор фактического элемента списка или записи, которую вы хотите прикрепить к ранее упомянутой записи.

    TypeID для ListOrRecordRef — это внутренний идентификатор пользовательского списка/записи. Это родительский идентификатор для предыдущего внутреннего идентификатора, и он не связан с исходной записью.

    23.01.2019
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..