2016-06-19 4 views
3

В Dynamics CRM 2013 можно ли изменить поле, измененное в форме при возникновении ошибки бизнес-процесса?Форма отмены изменяется при возникновении исключения

For example: 
1. User changes a text field on a form from 'abc' to 'xyz' 
2. User clicks save 
3. CRM pre-operation plugin validates field, 'xyz' not allowed, exception thrown 
4. CRM displays business process error to user, 'xyz' is not allowed 
5. The value 'xyz' is still shown in the form 

Желаемое поведение, которое мы хотим «хуг», чтобы вернуться к «Азбуке» в шаге 5.

+0

Если плагин вызывает ошибку, он будет автоматически возвращен к исходным значениям, так как значения не сохранены. также сообщите мне, является ли это настраиваемой сущностью или объектом по умолчанию? –

ответ

2

Вам нужно будет кэшировать данные первого. Вы можете сделать это OnLoad, например. запоминание значения атрибутов юридического лица:

function GetInitialAttributeState() { 
    var preImage = {}; 

    Xrm.Page.data.entity.attributes.forEach(function(field) { 
     // TODO: for lookup attributes you need to do extra work in order to avoid making merely a copy of an object reference. 
     preImage[field.getName()] = field.getValue(); 
    }); 

    return preImage; 
} 

window.preImage = GetInitialAttributeState(); 

Тогда вам необходимо выполнить операцию сохранения с помощью метода Xrm.Page.data.save. Передача ошибок обработки обратных вызовов и сброс полей, например.

Xrm.Page.data.save().then(
    function() { 
     /* Handle success here. */ 
     window.preImage = getInitialAttributeState(); 
    }, 
    function() { 
     /* Handle errors here. */ 
     Xrm.Page.data.entity.attributes.forEach(function(field) { 
     if (field.getIsDirty()) { 
      field.setValue(preImage[field.getName()]); 
     } 
     }); 
    }); 

Это не возможно восстановить полей формы в этом пути, используя save событие, потому что он умирает до фактического сохранения операции, никогда после этого.

0

Почему бы вам не авторизоваться на сайте?

Вы можете использовать Business Ruel для проверки поля и установить условие ошибки в поле для значений, которые вам не нравятся. Условие ошибки будет сохраняться и не позволит им сохранить запись до тех пор, пока они не изменят значение. Сообщение об ошибке может дать им некоторое объяснение, почему их значение недопустимо.

Очевидно, что проверка, которую вы можете выполнять в бизнес-правиле, ограничена, но ваш пример не дает понять, на каком основании мы сопоставляем «xyz» как «плохое» значение.

+0

Примером является упрощение проблемы. Тем не менее, ответ Хенка выше был именно тем, что мне нужно. – user329847