4

Я попытался выполнить следующую команду с консоли.Как получить доступ к элементам управления с консоли

var subject = Xrm.Page.ui.controls.get("subject"); 

Это точный синтаксис, который я использую на веб-ресурсе, который я подключаю к CRM. Тем не менее, у меня появилось сообщение об ошибке «Невозможно получить элементы управления« неопределенной или нулевой ссылкой ».

Я действительно понимаю сообщение. То, что я хочу знать, в два раза.

  1. Что синтаксис будет работать с консоли (F12) для обозначения материала на экране?
  2. Почему это не работает так, как я? Где нет ui?

Я проверил, что я могу относиться как XRM и Crm.Page, но, по-видимому щий является нулевого (он перечислен, когда я распечатать содержимое Страницы но брусчатка к null).

+0

обернута ваш код команды внутри функции JS? Потому что иначе 'Xrm.Page.ui' всегда будет интерпретироваться как null или не объект, как это в вашем случае. – amartine

+0

Не могли бы вы объяснить, почему это так? Xrm - это переменная, доступная из консоли - почему перенос вызова в функцию имеет значение? Благодаря! – Ryan

+4

@ Ryan Я считаю, что он ошибается или что он неправильно понял вопрос. Внутри DOM есть целая группа * Xrm * и * Xrm.Page *. Но та, которая нацелена на то, что видят, открывается путем добавления * frames [0] * перед ней (при попытке с консоли, а не с веб-ресурса). Раздражение более сильной степени ... –

ответ

1

В дополнение к тому, что сказал @Daryl, я могу добавить, что я использую другой синтаксис. По какой-то причине я не заставляю его работать. Возможно, это связано с другой версией браузера или чем-то еще. Вместо этого попробуйте выполнить это, если вы все еще не можете заставить его работать (хотя я должен признать, что он короче = лучше).

Xrm.Page.getAttribute("lastname").getValue(); 

В Lastname частей тестируются минута назад о создании экземпляра объекта Contact. Я просто поставил точку останова внутри скрипта, который был выполнен onchange и, хотя я был сломанный, я ввел указанную выше команду в консоль.

Если ни один из подходов не работает для вас, у вас возникла какая-то странная проблема с вашим CRM или браузером.

2

Это работает для меня Xrm.Page.getControl("controlId"). Это просто ярлык для того, что у вас уже есть ... cant-disable-set-to-read-only-protect-gray-out-etc-a-field

+0

Когда я запускаю код в веб-ресурсе, я получаю его для поиска моего компонента (называемого * subject *), но когда я его запускаю с консоли, я получаю «* Объект не поддерживает свойство или метод getControl» *». Это как * getControl * не определяется в моей * Xrm.Page * при доступе через консоль. Что я могу делать неправильно? –

+0

@AndreasJohansson Какую версию IE вы используете? Вы пробовали другой компьютер? У меня никогда не было ничего хорошего, когда вы вызывали непосредственно в CRM, а не пытались вызвать его вручную из командной строки ... – Daryl

+0

Я пробовал IE10 на Win8 и IE8 на Windows Server. Такая же проблема для обоих. Вы говорите, что можете, например, нажмите «новый» и начните разбивать новый * Контакт * и в середине процесса, вы можете нажать F12 и получить доступ к содержимому полей 'Xrm.Page.getControl (« owner »). getvalue()' ?! –

12

Я знаю, что это своего рода старый поток, но если вы все еще получаете ошибку «объект не поддерживает свойство ..» при выполнении команды с консоли IE F12; попробуйте вызвать его из кадра т.е.

frames[0].Xrm.Page.getAttribute("controlId").getValue(); 

В CRM 2013 немного отличается

frames[1].Xrm.Page 
+0

Вы ошибаетесь. Сейчас я сижу с CRM 2013, и это все еще * frames [0] *. Однако вы можете прочитать комментарий, который я сделал выше. Может, это то, что происходит на вашем компьютере? Было бы здорово узнать на этот раз. –

+0

@ lazarogonzales На самом деле, я должен добавить, что, возможно, я тоже частично ошибся. Кажется, что разница между * frames [index] * частью между 2011 и 2013 годами **, но также ** между локальными и он-лайн (и я бы не был забит, если разница варьируется до/после обновлений, свопов и подъем до 2015 года). Хороший намек! –

+0

фреймы [0] работает для меня с использованием CRM 2015 Update 0.1 на посылке, Chrome 46.0.2490.80 –

3

Это своего рода трудно обнаружить кадры в различных браузерах, так что это немного Javascript может помочь вам:

for(var i=0;i<5;i++) //loop through 0 to 4 
    if(frames[i].Xrm.Page.ui != undefined) //check if undefined  
    { 
     Xrm = frames[i].Xrm; //assign Xrm 
     console.info("~: Xrm updated with frame " + i + " :~"); //show info 
     break; //breakout the loop 
    } 

Что он делает?

Что это в основном делает это проходные 0-5, чтобы найти кадр, где Xrm.Page.ui не undefined, как только он получает ее он присваивает его XRM и разрывает петлю.

Как пользоваться?

Чтобы использовать его просто скопировать/вставить и запустить в консоли браузера один раз в сеанса, то после вы можете запустить/проверить все ваши XRM коды образуют консоль браузера.

+0

В условном выражении может возникнуть несколько иной синтаксис. Прежде всего, я спонтанно постараюсь избежать '! =', Если это возможно, и пойти на '! =='. Во-вторых, я считаю, что вы можете использовать 'if (! Frames [i] .Xrm.Page.ui)' only. В-третьих, я считаю, что это может быть частью условия цикла for, сводящего к минимуму количество строк. :) –

+0

Yup, возможны модификации, но ** if (! Frames [i] .Xrm.Page.ui) ** не будет работать и будет бросать ** Невозможно получить свойство «Xrm» неопределенной или нулевой ссылки ** –

0

Причина, по которой некоторым людям нужна эта информация, является доступ к их собственному коду. Если вам нужно получить доступ к своим собственным методам с консоли, в 2011 году любые глобальные методы (или пространства имен) в вашем javascript также были в формах [0]. Очевидно, что это плохая идея, только с точки зрения именования. В формах v6 + любые глобальные объекты или функции находятся в объекте с именем customScriptsFrame внутри фреймов [0] (или, предположительно, какой бы фрейм не найден Xrm).

frames[0].customScriptsFrame.myFunctionName();