Работа с веб-ресурсами на JS в Dynamics CRM

Примеры работы с веб-ресурсами на JavaScript в Microsoft Dynamics CRM.

Загрузка JS веб-ресурсов

/*
 * Загрузка JS веб-ресурсов.
 * В качестве параметра функции передаются адреса веб-ресурсов или массивы 
 * адресов. Веб-ресурсы, переданные отдельными адресами загружаются 
 * последовательно. Веб-ресурсы, переданные массивами загружаются 
 * параллельно.
 * Примеры:
 * - Загрузка одного веб-ресурса
 *      loadWebResource(
 *          '/new_/webres1.js'
 *      );
 * - Последовательная загрузка трех веб-ресурсов (пока не загрузиться один 
 *   ресурс, следующий грузиться не начинает)
 *      loadWebResource(
 *          '/new_/webres1.js', 
 *          '/new_/webres2.js', 
 *          '/new_/webres3.js'
 *      ); 
 * - Параллельная загрузка трех веб-ресурсов (все ресурсы начинают 
 *   загружаться одновременно)
 *      loadWebResource(
 *          ['/new_/webres1.js', '/new_/webres2.js', '/new_/webres3.js']
 *      );
 * - Смешанная загрузка (сначала загружается первый ресурс, после него 
 *   параллельно два дургих, после их загрузки грузиться последний)
 *      loadWebResource(
 *          '/new_/webres1.js'
 *          ['/new_/webres2.js', '/new_/webres3.js'],
 *          '/new_/webres4.js'
 *      ); 
 */
function loadWebResource() {
    function lwr(url, element, elementType) {
        var d = jQuery.Deferred();
        var head = document.getElementsByTagName('head')[0];
        var script = document.createElement(element);
        script.type = elementType;
        script.src = Xrm.Page.context.prependOrgName('/' + top.WEB_RESOURCE_ORG_VERSION_NUMBER + '/WebResources' + url);
        script.onerror = script.onreadystatechange = script.onload = d.resolve;
        head.appendChild(script);
        return d.promise();
    }
    var dfd = jQuery.Deferred(),
        element = 'script',
        elementType = 'text/javascript';
    var args = [].slice.call(arguments);
    var arg = args[0];
    var deferreds = [];
    if (typeof (arg) == 'string')
        deferreds.push(lwr(arg, element, elementType));
    else
        for (var i = 0, count = arg.length; i < count; i++)
            deferreds.push(lwr(arg[i], element, elementType));
    $.when.apply(null, deferreds)
        .done(function() {
            if (args.length > 1) {
                args.shift();
                loadWebResource(args).done(function() { dfd.resolve(); });
            } else
                dfd.resolve();
        });
    return dfd.promise();
};

About the author

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

Сказать спасибо

Способ платежа:

Подписаться на обновления

Укажите свой e-mail чтобы получать уведомления о новых статьях.

Присоединиться к еще 3 подписчикам