खोज…


परिचय

जब आप सूट्सस्क्रिप्ट के साथ खोज बनाते हैं, तो आप फ़िल्टर ऑब्जेक्ट्स या फ़िल्टर एक्सप्रेशन की "फ़िल्टर" के रूप में प्रदान कर सकते हैं। दूसरा विकल्प अधिक पठनीय है और आपको नस्टल एक्सप्रेशंस (3 स्तर तक) प्रदान करने के लिए बहुत ही लचीला विकल्प देता है न केवल डिफ़ॉल्ट "AND" का उपयोग करते हुए, बल्कि "OR" और "NOT" ऑपरेटर भी।

फ़िल्टर शब्द

फ़िल्टर अभिव्यक्तियों को समझने के लिए, हमें फ़िल्टर शब्द से शुरू करना चाहिए। यह तार का एक सरल सरणी है , जिसमें कम से कम 3 तत्व होते हैं:

  1. फ़िल्टर (फ़ील्ड / ज्वाइन फ़ील्ड / फॉर्मूला / सारांश)
  2. ऑपरेटर (खोजकर्ता)
  3. मान (स्ट्रिंग मान (या स्ट्रिंग मानों की सरणी), फ़िल्टर पैरामीटर के रूप में उपयोग किए जाने के लिए)
 // Simple example:
 ['amount', 'equalto', '0.00']
 
 // When the field is checkbox, use 'T' or 'F'
 ['mainline', 'is', 'T']

 // You can use join fields
 ['customer.companyname', 'contains', 'ltd']

 // summary filter term
 ['sum(amount)', 'notlessthan', '170.50']

 // summary of joined fields
 ['sum(transaction.amount)', 'greatherthan', '1000.00']

 // formula:
 ["formulatext: NVL({fullname},'John')", "contains", "ohn"]

 // and even summary formula refering joined fields:
 ['sum(formulanumeric: {transaction.netamount} + {transaction.taxtotal})', 'greaterthanorequalto','100.00']

 // for selection fields, you may use 'anyof'
 // and put values in array
 ['type','anyof',['CustInvc','VendBill','VendCred']]

 // when using unary operator, like isempty/isnotempty
 // don't forget that the filter term array contains at least 3 elements
 // and put an empty string as third:
 ['email', 'isnotempty', '']

 // you may have more than 3 elements in Filter Term array,
 // when the operator requires more than one value:
 ['grossamount','between','100.00','200.00']

कुछ चयनकर्ता फ़ील्ड में, आप विशेष मानों का उपयोग कर सकते हैं।

 // When filtering the user related fields, you can use:
 // Me (Current user): @CURRENT@
 // My Team (somebody from the team I am leading): @HIERARCHY@
 ['nextapprover','is','@CURRENT@']

 // The same is valid for Subsidiary, Department, Location, etc.
 // @CURRENT@ means MINE (Subsidiary, Department...)
 // @HIERARCHY@ means MINE or DESCENDANTS
 ["subsidiary","is","@HIERARCHY@"]

 // on selection fields you may use @ANY@ and @NONE@
 ['nextapprover','is','@NONE@']

फ़िल्टर अभिव्यक्ति

सरल फिल्टर अभिव्यक्ति भी एक सरणी है । इसमें एक या अधिक फ़िल्टर शब्द शामिल हैं, जो ऑपरेटरों के साथ संयुक्त हैं - 'AND', 'OR', 'NOT'। (ऑपरेटर्स केस असंवेदनशील हैं):

[ 
  ['mainline', 'is', 'T'],
  'and', ['type','anyof',['CustInvc','CustCred']],
  'and', 'not', ['amount', 'equalto', '0.00'],
  'or', ['customer.companyname', 'contains', 'ltd']
]

अधिक जटिल फ़िल्टर एक्सप्रेशंस में फ़िल्टर शब्द और नेस्टेड फ़िल्टर एक्सप्रेशंस शामिल हो सकते हैं, ऑपरेटरों के साथ संयुक्त। नेस्टेड अभिव्यक्तियों के 3 से अधिक स्तरों की अनुमति नहीं है:

[ 
  ['mainline', 'is', 'T'],
  'and', ['type','anyof',['CustInvc','CustCred']],
  'and', [ ['customer.companyname', 'contains', 'ltd'],
           'or', ['customer.companyname', 'contains', 'inc']
         ],
  'and', [ ['subsidiary', 'is', 'HQ'],
           'or', ['subsidiary', 'anyof', '@HIERARCHY@']
         ],
  'and', ['trandate', 'notbefore', 'yesterday']
 ]

और अंत में, चलो यह सब पूरी तरह से एक SS2.0 नमूने में डालें:

var s = search.create({
    type    : 'transaction',        
    columns : [
               'trandate', 
               'tranid',
               'currency',
               'customer.companyname',
               'customer.country', 
               'amount' 
              ],
    filters : [ 
                ['mainline', 'is', 'T'],
                'and', ['type','anyof',['VendBill','VendCred']],
                'and', [ ['customer.companyname', 'contains', 'ltd'],
                         'or', ['customer.companyname', 'contains', 'inc']
                       ],
                'and', [ ['subsidiary', 'is', 'HQ'],
                         'or', ['subsidiary', 'anyof', '@HIERARCHY@']
                       ],
                'and', ['trandate', 'notbefore', 'yesterday']
              ]
});

