2014-02-11 1 views
10

У меня вопрос о композитных атрибутах, что я был бы признателен, если бы вы могли мне помочь. Я разместил это раньше в других блогах вопросов, но не получил ответа. Я доволен.Композитные поля в 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(); 

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

  1. Это хак, как он не использует функциональные возможности системы проделанных кнопок для записи данных.
  2. Вы не получаете форматирование системы, которое вы получаете с помощью кнопки «Готово», хотя это будет сделано, когда форма будет сохранена, так что это не так уж плохо.
  3. В будущем, если клиентам разрешено добавлять свои собственные составные поля, это может вызвать проблемы, поскольку имена полей могут быть разными.
  4. Это требует, чтобы я написал дополнительный код для каждой формы, у которой есть композит, который имеет поля с разными именами схем. Например. Я должен написать другой код для форм с адресами ShipTo и BillTo, поскольку код для формы учетной записи не будет работать.

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

Xrm.Page.data.entity.attributes.get("address1_composite").controls.get(0).setFocus(); 

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

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

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

+2

Я думал, что прокомментирую этот вопрос. У меня такая же проблема (по состоянию на 09/04/14 ddmmyy). Похоже, что добавление составного атрибута привязано к действию либо подтверждения, либо щелчка на поле редактирования вылета. Я ожидал, что составной элемент управления будет обновляться всякий раз, когда изменяется один из связанных атрибутов (даже с fireOnChange, а не только вручную). Обычный материал MS печально. – Raine

+4

14/04/2014 С момента публикации этого вопроса я был в контакте с Microsoft, и они говорят, что нет поддерживаемого способа нажатия кнопки «Готово» через программу. Я добавил это к основному вопросу выше. – Oly

+0

Что вы определили? – Kye

ответ

1

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

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

Привет. Спасибо за это. Однако это будет иметь ту же проблему, что и Идея 1 выше. Клиент должен иметь возможность проверять композит перед его сохранением на сервере. – Oly

+0

В этом случае вы застряли на специальном Javascript. – Kye