首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SuiteTalk高级搜索示例

SuiteTalk高级搜索示例
EN

Stack Overflow用户
提问于 2017-11-28 23:11:50
回答 3查看 4.1K关注 0票数 1

我使用NetSuite和SuiteTalk还不到一年。我已经找到了利用保存的搜索的基本搜索和高级搜索的示例,但我很难找到如何使用结果集中的条件和选定列从头开始执行高级搜索的示例。所以我想要一些例子。

EN

回答 3

Stack Overflow用户

发布于 2017-11-28 23:28:27

我回顾了可从NetSuite下载的NSClientERP项目中提供的示例。下面是一个简化的例子。

代码语言:javascript
复制
        service.searchPreferences = new SearchPreferences();
        service.searchPreferences.bodyFieldsOnly = true;
        service.searchPreferences.returnSearchColumns = true;

        TransactionSearchAdvanced customSearch = new TransactionSearchAdvanced()
        {
            columns = new TransactionSearchRow()
            {
                basic = new TransactionSearchRowBasic()
                {
                    dateCreated = new SearchColumnDateField[] { new SearchColumnDateField() }
                    , tranDate = new SearchColumnDateField[] { new SearchColumnDateField() }
                    , type = new SearchColumnEnumSelectField[] { new SearchColumnEnumSelectField() }
                    , tranId = new SearchColumnStringField[] { new SearchColumnStringField() }
                    , internalId = new SearchColumnSelectField[] { new SearchColumnSelectField() }
                    , entity = new SearchColumnSelectField[] { new SearchColumnSelectField() }
                    , item = new SearchColumnSelectField[] { new SearchColumnSelectField() }
                    , lastModifiedDate = new SearchColumnDateField[] { new SearchColumnDateField() }
                }
                , itemJoin = new ItemSearchRowBasic()
                {
                    itemId = new SearchColumnStringField[] { new SearchColumnStringField() }
                }
            }
            ,
            criteria = new TransactionSearch()
            {
                basic = new TransactionSearchBasic()
                {
                    type = new SearchEnumMultiSelectField()
                    {
                        @operator = SearchEnumMultiSelectFieldOperator.anyOf
                         , operatorSpecified = true
                         , searchValue = new string[] {
                             "_salesOrder"
                         }
                    }
                    , lastModifiedDate = new SearchDateField()
                    {
                        @operator = SearchDateFieldOperator.onOrAfter
                        , operatorSpecified = true
                        , searchValue = DateTime.Now.AddDays(-3)
                        , searchValueSpecified = true
                    }
                }
            }
        };

        Console.WriteLine("Querying NetSuite");

        SearchResult searchResult = service.search(customSearch);

        Console.WriteLine("Query Results: " + searchResult.totalRecords.ToString());
        int total = searchResult.totalRecords;
        int updated = 0;
        bool searchMore = false;


        Console.WriteLine("\nThe search() operation for transaction was run successfully.");
        Console.WriteLine("\n  Total Records = " + searchResult.totalRecords);
        Console.WriteLine("  Total Pages = " + searchResult.totalPages);
        Console.WriteLine("  Page Size = " + searchResult.pageSize);
        Console.WriteLine("  Current Page Index = " + searchResult.pageIndex);

        Console.WriteLine("\n\nHit Enter to list results");
        Console.ReadLine();

        SearchRow[] records = searchResult.searchRowList;

        if (records != null)
        {
            for (int i = 0, j = (searchResult.pageIndex - 1) * searchResult.pageSize; i < records.Length; i++, j++)
            {
                TransactionSearchRow transactionRow = (TransactionSearchRow) records[i];
                TransactionSearchRowBasic transactionRowBasic = transactionRow.basic;
                ItemSearchRowBasic itemRowBasic = transactionRow.itemJoin;
                Console.WriteLine(
                    "\n  Transaction Return Columns Row[" + j + "]: " +
                    "\n    internalId=" + transactionRowBasic.internalId[0].searchValue.internalId +
                    "\n    tranId=" + transactionRowBasic.tranId[0].searchValue +
                    "\n    type=" + transactionRowBasic.type[0].searchValue +
                    (transactionRowBasic.entity == null ? "" : ("\n    customer internalID=" + transactionRowBasic.entity[0].searchValue.internalId)) +
                    (transactionRowBasic.item == null ? "" : ("\n    item=" + transactionRowBasic.item[0].searchValue.internalId)) +
                    (itemRowBasic == null ? "" : ("\n    item.name=" + itemRowBasic.itemId[0].searchValue)) +
                    (transactionRowBasic.dateCreated == null ? "" : ("\n    createdDate=" + transactionRowBasic.dateCreated[0].searchValue.ToString()) +
                    (transactionRowBasic.tranDate == null ? "" : ("\n    tranDate=" + transactionRowBasic.tranDate[0].searchValue.ToString())) +
                    (transactionRowBasic.lastModifiedDate == null ? "" : ("\n    lastModifiedDate=" + transactionRowBasic.lastModifiedDate[0].searchValue.ToString()))));
            }
        }

