SharePoint使用查找下拉列表和获取值

时间:2017-01-25 22:15:56

标签: javascript sharepoint lookup dropdown

我似乎在从下拉列表查找字段返回值时遇到一些麻烦。我有以下代码从我正在查找的列表中获取值:

var siteUrl = _spPageContextInfo.webServerRelativeUrl;

function getDropdownValues(tempNumTitle) {
    var clientContext = new SP.ClientContext(siteUrl);
    var tempDropdownValueList = clientContext.get_web().get_lists().getByTitle('Temps');

    var camlQuery = new SP.CamlQuery();
    camlQuery.set_viewXml('<View>' +
                              '<RowLimit>' +
                                  '100' +
                              '</RowLimit>' +
                          '</View>');

    this.tempQuery = tempDropdownValueList.getItems(camlQuery);

    clientContext.load(tempQuery);
    clientContext.executeQueryAsync(
        // on success of getting Temp Values from dropdown
        // match it with the tempNum entry
        function (sender, args) {
            var tempDropDownValues = {};

            var tempEnumerator = tempQuery.getEnumerator();

            while(tempEnumerator.moveNext()) {
                var tempItem = tempEnumerator.get_current();
                var tempTitle = tempItem.get_item('Title');
                var tempId = tempItem.get_item('ID');
                tempDropDownValues[tempTitle] = tempId;

            }

            selectTemp(tempNumTitle, tempDropdownValues)
        },
        // on failure
        function (sender, args) {
            console.info('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
        }
    );
}

它执行得很好,给我下拉值。然后它使用我们正在查找的tempNumTitle的参数调用函数selectTemp,并检索下拉列表的列表。这是下一个功能:

function selectTemp(tempNumTitle, tempValues) {
    var clientContext = new SP.ClientContext(siteUrl);
    var tempMatchValueList = clientContext.get_web().get_lists().getByTitle('Numbers-Temp');

    var camlQuery = new SP.CamlQuery();
    camlQuery.set_viewXml('<View>' +
                              '<Query>' +
                                  '<Where>' +
                                      '<Eq>' +
                                          '<FieldRef Name="Title" />' +
                                          '<Value Type="Text">' + tempNumTitle + '</Value>' +
                                      '</Eq>' +
                                  '</Where>' +
                              '</Query>' +
                          '</View>');

    this.tempMatchValueQuery = tempMatchValueList.getItems(camlQuery);

    clientContext.load(tempMatchValueQuery);
    clientContext.executeQueryAsync(
        // on success
        function (sender, args) {
            var temp = '';

            tempEnumerator = tempMatchValueQuery.getEnumerator();
            while(tempEnumerator.moveNext()) {
                var tempItem = tempEnumerator.get_current();
                temp = tempItem.get_item('Temp0');
            }
        },
        // on failure
        function (sender, args) {
            console.info('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
        }
    );
}

它几乎让我得到了我正在寻找的东西,但我得到的是这样的东西:     temp:{$ 1E_1:3,$ 2e_1:“Temp 3”}

我想要$ 2e_1或“Temp 3”的价值。我怎样才能获得这个价值,而不仅仅是临时[“$ 2e_1”]?

1 个答案:

答案 0 :(得分:0)

访问查阅列或人员选取器列时,列值是复杂类型而不是简单字符串。

您可以在返回的对象上调用.get_lookupValue()以获取查阅列的值的文本表示,或.get_lookupId()以获取查找列表(或站点中)中相应项的ID号在人员选择器列的情况下,集合的用户信息列表。)

因此,在您的情况下,假设“Temp0”是查阅列的内部名称,您应该能够这样做:

temp = tempItem.get_item('Temp0').get_lookupValue();