Составные поля в MSCRM 2013 - программирование
Подтвердить что ты не робот

Составные поля в MSCRM 2013

У меня есть вопрос по поводу составных атрибутов, что я был бы признателен, если бы вы могли мне помочь. Я разместил это раньше в других блогах вопросов, но не получил ответа. Я доволен.

Я пишу JavaScript, который будет обновлять поля (т.е. address1_line1, address1_line2, address1_line3, address1_city, address1_stateorprovince, address1_postalcode, address1_country) в составном (address1_composite). Когда поля обновляются, композиция, похоже, не обновляется. Мне нужно открыть композит и снова закрыть его. Есть ли способ сделать это автоматически в JavaScript?

Я пробовал следующие идеи:

Идея 1:

Xrm.Page.data.entity.save();

Это рекомендуется на http://community.dynamics.com/crm/b/magnetismsolutionscrmblog/archive/2013/10/22/working-with-dynamics-crm-2013-composite-fields-fly-out-menu.aspx Это не так хорошо, как мои клиенты хотят просмотреть композит перед сохранением страницы. Также я бы не хотел сохранять страницу для своих клиентов, поскольку они этого не хотят. Они хотели бы решить, когда делать это сами.

Идея 2:

Xrm.Page.data.refresh();

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

Идея 3:

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

Xrm.Page.getAttribute("address1_composite")._attribute.setValueForCompositeField();

Мне это не нравится по следующим причинам:

  • Это взломать, поскольку он не использует системные функции сделанной кнопки для записи данных.
  • Вы не получаете форматирование системы, которое вы получаете с помощью кнопки "Готово" , хотя это будет сделано, когда форма будет сохранена, так что это не так уж плохо.
  • В будущем, если клиентам разрешено добавлять свои собственные составные поля, это может вызвать проблемы, поскольку имена полей могут быть разными.
  • Это требует, чтобы я написал дополнительный код для каждой формы, у которой есть композит, который имеет поля с разными именами схем. Например. Я должен написать другой код для форм с адресами ShipTo и BillTo, поскольку код для формы учетной записи не будет работать.
Еще одна идея заключалась в том, чтобы установить фокус на составное поле после внесения изменений в любое из полей внутри составного элемента.
Xrm.Page.data.entity.attributes.get("address1_composite").controls.get(0).setFocus(); 

Это лучшая идея, поэтому, но она далека от совершенства. Это заставляет пользователя нажать кнопку "Готово" и, следовательно, поля будут записаны. Я надеялся на что-то более автоматизированное.

Мой вопрос: Было бы здорово, если бы был способ щелкнуть кнопку "Готово" в JavaScript. Это дало бы мне форматирование сделанной кнопки и автоматизации, в которой я нуждаюсь.

Обновление - 14/04/2014 Начиная с публикации этого вопроса, я был в контакте с Microsoft, и они говорят, что нет поддерживаемого способа нажатия кнопки "done" с помощью программы.

4b9b3361

Ответ 1

Если поле заблокировано, CRM JavaScript не отправляет данные обратно на сервер для обновления. Другой подход:

  • выполнить обновление с использованием JavaScript (так что пользователь видит изменение); и
  • используйте серверную сторону plugin в событии Update, чтобы значение сохранялось.