簡體   English   中英

SuiteScript 2.0保存的搜索過濾器:添加不在事務中的字段

[英]SuiteScript 2.0 Saved Search Filters: Adding Fields not in the Transaction

我正在嘗試運行已保存的搜索並向其添加一個過濾器,用於添加關聯記錄中的字段,但不會返回事務的返回類型。 我假設這將是一個連接,但不完全確定這是如何工作的。 搜索是在Map Reduce腳本中完成的,它應該執行以下操作:

查找具有相同名稱和不同類類型的事務中的項目。 已保存的搜索查找仍處於打開狀態且項目名稱和類是變量的銷售訂單。 我在getInputData函數中可以獲得該信息,但是在添加過濾器時遇到了問題。 那怎么樣? 我有這個代碼:

var mySearch = search.load({ id: 'customsearch_so_itemclassid' });
mySearch.filters.push(search.createFilter({ name: 'itemid', join: 'item', operator: 'IS', values: [itemName] }));
mySearch.filters.push(search.createFilter({ name: 'class', join: 'item', operator: 'ISNOT', values: [itemClass] }));

我確實有過濾器看起來像這樣:

var mySearch = search.load({ id: 'customsearch_so_itemclassid' });
mySearch.filters.push(search.createFilter({ name: 'itemid', operator: 'IS', values: [itemName] }));
mySearch.filters.push(search.createFilter({ name: 'class', operator: 'ISNOT', values: [itemClass] }));

任何人都可以指出為什么這不起作用? 我拿出過濾器,搜索運行完美。 我在搜索中添加了filter和getInputData chokes。

感謝您的時間!

當然,如果這是“交易”搜索,過濾器應該是“加入”。 嘗試將第一個過濾字段從“itemid”更改為“name”。 像這樣:

var mySearch = search.load({ id: 'customsearch_so_itemclassid' });
mySearch.filters.push(search.createFilter({ name: 'name', join: 'item', operator: 'IS', values: [itemName] }));
mySearch.filters.push(search.createFilter({ name: 'class', join: 'item', operator: 'ISNOT', values: [itemClass] }));

我知道這聽起來很愚蠢,但試一試。
一種不同的方法 - 您可以使用filterExpression而不是過濾器。 像這樣:

var mySearch = search.load({ id: 'customsearch_so_itemclassid' });
var myAdditionalFilters = [ 'and', ['item.name', 'is', [itemName] ],
                            'and', ['item.class', 'isnot', [itemClass] ]
                          ];
var myNewFilterExpression = mySearch.filterExpression.concat(myAdditionalFilters);
mySearch.filterExpression = myNewFilterExpression;

事實證明,我對於保存的搜索如何收集信息並按照我創建的方式應用過濾器基本上是無限循環感到困惑。 我們的想法是在用戶更改項目類后搜索銷售訂單,並在行項目為相同項目名稱和不同類別時將銷售訂單的行項目更新為新類別。 所以過濾器看起來像這樣:

 var mySearch = search.load({ id: 'customsearch_so_itemclassid' });
 var filters = mySearch.filters;
 filters.push(search.createFilter({ name: 'name', join: 'item', operator: 'IS', values: [itemName] }));
 filters.push(search.createFilter({ name: 'class', operator: 'NONEOF', values: [itemClass] }));
 mySearch.filters = filters;

有了這個,搜索工作。 我現在在下面的一個回復中描述了一個新問題。 map函數中的searchResults如下所示:

{"recordType":null,"id":"1","values":{"GROUP(tranid)":"289092"}}

我似乎無法從該鍵值對中獲取值。 我使用“實體”,它是未定義的。 我使用“tranid”,它是未定義的。 我嘗試了幾種不同的組合,但我無法達到這個價值。

由於我用上述過濾器回答了這個問題,這確實是一個新問題。 但如果有人能對此有所了解,我將非常感激。

最好分開問你的第二個問題。 無論如何,在你的情況下,由於搜索中的分組功能,地圖階段的'tranid'應該像這樣訪問:

        var searchResult = JSON.parse(context.value);
        var salesOrderId = searchResult.id;
        var tranId = searchResult.values['GROUP(tranid)'];

我不確定這是否是您的問題,但我發現在某些情況下,您加載現有搜索時無法直接“推送”到搜索過濾器對象,需要先將其分配給臨時變量。 也許在Rhino后端有些奇怪。

var mySearch = search.load({ id: 'customsearch_so_itemclassid' });
var filters = mySearch.filters;
filters.push(search.createFilter({ name: 'itemid', operator: 'IS', values: [itemName] }));
filters.push(search.createFilter({ name: 'class', operator: 'ISNOT', values: [itemClass] }));
mySearch.filters = filters;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM