Ярлыки

.Net (17) (9) 1с8 (4) 1с8.2 УП (3) документирование (1) интеграция (10) карта (1) собеседование (1) ado (1) ajax (11) ASP (1) asp.net (10) authentication (1) c# (14) coding (2) Crm Ribbon (2) csv (1) datareader (1) delegate (5) dhtml (5) exam (1) excel (10) ext (1) extjs (8) google maps (1) iis (3) javascript (33) JSON (5) linq (1) LN (5) log (1) lotus notes (5) mail (1) MS CRM (63) MS CRM 2015 (3) MS CRM 5 (48) MS CRM 6 (28) ms office (2) msi (1) MVC (1) namespace (1) oData (3) outlook (1) parent-child (2) plugin (1) program (4) Project Management (1) remote debugger (1) REST (1) SharePoint (1) SharePoint 2010 (2) Silverlight (2) soft (1) sql (13) sql reporting service (8) sql2005 (3) ssrs (2) Thread (4) tree (1) vb (6) vba (1) VSTO (1) WCF (4) wmi (1) wsc (2) xml (1) Xrm.Page (1) xslt (1)

понедельник, 28 декабря 2015 г.

MS CRM 2015: inline диалог средствами crm

В 2015 больше не работает Xrm.Internal.openDialog.

Теперь диалоги можно делать как показано далее.

Код на загрузку формы приклеивает кнопку к полю на форме. При нажатии открывается диалог.



1. Код на загрузку формы

var Sdk = window.Sdk || {};

Sdk.fieldButton =  {
// кнопка к полю
    btn:null,
    // отрисовка кнопки
    init: function (id, defaultText, intWidth, onClickDelegate) {
        this.btn = document.createElement("BUTTON");
        var t = document.createTextNode(defaultText);
        this.btn.appendChild(t);
        this.btn.className = "ms-crm-Button";
        this.btn.id = id;

        if (intWidth) {
            this.btn.style.minWidth = "auto";
            this.btn.style.width = intWidth.toString() + "px";
        } else {
            this.btn.style.width = "100%";
        }

        this.btn.onmouseover = function () { Mscrm.ButtonUtils.hoverOn(this); }
        this.btn.onmouseout = function () { Mscrm.ButtonUtils.hoverOff(this); }

        this.btn.onclick = onClickDelegate;

        return this; // для цепочки вызовов
    },

    disableAction: null,

    //правило UI доступности
    setDisableAction: function (disableActionDelegate, attachDelegate) {
        this.disableAction = disableActionDelegate;
        this.btn.disabled = this.disableAction();
        attachDelegate();
        return this;
    }
}

// на загрузку страницы
Sdk.myOnLoad = function () {
    
    var btnDialog = Sdk.fieldButton.init("btnDialog", "Диалог", 50, function () {
        var urlParam = "&prm1="+encodeURIComponent(4)+"&prm2="+encodeURIComponent(3); // параметры в строке url
        var windowArguments = { XrmPage: Xrm.Page }; // параметры в функцию
        
        var dlg = new Mscrm.CrmDialog(Mscrm.CrmUri.create("/isv/dialog.html?" + urlParam), windowArguments, 300, 400);
        // обработчик закрытия по OK
        dlg.setCallbackReference(function (result) {
            Xrm.Page.getAttribute("new_result").setValue(result);
        });

        dlg.showInlineDialog(); // показать диалог
    }).setDisableAction(function () {
        return IsNull(Xrm.Page.getAttribute("new_simplenumber").getValue());
    },
        function () {
            Xrm.Page.getAttribute("new_simplenumber").addOnChange(function () {
                btnDialog.btn.disabled = btnDialog.disableAction();
            });
        }
    );
    var insertAfterField = document.getElementById('new_simplenumber_d');
    insertAfterField.parentElement.insertBefore(btnDialog.btn, insertAfterField.nextSibling);
    //insertAfterField.parentElement.insertBefore(btnTemplate, insertAfterField); // for complex control
};

