不可更改的表单字段的最佳实践,可以复制值(2011/2013在线)

时间:2013-12-11 22:53:34

标签: dynamics-crm-2011 dynamics-crm crm dynamics-crm-online

我需要能够在案例表单上显示案例字段(ticketnumber),以便

  1. 用户无法更改该值
  2. 可以从字段中复制值(CTRL-C +右键单击/复制)
  3. 适用于所有支持crm的浏览器的解决方案
  4. 使用Outlook作为客户端的解决方案
  5. 解决方案必须使用支持的方法
  6. 我尝试了显而易见的字段readonly,这使得它在IE8 / 2013中可能无法复制,可能还有其他客户端组合。

    只是想知道在我花时间之前是否有人想出了最好的方法。我很想使用html资源,但这似乎有点过分......

2 个答案:

答案 0 :(得分:0)

将字段添加到表单的页眉或页脚。您现在可以通过选择它来复制字段,因为它只是文本但无法编辑。

确保在插件中强制执行此业务规则,或者用户可能会意外(或有意)通过批量编辑,Excel导入,OData,API等进行更改。

<强> EDITED

由于IE9不允许您从页眉/页脚复制,因此您可以执行以下操作:

  1. 编写JavaScript OnLoad事件以获取该字段的现有值。
  2. 如果用户更改了值,请将Javascript OnChange事件写入更改为字段的初始值。 (我还会添加一个弹出窗口,告诉用户该字段无法编辑 - 以避免出现问题。)
  3. 这是受支持的方法。

    不受支持,您自担风险是通过向表单添加OnLoad事件处理程序来取消KeyPress事件,然后将OnKeyDown事件处理程序添加到相应的字段:

    function OnLoad(){
         document.getElementById("new_field").onkeydown = 
              function(evt) { return false; };
    }
    

    只需将"new_field"更新为相应的字段名称即可。任何编辑该字段的尝试都将被阻止。

答案 1 :(得分:0)

在这里回答自己。我最终使用单个按钮使用Web资源。如果是一个新表单,我禁用按钮文本=“没有信息,直到保存”按钮。如果我感兴趣的字段有值,我启用按钮text = field value的按钮。

按下按钮会使用方便的"copy to clipboard" mechanism here

每个客户都很棒。 Web资源不会显示在Outlook阅读窗格中,但我在表单上默认显示感兴趣的字段,以便在阅读窗格中显示该字段的副本。在加载表单时,我使该字段不可见,因此用户只能看到Web资源。

Nicknow的javascript处理程序解决方案也可以。

<强>更新

我最终使用只读文本元素并自动选择文本onclick。这是代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script type="text/javascript" src="/WebResources/ClientGlobalContext.js.aspx"></script>
    <meta charset="utf-8">
</head>
<body style="margin: 0px; padding: 0px;" onload="onload()">
<input id="fieldElement" onclick="onClickElement(this)" readOnly="true" value="save case for number" type="text">

<script>
    var FORM_TYPE_UPDATE = 2;
    var FORM_TYPE_READ_ONLY = 3;
    var FORM_TYPE_DISABLED = 4;

    function onload()
    {
        if (parent.Xrm.Page.ui.getFormType() == FORM_TYPE_UPDATE ||
            parent.Xrm.Page.ui.getFormType() == FORM_TYPE_READ_ONLY ||
            parent.Xrm.Page.ui.getFormType() == FORM_TYPE_DISABLED)
        {
            var value = parent.Xrm.Page.getAttribute('ticketnumber').getValue();
            document.getElementById("fieldElement").value = value;
        }
        else
        {
            // must be a create. handled by default setup
        }

        return;
    }
    function onClickElement(element)
    {
        element.select();
    }

</script>
</body>
</html>