WebResource на форме сущности довольно важный блок в разработке под MS CRM

По мере своей работы часто приходилось сталкиваться с различными вариантами оформления JavaScript кода

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

ее сохранении или изменении поля. (На многих решениях такой подход применяется и по сей день.

и даже для относительно новых внедрений)

function ValidatePhone()
{
    // Здесь должен быть код для проверки введенного телефона
}

function BlockFields()
{
    // здесь должен быть код для блокировки полей в зависимости от выбранного типа
}

function SetOnChange()
{
    // здесь при помощи метода addOnChange задаются обработчики изменения в полях
}

function OnLoad()
{
    SetOnChange();
    BlockFields();
}

function OnSave()
{
    ValidatePhone();
}

 

До автоматически генерируемых JavaScript файлов на основе TypeScript.
(Пример подобного подхода я напишу в отдельной статье и оставлю здесь ссылку)

В этой статье хочется рассказать по применении паттерна «Revealing Module» или (паттерн выявления модулей, он же — паттерн открытый модуль, он же — паттерн раскрывающийся модуль)

Основная особенность паттерна — возможность искусственного определения публичных и приватных методов и переменных

 

AccountFormEvents = function()
{
	var formContext;
	function onLoad(executionContext)
	{
		try
		{
			formContext = executionContext.getFormContext();
		}
		catch(e)
		{
			formContext = Xrm.Page;
		}
	
		blockFields();
	}
	
	function onSave()
	{
		validatePhone();
	}
	
	function validatePhone()
	{
		// Здесь должен быть код для проверки введенного телефона
	}

	function blockFields()
	{
		//здесь должен быть код для блокировки полей в зависимости от выбранного типа
	}
	
	return {OnLoad : onLoad
		  , OnSave : onSave}
	
}();

В данном примере публичными получились только 2 метода OnLoad и OnSave
остальные методы скрыты для использования.
также мы добавили внутрь приватную переменную «formContext»

Использование этой переменной позволяет одновременно писать скрипты для 2016 CRM и 365 CRM

т.к. часто в коде MS CRM от 5.0(2011) до 8.2(365) Xrm.Page используется рядом с каждой функцией и подобный код при обновлении системы до версии 9.x

долго нужно автозаменой править)

К недостаткам патерна можно отнести следующее

Если приватная функция модуля использует общедоступную функцию того же модуля, эту общедоступную функцию нельзя переопределить извне. Даже если попытаться это сделать, приватная функция всё равно будет обращаться к исходной приватной реализации общедоступной функции. То же самое касается и попытки изменения извне общедоступной переменной, доступ к которой даёт API модуля.

от admin

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *