Есть ли способ сделать поле в Dynamics CRM одним полем ввода времени? - PullRequest
0 голосов
/ 11 февраля 2020

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

Ниже приведен скриншот поля, к которому я хочу применить это свойство.

photo

Таким образом, в этом поле есть Да или Нет выбор. И чтобы бизнес-логика c перестала работать, мне нужно сделать это только одноразовым полем ввода.

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

ОБНОВЛЕНИЕ # 1

Ниже моя функция загрузки:

function Form_onload() {
    var formType = Xrm.Page.ui.getFormType();
    var p = Xrm.Page.getAttribute("opportunityid");
--------------NEW CODE--------------------------------

    if(formType ==2){ //form type 2 means the form is a saved form. form type 1 is new form.

    alert(formType);
    var myattribute = Xrm.Page.getAttribute("var_internal");
    var myname = myattribute.getName();
    if (Xrm.Page.getControl(myname) != null) {
        //alert(myname);
        Xrm.Page.getControl(myname).setDisabled(true);
    }
    }
--------------NEW CODE---------------------------
    if (formType == 1 && p != null && p.getValue() != null) {
        alert('Child Opportunities can only be created by clicking the Create Child Opportunity button in the Opportunity ribbon.');
        window.top.close();
    }


}

Ответы [ 4 ]

1 голос
/ 11 февраля 2020

Нет решения для кода: я думаю, что вы могли бы использовать набор параметров с параметром Да / Нет и значением по умолчанию Unassigned Value. Затем добавьте это поле в Безопасность уровня поля с параметром «Разрешить обновление», установленным на №

Field Level Security with no update

При обновлении разрешений поля FLS убедитесь, что профиль связан с организацией «команда», так что все пользователи могут видеть поле:

enter image description here

1 голос
/ 12 февраля 2020

Арун уже дал вам подсказку, как поступить, я только что попробовал этот запрос на одном из моих экземпляров.

Создайте одно дополнительное поле (фиктивное поле), в моем случае я называю его new_hasfieldbeenchanged1 Это поле будет удерживать данные при изменении поля. Заблокируйте это поле (всегда) и сохраните его в форме (но visibile = false)

Теперь вам нужно 2 триггера Onload и OnSave. Ниже функция сделает вашу работу. Дайте мне знать, если это поможет.

function onLoad(executionContext) {

    debugger;
    var formContext;
    if (executionContext && executionContext.getFormContext()) {
        formContext = executionContext.getFormContext();
        //executionContext.getEventSource()
        if (formContext.getAttribute("new_hasfieldbeenchanged1") && formContext.getAttribute("new_hasfieldbeenchanged1").getValue()!=null) {
            if (formContext.getControl("new_twooptionfield")) {
                formContext.getControl("new_twooptionfield").setDisabled(true);
            }
        }
    }
}
function onSave(executionContext) {
    debugger;
    var formContext;
    if (executionContext && executionContext.getFormContext()) {
        formContext = executionContext.getFormContext();
        //executionContext.getEventSource()
        if(formContext.getAttribute("new_hasfieldbeenchanged1") && formContext.getAttribute("new_twooptionfield") && formContext.getAttribute("new_twooptionfield").getIsDirty()){
            formContext.getAttribute("new_hasfieldbeenchanged1").setValue((new Date()).toString());
            if (formContext.getControl("new_twooptionfield")) {
                formContext.getControl("new_twooptionfield").setDisabled(true);
            }
        }

    }
}
0 голосов
/ 18 февраля 2020

Из-за настроек среды c в моем DEV, я не смог воспроизвести то, что было предложено @ Eccountable . Хотя его решение работало в других средах.

@ AnkUser также имеет хороший ответ, но я искал, чтобы сократить код и сделать вещи максимально простыми.

Мое решение

Мне удалось справиться с этим с помощью Javascript на на стороне клиента. с использованием панели инструментов XRM.

В наборе инструментов XRM я обнаружил javascript для возможности и наблюдал изменения поля в formType, когда Возможность была Новая и когда Возможность была Существующая . Эта переменная (formType) была = 1, когда Возможность была Новой, и = 2, когда она была Существующим / Сохраненным .

Используя эту часть информации, я смог использовать свой Javascript следующим образом в Form_onload()

function Form_onload() {
    if (formType == 2) {
        var myattribute = Xrm.Page.getAttribute("internal");
        var myname = myattribute.getName();
        if (Xrm.Page.getControl(myname) != null) {
            Xrm.Page.getControl(myname).setDisabled(true);
        }
    }
}
0 голосов
/ 11 февраля 2020

Для таких пользовательских требований нет конфигурации OOB, но мы можем применить некоторые скрипты logi c.

Если предположить, что это список выбора со значением по умолчанию null , а не поле с двумя вариантами bool , мы можем использовать onLoad скрипт формы для проверьте, имеет ли оно значение, и заблокируйте его. Не нужно иметь функцию onChange.

Если это поле типа bool, то этого трудно достичь. Вы должны отследить начальное значение и изменения, внесенные для реализации желаемой логики c. Или через некоторый неподдерживаемый код .

...