priority-web-sdk:实现搜索字段

priority-web-sdk: Implementing search fields

我正在扩展用于 fill 函数,以使用选择字段选项填充 <select> 元素,以便处理搜索字段。

我的表单中有两个 <select> 元素,STATDES(选择)和 OWNERLOGIN(搜索)。

<div id="container" onchange="fieldChangeHandler(event)">
    ...
    <div class="item" >
        <label>Status</label>
        <select id="STATDES" onfocus="focusdiv(event)" onblur="defocusdiv(event)"></select>
    </div>
    <div class="item" >
        <label>Assigned to</label>
        <select id="OWNERLOGIN" onfocus="focusdiv(event)" onblur="defocusdiv(event)"></select>
    </div>

我正在检查 columnzoom 属性 以确定我是否应该从 searchObj.ChooseLinesearchObj.SearchLine 对象读取。

    function fill(el, sel){
        switch (myForm.columns[el.id].zoom){
            case "Choose":
                myForm.choose(el.id, sel).then(
                    function (searchObj) {
                        var i, ch;
                        $('#'+el.id).empty();
                        for (i in searchObj.ChooseLine) {
                            ch = searchObj.ChooseLine[i];
                            if (ch.string1 == sel){
                                $("#"+el.id).append('<option selected value="'+ ch.string1 +'">'+ ch.string1 +'</option>');
                            } else {
                                $('#'+el.id).append('<option value="'+ ch.string1 +'">'+ ch.string1 +'</option>');                  
                            };
                        };
                    },
                    showMessage
                );      
                break;

            case "Search":
                myForm.choose(el.id, sel).then(
                    function (searchObj) {
                        var i, ch;
                        $('#'+el.id).empty();
                        for (i in searchObj.SearchLine) {
                            ch = searchObj.SearchLine[i];
                            if (ch.string2 == sel){
                                $("#"+el.id).append('<option selected value="'+ ch.string2 +'">'+ ch.string2 +'</option>');
                            } else {
                                $('#'+el.id).append('<option value="'+ ch.string2 +'">'+ ch.string2 +'</option>');                  
                            };
                        };
                    },              
                    showMessage
                );  
                break;

        };
    };

choose STATDES returns 一个 searchObj.ChooseLine 对象上的函数。

choose OWNERLOGIN returns 一个 searchObj.SearchLine 对象上的函数。

BUT 两者的缩放类型都是 Choose

myForm.columns['STATDES']{
  attachment: 0
  decimal: 0
  field: 5
  format: ""
  mandatory: 1
  maxLength: 12
  readonly: 0
  title: "Status"
  type: "text"
  zoom: "Choose"
}

myForm.columns['OWNERLOGIN']{
  "attachment": 0,
  "decimal": 0,
  "field": 6,
  "format": "",
  "mandatory": 1,
  "maxLength": 20,
  "readonly": 0,
  "title": "Assigned to",
  "type": "text",
  "zoom": "Choose"
}

请问如何区分?

您可以声明一个变量来包含搜索结果,并分配 SearchLineChooseLine 结果之一,具体取决于存在的结果。然后简单地使用那个变量。

 myForm.choose(el.id, sel).then(
   function (searchObj) {
     const searchResults = searchObj.SearchLine ? searchObj.SearchLine : searchObj.ChooseLine;
     var i, ch;
     $('#'+el.id).empty();
     for (i in searchResults) {
        ch = searchResults[i];
        ...
     }
   },showMessage);

如果您想知道该字段是否为搜索字段(并使用 searchAction 方法),您只需检查 SearchObj 结果中是否存在 SearchLine .

const isSearchField = searchObj.SearchLine !== undefined 

当有很多选择结果时,Web-SDK 会return一个Search 对象,以便即使zoom=Choose 也可以处理搜索。因此,@naomi 建议决定结果是 Choose 还是 Search 的正确方法是检查结果对象是否包含 SearchlineChooseline.