2. Диалог

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" content="0" />
    <title>Простой пример диалога.</title>
    <link rel="stylesheet" type="text/css" href="/_common/styles/fonts.css.aspx" />
    <!--Достаточного только одного этого-->
    <link rel="stylesheet" type="text/css" href="/_common/styles/global.css.aspx" />
    <script type="text/javascript" src="/_static/_common/scripts/jquery-2.1.1.min.js"></script>
    <script type="text/javascript" src="/_static/_common/scripts/jquery_ui_1.8.21.min.js"></script>
    <script type="text/javascript" src="/_static/_common/scripts/jquery.tmpl.min.js"></script>
    <!--Достаточного только одного этого-->
    <script type="text/javascript" src="/_common/ClientGlobalContext.js.aspx"></script> 
    <script type="text/javascript" src="/butikru/_common/ScriptResx.ashx"></script>
    <script type="text/javascript" src="/butikru/_common/global.ashx"></script>
    <script type="text/javascript" src="/_static/_common/scripts/CrmInternalUtility.js"></script>
    <script type="text/javascript" src="/_static/_common/scripts/main.js"></script>
    <script type="text/javascript" src="/_static/_controls/flyoutdialog/flyoutdialog.js"></script>

    <style>
        body, html {
        margin:0px;
        padding:0px;
        }
        #maket {
        width:100%; height: 100%;
        margin:2 auto;
        }
        #header{
        background-color:#FFFFE2; min-height:60px;
        }
        #left{
        background-color:#00C0C0;
        width:9px;
        float:left;
        }
        #content{
        background-color:#E8E8FF;
        margin-left:9px;
        line-height:22px;
        width: calc(100% - 9px); height: calc(100% - 100px); overflow: auto; /* 100 = 60+30+2*5 */
        }
        #footer{
        background-color:#FFECFF;

        line-height:30px;
        clear:both;
        padding:5px;
        text-align:right;
        vertical-align:middle;
        }
        #btnCross{
        float:right;
        }
    </style>    

    <script>
        dlgResult="0";

        onL = function () {
            var qsp = GetGlobalContext().getQueryStringParameters(); // параметры из строки URL
            document.getElementById("param1").value = qsp.prm1;
            document.getElementById("param2").value = qsp.prm2;
            var dialogArguments = getDialogArguments(); // параметры из аргументов диалога
            document.getElementById("param3").value = dialogArguments.XrmPage.getAttribute("new_simplenumber").getValue();
        }

        // обработчик кнопки OK
        oKonclick = function () {
            dlgResult = parseInt(document.getElementById("param1").value) * parseInt(document.getElementById("param2").value) *
                parseInt(document.getElementById("param3").value) * parseInt(document.getElementById("param4").value);
            dlgResult = dlgResult.toString();
        }
        
    </script>

</head>
<body onload="onL();">
    <div id="maket">
        <div id="header">
            <a title="Отмена" class="ms-crm-RefreshDialog-FirstTopButton" id="btnCross" href="#"><img style="width: 16px; height: 16px;" onclick="if(!Mscrm.Utilities.resetValidationFailedElement()) {closeWindow();}" alt="" src="/_imgs/CloseDialog.png"></a>
            <div title="Пример диалога" class="ms-crm-RefreshDialog-Header-Title ms-crm-TextAutoEllipsis" id="DlgHdTitle" style="width: calc(100% - 35px) !important;">Пример диалога</div>
            <div title="Введите следующие сведения о ...." class="ms-crm-RefreshDialog-Header-Desc" id="DlgHdDesc">Введите следующие сведения о ....</div>
        </div>
        <div id="left"></div>
        <div id="content"><i>Блочная верстка</i><p />Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы Содержимое страницы <p/>
            <span style="width:110px;display: inline-block;">Url Параметр 1 </span><input id="param1" style="width:50px" /><br />
            <span style="width:110px;display: inline-block;">Url Параметр 2 </span><input id="param2" style="width:50px" /><br />
            <span style="width:110px;display: inline-block;">dialog Параметр </span><input id="param3" style="width:50px" /><br />
            <span style="width:110px;display: inline-block;">Данные страницы </span><input id="param4" value="7" style="width:50px" />
            <p />Все перемножится и запишется в Результат.
        </div>
        
        <div id="footer">
            <button class="ms-crm-RefreshDialog-Button" id="butBegin" style="margin-left: 8px;" onkeydown="" onclick="oKonclick();Mscrm.Utilities.setReturnValue(dlgResult); closeWindow();" type="button">ОК</button>
            &nbsp;
            <button class="ms-crm-RefreshDialog-Button" id="cmdDialogCancel" style="margin-left: 8px;" onkeydown="" onclick="if(!Mscrm.Utilities.resetValidationFailedElement()) {closeWindow();}" type="button" lasttabelement="true">Отмена</button>
                
        </div>
    </div>
</body>
</html>

Комментариев нет: