Контекст формы в Dynamics 365 версии 9
Мне нужно получить доступ к элементу управления веб-ресурсом, чтобы обновить его. По ссылке ниже нам нужно иметь контекст формы.
Но я не могу получить контекст формы и не могу найти его где-нибудь в документации о том, как получить доступ к контексту выполнения в веб-ресурсах HTML. Я попытался зарегистрировать функцию при загрузке формы и передать в нее параметр выполнения, используя свойства формы. Затем в функции я получаю это, как показано ниже, с переменной formContext в качестве глобальной переменной.
var formContext;
function getFormExecutionContext(executionContext) {
formContext = executionContext.getFormContext();
console.log("Form Context: ");
console.dir(formContext);
}
Однако, когда я попытался получить доступ к этому formContext в другом веб-ресурсе HTML, размещенном в форме CRM, он сказал неопределенный. Может кто-нибудь объяснить, как мы можем получить контекст формы в веб-ресурсе HTML?
1 ответ
Обычно мы включаем приведенный ниже фрагмент в раздел заголовка веб-ресурса HTML, это представит вам контекст CRM и элементы управления вне формы CRM.
<head>
<title>HTML Web Resource</title>
<script src="../ClientGlobalContext.js.aspx" type="text/javascript" ></script>
</head>
Затем получите доступ к элементам управления следующим образом:
parent.Xrm.Page.getAttribute("my_control").getValue();
То же самое должно работать в v9 для обратной совместимости, может не упоминаться в документации.
Если ваша кнопка ленты находится на подсетке, и вам необходимо получить доступ к FormContext в версии 9.0 или более поздней, вот подробности.
В части ленты передайте следующий параметр.
<Actions>
<JavaScriptFunction FunctionName="subgridEvent" Library="$webresource:new_contactformload.js">
<CrmParameter Value="PrimaryControl" />
</JavaScriptFunction>
</Actions>
А вот и функция для доступа к контексту формы.
function ribbonHandler(e) {
var formContext = e.getFormContext();
var recordId = formContext.data.entity.getId();
var fieldValue = formContext.getAttribute("<field_name>").getValue();
}
Вот ссылка, которая сэкономила мое время.