Autocomplete for external list

Home Forums Autocomplete Autocomplete for external list

Viewing 11 reply threads
  • Author
    Posts
    • #7120
      lzuhuo
      Participant

        Hi Alex, I’ll wait for your return from the holidays, hehe. But I want to know if with your autocomplete.js script I can query data from an external list in DFFS, or I need to create a custom js to connect to my external sql server to query the data. Thanks

      • #7121
        Alexander Bautz
        Keymaster

          Hi,
          I have not used external lists myself so I need you to test this snippet for me. Ensure you use the latest version of spjs-utility.js (v1.205), and add this override code below where you refer the spjs-utility.js file:

          <script type="text/javascript">
          spjs.utility.queryItems = function(argObj){
          	var content, result, requestHeader, fieldValObj, value;
          	if(argObj.listBaseUrl===undefined){
          		argObj.listBaseUrl=L_Menu_BaseUrl;
          	}
          	if(argObj.listName===undefined || (argObj.query===undefined && argObj.viewName===undefined)){
          		alert("[spjs.utility.queryItems]\n\nMissing parameters!\n\nYou must provide a minimum of \"listName\", \"query\" or \"viewName\" and \"viewFields\".");
          		return;
          	}
          	if(spjs.$.inArray('ID',argObj.viewFields)===-1){
          		argObj.viewFields.push('ID');
          	}
          	if(spjs.$.inArray('BdcIdentity',argObj.viewFields)===-1){
          		argObj.viewFields.push('BdcIdentity');
          	}
          	content = spjs.utility.wrapQuery({'listName':argObj.listName, 'query':argObj.query, 'folder':argObj.folder, 'viewName':argObj.viewName, 'viewFields':argObj.viewFields, 'rowLimit':argObj.rowLimit, 'pagingInfo':argObj.pagingInfo,'scope':argObj.scope});
          	result = {'count':-1, 'nextPagingInfo':'', items:[]};	
          	if(argObj.setRequestHeader===false){
          		requestHeader  = '';
          	}else{
          		requestHeader  = 'http://schemas.microsoft.com/sharepoint/soap/GetListItems';
          	}
          	spjs.utility.wrapSoap(argObj.listBaseUrl + '/_vti_bin/lists.asmx',requestHeader, content, function(data){
          		result.count = parseInt(spjs.$(data).filterNode("rs:data").attr('ItemCount'),10);
          		result.nextPagingInfo = spjs.$(data).filterNode("rs:data").attr('ListItemCollectionPositionNext');
          		fieldValObj = {};
          		spjs.$(data).filterNode('z:row').each(function(idx, itemData){
          			fieldValObj[idx] = {};
          			spjs.$.each(argObj.viewFields,function(i,field){
          				if(field === "ID" && spjs.$(itemData).attr("ows_ID") === undefined){
          					if(spjs.$(itemData).attr("ows_BdcIdentity") !== undefined){
          						value = spjs.$(itemData).attr("ows_BdcIdentity");
          					}else{
          						value = "";
          					}
          				}else{
          					value = spjs.$(itemData).attr('ows_' + field);
          				}				
          				if(value === undefined){
          					value = null;
          				}
          				fieldValObj[idx][field] = value;
          			});
          			result.items.push(fieldValObj[idx]);
          		});
          	});
          	return result;
          }
          </script>

          When this is done, try the autcomplete solution. Please let me know how this works out – and use the developer toolbar (F12 > Console) to look for error messages.

          Alexander

        • #7123
          lzuhuo
          Participant

            Could you explain me with more details? I have to insert this code in CEWP below of DFFS_frontend_CEWP.js.aspx? Seems like ext list columns doesn’t have ID

          • #7124
            Alexander Bautz
            Keymaster

              Hi,
              Yes, it is the missing ID column that causes it to malfunction. This is what I have tried to take care of in the modified function above.

              Try inserting this right below where you load the spjs-utility.js script in the “DFFS_frontend_CEWP.js.aspx” CEWP:

              <script type="text/javascript" src="/Your_Path_Here/spjs-utility.js"></script>
              // Add the code snippet here

              If this does not work, you can most likely make it work if you add a column “ID” (with an unique id number) to the external list.

              Alexander

            • #7139
              lzuhuo
              Participant

                Hi Alex
                I insert an ID column and “/” in “listBaseUrl” and still not working. It tries the search but does not complete, do not return data. This is the console error

                
                
                NewForm.aspx:794 Uncaught SyntaxError: Unexpected token }
                jquery-1.11.1.min.js:4 Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check http://xhr.spec.whatwg.org/.
                http://srvintranet/Javascript/jquery-1.11.1.min.js Failed to load resource
                spjs-utility.js:340 Uncaught TypeError: Cannot read property 'match' of undefined
                http://srvintranet/Javascript/jquery-1.11.1.min.js Failed to load resource
                spjs-utility.js:340 Uncaught TypeError: Cannot read property 'match' of undefined
              • #7140
                Alexander Bautz
                Keymaster

                  The first line indicates a syntax error. If you right click the page and view source – what do you find in line 794?

                  Alexander

                • #7142
                  lzuhuo
                  Participant

                    Just a “}”, I correct already

                  • #7143
                    lzuhuo
                    Participant

                      This is the console error:

                      
                      
                       OPTIONS http://_vti_bin/lists.asmx jquery-1.11.1.min.js:4 sendjquery-1.11.1.min.js:4 m.extend.ajaxspjs-utility.js:325 spjs.utility.wrapSoapNewForm.aspx:767 spjs.utility.queryItemsspjs-utility.js:978 spjs_QueryItemsVM1154:1 (anonymous function)
                      spjs-utility.js:340 Uncaught TypeError: Cannot read property 'match' of undefinedspjs-utility.js:340 spjs.$.ajax.errorjquery-1.11.1.min.js:2 jjquery-1.11.1.min.js:2 k.fireWithjquery-1.11.1.min.js:4 xjquery-1.11.1.min.js:4 m.extend.ajaxspjs-utility.js:325 spjs.utility.wrapSoapNewForm.aspx:767 spjs.utility.queryItemsspjs-utility.js:978 spjs_QueryItemsVM1154:1 (anonymous function)
                    • #7157
                      Alexander Bautz
                      Keymaster

                        I’m sorry, but as I have not experience dealing with external lists I cannot be of much help here. I hope you find the solution, and when you do, please post back the solution here.

                        Alexander

                      • #18739
                        lzuhuo
                        Participant

                          Hi Alex.
                          I saw your update on https://spjsblog.com/dffs/dffs-change-log/#SPJS-utilityjs_v1312
                          Could you give more instruction for how to use it on autocomplete function? Thanks

                          Attachments:
                        • #18781
                          Alexander Bautz
                          Keymaster

                            I’m sorry, but currently it’s not built in support for specifying the “primary key” in the query from the spjs-autocomplete solution. I have noted it and will add this in a future release.

                            Alexander

                          • #18783
                            lzuhuo
                            Participant

                              Thank you very much.

                          Viewing 11 reply threads
                          • You must be logged in to reply to this topic.