Javascript 如何向非';t常数?

Javascript 如何向非';t常数?,javascript,dynamics-crm-2013,Javascript,Dynamics Crm 2013,如下图所示,我可以为我的小方法提供很多东西。问题是,我想输入我当前联系人的名字。该字段似乎无法读取调用控件所在表单上的框的内容 现在的方法是在不带参数的情况下执行该方法,并让它随心所欲地获取自己的数据。不过,如果我能提供一些垃圾,我会更喜欢它。我怎样才能把动力学参数输入它 我应该选择依赖项吗?我一直认为它们是“如果您查询它们,方法将看到的东西”,而不是“将要发送的参数” 您可以使用与常量相同的方式将对象发送到JavaScript函数。若要引用不在表单中的对象,可以为它们指定名称和ID 要素: &

如下图所示,我可以为我的小方法提供很多东西。问题是,我想输入我当前联系人的名字。该字段似乎无法读取调用控件所在表单上的框的内容

现在的方法是在不带参数的情况下执行该方法,并让它随心所欲地获取自己的数据。不过,如果我能提供一些垃圾,我会更喜欢它。我怎样才能把动力学参数输入它

我应该选择依赖项吗?我一直认为它们是“如果您查询它们,方法将看到的东西”,而不是“将要发送的参数”


您可以使用与常量相同的方式将对象发送到JavaScript函数。若要引用不在表单中的对象,可以为它们指定名称和ID

要素:

<div id="myelement">Hello</div>
您还可以拥有一个没有预定义参数的函数,并通过
参数访问发送到该函数的任何内容

例如:

function jsfunc()
{
    var output = "";
    var args = arguments;

    for(var i = 0, len = args.length; i < len; i++) // loop through all arguments
    {
        var arg = args[i]; // reference the argument directly
        output += i + ": "; // add index number
        if (arg == null)
        {
            output += "null"; // arg is null
        } else {
            output += typeof(arg) + ", "; // adds type of argument
            if (typeof(arg) == "string" || typeof(arg) == "number")
            {
                // argument is a string og number, which can be easily output
                output += arg;
            } else if (typeof(arg) == "object") {
                // it is an object
                if (arg.tagName)
                {
                    // the object has a tagname which means it's an HTML element
                    output += arg.tagName;
                } else {
                    // object but not HTML element, our array
                    output += "array, " + arg.firstname;
                }
            }
        }
        output += "\n"; // add new line
    }
    alert(output);
}

jsfunc(
    "a" /* type: string */
    , 5 /* type: number */
    , document.getElementById("txtFirstName") /* type object, has tagName INPUT */
    , document.getElementById("ElementThatDoesNotExists") /* type NULL */
    , { "firstname" : "john", "lastname" : "smith" } /* type object, no tagname */
);

您可以在那里传递任何有效的javascript语句—对函数的调用等。。例如
Xrm.Page.getAttribute('name')。getValue()
将当前记录名值作为参数传递

CRM在参数字段中取任何类型,并将参数作为函数调用。

< P>(从上面的评论)作为替代/体系结构建议,可能考虑为每个表单创建一个JavaScript资源(例如Acj.js、Calcas.js等),并且这些文件中的每一个都将定义相应表单的所有处理程序。 例如,您的account.js文件可能如下所示:

function form_onLoad() {
    // Do stuff on load.
}

function form_onSave() {
    // Do stuff on save.
}

function field_onChange() {
    executeSigning(param1, param2);
}

现在在CRM处理程序中,将每个事件绑定到其各自的方法。我发现这很有效,因为它使查看/调试Javascript变得更容易,因为所有内容都在一个位置,您不必查看CRM中的每个处理程序。

这到底意味着什么:字段似乎无法读取调用控件所在表单上框的内容。

。?为什么不以Javascript的形式调用它,并使用希望传递的参数
executeSigning(param1,param2,…)
?Javascript支持可选参数,因此让
executeSigning
接受它可能使用的每个预取值,但只传入表单“知道”的参数。@JasonFaulkner可能是调用不同的名称,但我没有得到“在表单Javascript中调用”部分。你指的是哪个脚本?我已经添加了一个web资源,其中包含当一个框的内容发生变化(onChange事件)时要执行的脚本。但我无法控制实际的调用——我们只能指向web资源的方法,并说当该方法更改其值时将调用该方法。这并不是说我可以通过实现onChange方法来确定调用是如何执行的……这可能是我个人的偏好,但我通常对每个运行JS的表单所做的是为每个表单创建一个JS文件(例如account.JS、contact.JS等),这些文件中的每一个都会定义相应表单的所有处理程序。因此,我所说的是在您的“表单Javascript”(即account.js)中,为
field\u onChange
定义一个方法,您将相应的处理程序映射到该方法。然后在您的
字段\u onChange
方法中调用
executeSigning
。我更喜欢这种方式,因为它使查看/调试JS变得更容易,因为所有东西都在一个地方,您不必查看CRM中的每个处理程序。可悲的是,当我开始暗示编程的“黑魔法”时,我的大多数客户都翻了个底朝天。但对于更高级、更专业的方法来说,这实际上是一个非常好的想法,从架构角度来看。请在回复中总结您的建议。正确的答案仍然是@MarioZG,它仍然被接受,但我很高兴对你做+1,因为这个建议很有意义。哦,你不会说。。。我一直认为它是以字符串或固定值或其他形式发送的。所以如果我输入一个像“2+3”这样的参数,它实际上会输入“5”?!几年前,当我还是CRM新手的时候,我就试过一次。当时它失败了,我再也没有尝试过,我认为这不是一个正确的方法。但那可能是因为我当时的无知!请确认或拒绝上述验证后续问题,我将接受正确答案。如果您以2+3(不带引号)的形式发送,它将起作用。当你用引号传递时,它会假设这只是一个文本,上面写着“2+3”…对不起,我的错。当然,我的意思是——发送
2+3
,而不是“2+3”。如果它真的按照你告诉我的方式工作,那太棒了……我确认传递函数调用就像一个符咒。示例:
“Param1”,Xrm.Page.getAttribute(“电话1”).getValue()
这是一个非常有趣的示例,即使它不受支持。不过,需要明确的是,参数是如何进入方法的(您是从一个名为arguments的变量获取它们的,该变量似乎是全局范围的)?方法签名只有空括号,据我所知没有输入参数。也许我遗漏了什么?参数是所有函数中可用的局部变量。它包含发送到函数的所有参数的数组,即使函数没有使用固定/预定义的参数集定义。太棒了。我不知道JS有这么大的魔力。这会派上用场的+1美元。
0: string, a
1: number, 5
2: object, INPUT
3: null
4: object, array, john
function form_onLoad() {
    // Do stuff on load.
}

function form_onSave() {
    // Do stuff on save.
}

function field_onChange() {
    executeSigning(param1, param2);
}