फ़िल्टर भाव बनाम फ़िल्टर ऑब्जेक्ट

फ़िल्टर अभिव्यक्ति में फ़िल्टर ऑब्जेक्ट शामिल नहीं हो सकते । यह बहुत महत्वपूर्ण है। यदि आप फ़िल्टर एक्सप्रेशन के साथ अपने फ़िल्टर बनाने का निर्णय लेते हैं, तो आप ऐरे स्ट्रिंग का उपयोग करते हैं। निम्नलिखित सिंटैक्स गलत है :

// WRONG!!!
var f1 = search.createFilter({
            name: 'mainline',
            operator: search.Operator.IS,
            values: 'T'
});

var f2 = search.createFilter({
            name: 'type',
            operator: search.Operator.ANYOF,
            values: ['VendBill','VendCred']
});

// here you will receive an error message
var s = search.create({
    type    : 'transaction',        
    filters : [ f1, 'and', f2 ] // f1,f2 are Filter Objects, instead of string arrays
});

इसके बजाय, सही का उपयोग करें:

// CORRECT!!!
var f1 = ['mainline', search.Operator.IS, 'T'];

var f2 = ['type', search.Operator.ANYOF, ['VendBill','VendCred'] ];

var s = search.create({
    type    : 'transaction',        
    filters : [ f1, 'and', f2 ]
});

या यदि आप फ़िल्टर ऑब्जेक्ट दृष्टिकोण के साथ रखना चाहते हैं, तो फ़िल्टर ऑब्जेक्ट्स का एक सरणी पास करें, और ऑपरेटर 'AND', 'OR', 'NOT' के बारे में भूल जाएं। यह हमेशा रहेगा और

// correct, but not useful
var f1 = search.createFilter({
            name: 'mainline',
            operator: search.Operator.IS,
            values: 'T'
});

var f2 = search.createFilter({
            name: 'type',
            operator: search.Operator.ANYOF,
            values: ['VendBill','VendCred']
});


var s = search.create({
    type    : 'transaction',        
    filters : [ f1, f2 ] // here you have array of Filter Objects,
                         // filtering only when all of them are TRUE
});

उपयोगी संकेत

  1. यहाँ आप उपलब्ध दाखिलों के लिए उपलब्ध खोज फ़िल्टर मूल्यों की सूची पा सकते हैं:
    https://system.netsuite.com/app/help/helpcenter.nl?fid=section_N3010842.html
    ये आप अभिव्यक्ति में उपयोग कर सकते हैं जैसे:
['trandate', 'notbefore', 'daysAgo17']
  1. यहाँ खोज ऑपरेटर हैं:
    https://system.netsuite.com/app/help/helpcenter.nl?fid=section_N3005172.html
    बेशक आप serach.Operator enum का उपयोग कर सकते हैं:
    https://system.netsuite.com/app/help/helpcenter.nl?fid=section_4345782273.html

  2. यहाँ खोज सारांश प्रकार हैं:
    https://system.netsuite.com/app/help/helpcenter.nl?fid=section_N3010474.html

  3. आप ANYOF ऑपरेटर का चयन चुनिंदा प्रकार के क्षेत्रों (सूची / रिकॉर्ड) पर कर सकते हैं। यदि आप इसे फ्री-टेक्स्ट फ़ील्ड (जैसे नाम, ईमेल आदि) के विरुद्ध उपयोग करना चाहते हैं, तो एकमात्र तरीका 'OR' ऑपरेटरों के साथ नेस्टेड फ़िल्टर एक्सप्रेशन बनाना है:

[ ['email', 'startswith', '[email protected]'],
  'or', ['email', 'startswith', '[email protected]'], 
  'or', ['email', 'startswith', '[email protected]'], 
  'or', ['email', 'startswith', '[email protected]'] 
]

या आप इसके बजाय यह कर, छोटी स्क्रिप्ट लिख सकते हैं:

function stringFieldAnyOf(fieldId, listOfValues) {    
    var result = [];
    if (listOfValues.length > 0) {
        for (var i = 0; i < listOfValues.length; i++) {
            result.push([fieldId, 'startswith', listOfValues[i]]);
            result.push('or');
        }
        result.pop(); // remove the last 'or'
    }
    return result;
}

// usage: (two more filters added just to illustrate how to combine with other filters)
var custSearch = search.create({
  type: record.Type.CUSTOMER,
  columns: searchColumn,
  filters: [
            ['companyname', 'startswith', 'A'], 
            'and', stringFieldAnyOf('email', ['[email protected]', '[email protected]']),
            'and', ['companyname', 'contains', 'b']
           ]

});
  1. अभी भी भरोसा नहीं हुआ? एक धोखा के लिए खोज रहे हैं? :)
    नेटसुइट यूआई में एक सहेजी गई खोज बनाएं, खोज आईडी लें (बताएं: सीमा शुल्क 1212) और फ़िल्टर अभिव्यक्ति लॉग करें।
    var s = search.load('customsearch1234');
    
    log.debug('filterExpression', JSON.stringify(s.filterExpression));


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow