Упорядочивание результатов поиска транзакций при использовании NetSuite PHP SDK

#php #netsuite

#php #NetSuite

Вопрос:

У меня есть несколько простых кодов, которые ищут в NetSuite заказы клиентов. Сначала возвращаются самые старые заказы. Есть ли простой способ вернуть их, упорядоченные по newest first? Я попытался просмотреть внутренности используемого нами Ryan Winchester SDK, а также провел множество поисковых запросов в Google, но, на удивление, не нашел ничего полезного

Вот код

 <?php
namespace AppControllerProduct;

use AppComponentNetSuiteServiceFactoryInterface;
use NetSuiteClassesCustomerSearchBasic;
use NetSuiteClassesRecordRef;
use NetSuiteClassesSearchEnumMultiSelectField;
use NetSuiteClassesSearchMultiSelectField;
use NetSuiteClassesSearchRequest;
use NetSuiteClassesTransactionSearch;
use NetSuiteClassesTransactionSearchBasic;
use SymfonyComponentRoutingAnnotationRoute;

class QuickTest
{
    private ServiceFactoryInterface $netSuiteServiceFactory;

    public function __construct(ServiceFactoryInterface $netSuiteServiceFactory) {
        $this->netSuiteServiceFactory = $netSuiteServiceFactory;
    }

    /**
     * @Route(path="benstest")
     */
    public function bensTest()
    {
        $customerSearchBasic = new CustomerSearchBasic();

        $searchValue = new RecordRef();
        // @phpstan-ignore-next-line
        $searchValue->type = 'customer';
        $searchValue->internalId = (string) '14835';

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

        $transactionSearchBasic = new TransactionSearchBasic();

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

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

        $request = new SearchRequest();
        $request->searchRecord = $transactionSearch;

        $nsService = $this->netSuiteServiceFactory->getNetSuiteService();

        $nsService->setSearchPreferences(false, 10);
        $response = $nsService->search($request);

        dd($response);

    }

}
 

Ответ №1:

Я не вижу способа сделать это на лету как часть вашего поиска. Похоже, что в API нет элементов управления типа OrderBy / sortBy, только размер страницы результатов. Мне кажется, что для достижения этой цели вам нужно создать пользовательский поиск в NetSuite, затем использовать TransactionSearchAdvanced объект, установив $savedSearchScriptId (который, по-видимому, ожидает поле «ID» из интерфейса) соответствующим образом. Прикрепите TransactionSearch к нему a в качестве $criteria свойства, и вы должны быть в пути.