2016-02-17 2 views
1

В настоящее время я пытаюсь реализовать новый автокомпонент CRM в среде CRM онлайн 2016.CRM 2016 AutoComplete

Я использовал код от Sample: Auto-complete in CRM controls и подтвердил, что он работает в форме Аккаунта и другой пользовательской сущности, которая уже существует. Однако, когда я использую его один конкретный пользовательский объект и любое его строковое поле, поле автозаполнения не появляется.

Попытка:

  • Создание новой формы
  • Создания бренда нового текстовое поля для автозаполнения для запуска на
  • ПРОВЕРЯЕМЫХ что удар ext.getEventSource().showAutoComplete(resultSet);
  • VALIDATED, что никаких ошибок не быть выброшены из мой JS

У кого-нибудь есть идеи, что может быть неправильным? Я думаю, что это имеет какое-то отношение к моей сущности или форме сущности вместо кода или текстового поля.

/** Sample JavaScript code to demonstrate the auto-completion feature. 
This sample configures the auto-complete feature for the "Account Name" 
field in the account form. */ 

function suggestAccounts() { 
    // List of sample account names to suggest 
    accounts = [ 
     { name: 'A. Datum Corporation', code: 'A01' }, 
     { name: 'Adventure Works Cycles', code: 'A02' }, 
     { name: 'Alpine Ski House', code: 'A03' }, 
     { name: 'Bellows College', code: 'A04' }, 
     { name: 'Best For You Organics Company', code: 'A05' }, 
     { name: 'Blue Yonder Airlines', code: 'A06' }, 
     { name: 'City Power & Light', code: 'A07' }, 
     { name: 'Coho Vineyard', code: 'A08' }, 
     { name: 'Coho Winery', code: 'A09' }, 
     { name: 'Coho Vineyard & Winery', code: 'A10' }, 
     { name: 'Contoso, Ltd.', code: 'A11' }, 
     { name: 'Contoso Pharmaceuticals', code: 'A12' }, 
     { name: 'Contoso Suites', code: 'A13' }, 
     { name: 'Consolidated Messenger', code: 'A14' }, 
     { name: '​Fabrikam, Inc.', code: 'A15' }, 
     { name: 'Fabrikam Residences', code: 'A16' }, 
     { name: '​First Up Consultants', code: 'A17' }, 
     { name: 'Fourth Coffee', code: 'A18' }, 
     { name: 'Graphic Design Institute', code: 'A19' }, 
     { name: 'Humongous Insurance', code: 'A20' }, 
     { name: 'Lamna Healthcare Company', code: 'A21' }, 
     { name: 'Litware, Inc.', code: 'A22' }, 
     { name: 'Liberty Delightful Sinful Bakery & Cafe', code: 'A23' }, 
     { name: 'Lucerne Publishing', code: 'A24' }, 
     { name: 'Margie Travel', code: 'A25' }, 
     { name: '​Munson Pickles and Preserves Farm', code: 'A26' }, 
     { name: 'Nod Publishers', code: 'A27' }, 
     { name: 'Northwind Electric Cars', code: 'A28' }, 
     { name: 'Northwind Traders', code: 'A29' }, 
     { name: 'Proseware, Inc.', code: 'A30' }, 
     { name: 'Relecloud', code: 'A31' }, 
     { name: 'School of Fine Art', code: 'A32' }, 
     { name: 'Southridge Video', code: 'A33' }, 
     { name: 'Tailspin Toys', code: 'A34' }, 
     { name: 'Trey Research', code: 'A35' }, 
     { name: 'The Phone Company', code: 'A36' }, 
     { name: 'VanArsdel, Ltd.', code: 'A37' }, 
     { name: 'Wide World Importers', code: 'A38' }, 
     { name: '​Wingtip Toys', code: 'A39' }, 
     { name: 'Woodgrove Bank', code: 'A40' }  
    ]; 

    var keyPressFcn = function (ext) { 
     try { 
      var userInput = Xrm.Page.getControl("name").getValue(); 
      resultSet = { 
       results: new Array(), 
       commands: { 
        id: "sp_commands", 
        label: "Learn More", 
        action: function() { 
         // Specify what you want to do when the user 
         // clicks the "Learn More" link at the bottom 
         // of the auto-completion list. 
         // For this sample, we are just opening a page 
         // that provides information on working with 
         // accounts in CRM. 
         window.open("http://www.microsoft.com/en-us/dynamics/crm-customer-center/create-or-edit-an-account.aspx"); 
        } 
       } 
      }; 

      var userInputLowerCase = userInput.toLowerCase(); 
      for (i = 0; i < accounts.length; i++) { 
       if (userInputLowerCase === accounts[i].name.substring(0, userInputLowerCase.length).toLowerCase()) { 
        resultSet.results.push({ 
         id: i, 
         fields: [accounts[i].name] 
        }); 
       } 
       if (resultSet.results.length >= 10) break; 
      } 

      if (resultSet.results.length > 0) { 
       ext.getEventSource().showAutoComplete(resultSet); 
      } else { 
       ext.getEventSource().hideAutoComplete(); 
      } 
     } catch (e) { 
      // Handle any exceptions. In the sample code, 
      // we are just displaying the exception, if any. 
      console.log(e); 
     } 
    }; 

    Xrm.Page.getControl("name").addOnKeyPress(keyPressFcn);  
} 

ответ

2

Для выполнения автозаполнения необходимо иметь контроль поиска на форме. Это звучит странно, но в настоящее время это лучший способ обхода проблемы. Я поставил свою, чтобы не было видно. Примечание: это любое поле поиска, которое не имеет значения для выбранного вами отношения. Наличие поля поиска устанавливает что-то в форме для загрузки недостающих библиотек.

Я провожу большую часть своих выходных, пытаясь разобраться в подобной ситуации. Я мог подробно описать события, которые привели к этому открытию, но я пощажу вас.

Я предполагаю, что Microsoft пытается не включать ресурсы, где они не видят сконфигурированной необходимости, и поэтому отсутствуют внутренние файлы автозаполнения (пока вы не добавите в них требование).

+0

Это странно, но это правда. Работал и в моей среде. – Grigory

+0

На самом деле в строке состояния есть сообщение «Ошибка на странице», и если вы запустите отладчик Jscript в Visual Studio, вы увидите ошибку в окне вывода. Говорит «0x800a138f - ошибка времени выполнения JavaScript: невозможно получить свойство« indexOf »неопределенной или нулевой ссылки» – Grigory

+0

Я не могу поверить ... даже в последней версии CRM Online это все еще проблема. Просто попробовал, это правильно – zabby

Смежные вопросы