У меня есть 2 среды: DEV & TEST. Я хочу добиться функциональности, как указано ниже:
if (fields.email.getValue() == null) {
fields.emailAllowed.setValue(null);
fields.emailAllowed.setRequiredLevel("required");
}
else {
fields.emailAllowed.setRequiredLevel("none");
}
if (fields.phone.getValue() == null) {
fields.phoneAllowed.setValue(null);
fields.phoneAllowed.setRequiredLevel("required");
}
else {
fields.phoneAllowed.setRequiredLevel("none");
}
Этот код JavaScript работает нормально в среде DEV, но по неизвестной причине он NOT сохраняет значение NULL в среде TEST.
Для поддержки этого я добавил новый плагин CRM, в котором я создал два обработчика:
Создать плагин ==> PreValidation
Обновить плагин ==> PreValidation
В обоих этих плагинах я использую логику, как показано ниже:
// Gets PreImage & Target Image combined
public void Execute()
{
var combinedTarget = GetCombinedTarget();
if (combinedTarget == null)
{
// log & throw error
}
MapEmailField(combinedTarget);
MapPhoneField(combinedTarget);
}
private void MapEmailField(combinedTarget)
{
// if Email is NULL and EmailAllowed IS NULL
if(combinedTarget.Metadata.Attributes.Email != null && combinedTarget.Metadata.Attributes.EmailAllowed == null)
{
//log & throw error
}
else if(combinedTarget.Metadata.Attributes.Email == null)
{
combinedTarget.Metadata.Attributes.EmailAllowed = null; // To save NULL value into CRM field
}
}
// same method for phone field mapping
// save the record
Теперь в пользовательском интерфейсе CRM, когда я обновляю поле электронной почты, автоматически устанавливается значение TRUE Phone Allowed тоже поле, хотя оно не изменилось, и я внешне установил его в NULL в плагине CRM. И есть еще 5 таких полей, на которые влияют аналогичным образом.
Те же изменения работают нормально в среде DEV, но не в среде TEST.
ПРИМЕЧАНИЕ. Я перекрестно подтвердил, что все изменениясреды DEV перенесены в управляемое решение, и оно есть в среде TEST.
ОБНОВЛЕНИЕ 1:
Сегодня я пытался отладить изменение JavaScript в TEST окружение, и благодаря этому оно корректно обновило записи. Но когда я закрыл отладчик и протестировал тот же сценарий с новой записью, он снова обновил все записи !!
ОБНОВЛЕНИЕ 2:
Поскольку вызывается моя функция JavaScriptдля события onLoad, чтобы он мог установить значение NULL, но похоже, что он не может найти элемент управления или что-то еще, и именно поэтому он работает во время отладки, но не в обычном режиме.
Ниже приведена функция Javascript, которая запускается событием onLoad:
function handleAllowedFields(dataField, allowedField) {
return function () {
if (dataField == null || allowedField == null) {
return;
}
if (dataField.getValue() == null) {
allowedField.setValue(null);
allowedField.setRequiredLevel("none");
allowedField.controls.forEach(function (c) {
c.setDisabled(true);
});
} else {
// If dataField is having a value, then contact preference fields
// can have an value as Allow OR DoNotAllow ONLY.
allowedField.controls.forEach(function (c) {
c.setDisabled(false);
});
allowedField.setRequiredLevel("required");
}
}
}
Любая помощь в том, как заставить мою функцию ждать загрузки всех элементов управления в форме в событии onLoad?