Как получить SalesOrder на основе идентификатора партнера и настраиваемого поля SalesOrder с помощью набора инструментов PHP Netsuite? - PullRequest
1 голос
/ 08 апреля 2020

Очень надеюсь на помощь в этом.

Я пытаюсь получить Заказы на продажу Партнерами на основе пользовательского статуса (поля) для Заказа на продажу. Текст этого пользовательского поля: Hold for Release .

. Я могу успешно получать записи транзакций по партнеру, но я не могу, судя по всему, понять, как выбирать только те, которые имеют имя Hold for Release. В результате получается огромный возвращенный набор данных, который мне действительно нужно минимизировать.

Я использую следующий код:

$service = new NetSuiteService();
        $service->setSearchPreferences(true,100);
        $customerSearchBasic = new PartnerSearchBasic();

        $searchValue = new RecordRef();
        $searchValue->type = 'partner';
        $searchValue->internalId = 39;  

        $searchMultiSelectField = new SearchMultiSelectField();
        setFields($searchMultiSelectField, array('operator' => 'anyOf', 'searchValue' => $searchValue));
        $customerSearchBasic->internalId = $searchMultiSelectField;

        $transactionSearchBasic = new TransactionSearchBasic();

        $searchMultiSelectEnumField = new SearchEnumMultiSelectField();
        setFields($searchMultiSelectEnumField, array('operator' => 'anyOf', 'searchValue' => "_salesOrder"));        

        $custSearchField = new SelectCustomFieldRef();
        $custSearchField->value = new ListOrRecordRef();
        $custSearchField->value->internalId = 1;
        $custSearchField->internalId = "custbody5";        

        $transactionSearchBasic->type = $searchMultiSelectEnumField;
        $transactionSearch = new TransactionSearch();

        $transactionSearch->basic = $transactionSearchBasic;
        $transactionSearch->partnerJoin = $customerSearchBasic;
        //$transactionSearch->customSearchJoin = $csb;
        $transactionSearch->customFieldList = new CustomFieldList();
        $transactionSearch->customFieldList->customField = array($custSearchField);


        $request = new SearchRequest();

        $request->searchRecord = $transactionSearch;
        $searchResponse

= $service->search($request);

Но он не возвращает только удержание для транзакций Release. Часть возвращенных данных выглядит следующим образом:

["customFieldList"]=>
       object(CustomFieldList)#4511 (1) {
         ["customField"]=>
         array(71) {[3]=>
           object(SelectCustomFieldRef)#4516 (3) {
        ["value"]=>
        object(ListOrRecordRef)#4517 (4) {
          ["name"]=>
          string(16) "Hold for Release"
          ["internalId"]=>
          string(1) "1"
          ["externalId"]=>
          NULL
          ["typeId"]=>
          string(3) "173"
        }
        ["internalId"]=>
        string(3) "884"
        ["scriptId"]=>
        string(9) "custbody5"
      }

Те записи, которые мне нужны, и эти, которые мне нужно отфильтровать:

[2]=>
      object(SelectCustomFieldRef)#4754 (3) {
        ["value"]=>
        object(ListOrRecordRef)#4755 (4) {
          ["name"]=>
          string(22) "Released to Production"
          ["internalId"]=>
          string(1) "5"
          ["externalId"]=>
          NULL
          ["typeId"]=>
          string(3) "173"
        }
        ["internalId"]=>
        string(3) "884"
        ["scriptId"]=>
        string(9) "custbody5"
      }

Что в мире я делаю неправильно?

1 Ответ

0 голосов
/ 14 апреля 2020

Я наконец нашел решение после тонны проб и ошибок. Надеюсь, это поможет кому-то в будущем.

$service = new NetSuiteService();
    $service->setSearchPreferences(true,100, false);
    $customerSearchBasic = new PartnerSearchBasic();

    $searchValue = new RecordRef();
    $searchValue->type = 'partner';
    $searchValue->internalId = 39;  

    $searchMultiSelectField = new SearchMultiSelectField();
    setFields($searchMultiSelectField, array('operator' => 'anyOf', 'searchValue' => $searchValue));
    $customerSearchBasic->internalId = $searchMultiSelectField;

    $transactionSearchBasic = new TransactionSearchBasic();

    $searchMultiSelectEnumField = new SearchEnumMultiSelectField();
    setFields($searchMultiSelectEnumField, array('operator' => 'anyOf', 'searchValue' => "_salesOrder"));        

    // is any of Eng. BOM Setup, Hold for Approval, Hold for Release, RFI, Eng. Submittal Drawings
    $hold_for_release = new ListOrRecordRef();        
    $hold_for_release->internalId = '1';

    $rfi = new ListOrRecordRef();        
    $rfi->internalId = '8';

    // you need to find the custom fields internal ID from within NetSuite
    /* Cancelled = 12
     * Change Order = 18
     * Customer Service = 7
     * Eng Bom SETUP = 10
     * Eng Submittal Drawings = 2
     * Hold for Approval = 3
     * Hold for Release = 1
     * Part Number Creation = 21
     * Partner Brand Submittal Drawings = 19
     * Pre Production Check - PB = 23
     * Pre Production Check - WG/Mix = 22
     * Purchasing = 11
     * Released to Production = 5
     * RFI = 8
     */

    $eng_bom_setup = new ListOrRecordRef();
    $eng_bom_setup->internalId = '5';

    $eng_submittal_drawings_2 = new ListOrRecordRef();        
    $eng_submittal_drawings_2->internalId = '2';        

    $domain = new SearchMultiSelectCustomField();
    $domain->scriptId = "custbody5";
    $domain->searchValue = array($hold_for_release,$rfi,$eng_submittal_drawings_2);
    $domain->operator = 'anyOf';

    $scfl = new SearchCustomFieldList();
    $scfl->customField = array($domain);
    $transactionSearchBasic->customFieldList = $scfl; 
    $transactionSearchBasic->type = $searchMultiSelectEnumField;
    $transactionSearch = new TransactionSearch();
    $transactionSearch->basic = $transactionSearchBasic;
    $transactionSearch->partnerJoin = $customerSearchBasic;

    $request = new SearchRequest();

    $request->searchRecord = $transactionSearch;
    $searchResponse = $service->search($request);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...