在执行高级搜索之前,设置搜索首选项非常重要。如果不将returnSearchFields设置为true,我将得不到任何结果。此外,您必须同时提供条件和列。在NSClientERP示例中,以TransactionSearchAdvanced开头的每个对象都在单独的代码行中被实例化、配置和链接到子对象。我发现这很难理解。我使用一行代码来实例化整个搜索对象。

另一件需要注意的事情是itemJoin,它将Items表连接到一个销售订单行项目。您还可以使用其他联接,例如billingTransactionJoin。利用这些连接,您可以访问相关的表,以获取物品的显示名称、库存信息或发货时的跟踪编号等信息。

除了填写数据集和事后排序之外,我一直无法找到对结果进行排序的方法。如果谁有更好的办法,请让我知道。

票数 3
EN

Stack Overflow用户

发布于 2017-11-29 02:22:51

这是一个实际正确执行分页的示例。

代码语言:javascript
复制
service.searchPreferences = new SearchPreferences();
service.searchPreferences.bodyFieldsOnly = true;
service.searchPreferences.returnSearchColumns = true;

TransactionSearchAdvanced customSearch = new TransactionSearchAdvanced()
{
    columns = new TransactionSearchRow()
    {
        basic = new TransactionSearchRowBasic()
        {
            dateCreated = new SearchColumnDateField[] { new SearchColumnDateField() }
            ,
            tranDate = new SearchColumnDateField[] { new SearchColumnDateField() }
            ,
            type = new SearchColumnEnumSelectField[] { new SearchColumnEnumSelectField() }
            ,
            tranId = new SearchColumnStringField[] { new SearchColumnStringField() }
            ,
            internalId = new SearchColumnSelectField[] { new SearchColumnSelectField() }
            ,
            entity = new SearchColumnSelectField[] { new SearchColumnSelectField() }
            ,
            item = new SearchColumnSelectField[] { new SearchColumnSelectField() }
            ,
            lastModifiedDate = new SearchColumnDateField[] { new SearchColumnDateField() }
        }
        ,
        itemJoin = new ItemSearchRowBasic()
        {
            itemId = new SearchColumnStringField[] { new SearchColumnStringField() }
        }
    }
    ,
    criteria = new TransactionSearch()
    {
        basic = new TransactionSearchBasic()
        {
            type = new SearchEnumMultiSelectField()
            {
                @operator = SearchEnumMultiSelectFieldOperator.anyOf
                 ,
                operatorSpecified = true
                 ,
                searchValue = new string[] {
                     "_salesOrder"
                 }
            }
            ,
            lastModifiedDate = new SearchDateField()
            {
                @operator = SearchDateFieldOperator.onOrAfter
                ,
                operatorSpecified = true
                ,
                searchValue = DateTime.Now.AddDays(-15)
                ,
                searchValueSpecified = true
            }
        }
    }
};

Console.WriteLine("Querying NetSuite");

SearchResult res = service.search(customSearch);

Console.WriteLine("\nThe advanced search completed.");
Console.WriteLine("\n  Total Records = " + res.totalRecords);
Console.WriteLine("  Total Pages = " + res.totalPages);
Console.WriteLine("  Page Size = " + res.pageSize);
Console.WriteLine("  Current Page Index = " + res.pageIndex);

Console.WriteLine("\n\nHit Enter to list results");
Console.ReadLine();

while (res.searchRowList.Length > 0)
{
    Console.WriteLine($"\n\nProcessing page: {res.pageIndex}");
    Console.WriteLine($"Result count: {res.searchRowList.Length}");

    Console.WriteLine($"\nHit enter to list page {res.pageIndex} results");
    Console.ReadLine();


    foreach (TransactionSearchRow transactionRow in res.searchRowList)
    {
        TransactionSearchRowBasic transactionRowBasic = transactionRow.basic;
        ItemSearchRowBasic itemRowBasic = transactionRow.itemJoin;
        Console.WriteLine(
            "\n    tranId=" + transactionRowBasic.tranId[0].searchValue +
            (itemRowBasic == null ? "" : ("\n    item.name=" + itemRowBasic.itemId[0].searchValue)) 
        );
    }

    Console.WriteLine("\nQuerying NetSuite again...");
    res = service.searchMore(++res.pageIndex);
}

service.logout();
Console.WriteLine("\n\nHit Enter to close this window.");
Console.ReadLine();
票数 1
EN

Stack Overflow用户

发布于 2019-02-14 07:23:27

一年后,我又回到了这个代码。我正在编写另一个高级搜索,我想也许没有必要在数组定义中添加一个空白元素。那是一个错误。这是绝对必要的!如果省略这些参数,搜索将起作用,但对于SearchResult.basic和SearchResult.ItemJoin,只返回空值。

代码语言:javascript
复制
            TransactionSearchAdvanced advanced = new TransactionSearchAdvanced()
            {
                columns = new TransactionSearchRow()
                {
                    basic = new TransactionSearchRowBasic()
                    {

                        // new SearchColumnSelectField() is required!!!!!!
                        internalId = new SearchColumnSelectField[] { new SearchColumnSelectField() } 

                    }
                    ,
                    itemJoin = new ItemSearchRowBasic()
                    {

                        // new SearchColumnSelectField() is required!!!!!!
                        externalId = new SearchColumnSelectField[] { new SearchColumnSelectField() } 

                    }

                }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47534845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档