javascript - 无法通过 CRM 2011 中的 extraqs 参数传递帐户类型

标签 javascript dynamics-crm-2011

我编写了这个通用函数,基本上是克隆表单上的属性,并将它们传递给自身......

/*
Opens a new window, copying the current page, and loading the new item with the current values
* Sample call *
var url = "main.aspx?etn=task&pagetype=entityrecord";
var features = 'location=no,status=yes,scrollbars=no,menubar=no,toolbar=no,width=900,height=600';
CommonLib.openClone(url, '_blank', features, Xrm.Page.getAttribute(null));
*/
openClone: function (url, windowName, features, attributes) {
    var qsParams = "";
    var qs;
    for (var i = 0; i < attributes.length; i++) {
        qs = CommonLib.getExtraQS(attributes[i]);
        if (qs.length > 0) {
            qsParams += qs + "&";
        }
    } //end for

    // Remove extra &
    qsParams = qsParams.substring(0, qsParams.length - 1);

    window.open("/" + Xrm.Page.context.getOrgUniqueName() + "/" + url + "&extraqs=" + encodeURIComponent(qsParams), windowName, features, false);
},

/*
returns the extraqs value for the attribute, non-encodURIComponent-ed
*/
getExtraQS: function (attribute) {
    var extraQS = "";
    if (attribute != null && attribute.getValue() != null) {
        // Set name value based on type and id
        switch (attribute.getAttributeType()) {
            case "lookup":
                var value = attribute.getValue();
                var name = attribute.getName();
                if (value != null && value.length > 0) {
                    value = value[0];
                    extraQS = name + "=" + value.id + "&" + name + "name=" + value.name;
                    switch(value.typename){
                        case 'account':
                        case 'contact':
                        case 'systemuser':
                        case 'team':
                            extraQS += "&" + name + "type=" + value.typename;
                        break;
                    }
                }
                break;
            case "datetime":
                extraQS = attribute.getName() + "=" + CommonLib.getCRMDateFormat(attribute.getValue());
                break;
            default:
                extraQS = attribute.getName() + "=" + attribute.getValue();
                break;
        }
    }
    return extraQS;
}

除非我尝试传递 account 类型的属性,否则一切正常。我得到标准的“错误。发生错误。”如果我跳过第二个 switch 语句,则不会收到 CRM 服务器错误,而是会收到尝试反序列化对象的 CRM javascript 错误,因为它没有设置类型,这会导致空指针错误。

有什么想法可以让它发挥作用吗?

编辑:打开 CRM 服务器跟踪日志记录会导致此异常,该异常将有关objectidtype 列为无效参数,即使它正是 SDK 所说的使用内容 (http://msdn.microsoft.com/en-us/library/gg334375.aspx),如果我传递除该参数之外的所有内容,我会在 CRM javascript 中收到 javascript 异常,因为类型名称为 null。

[2011-11-04 08:27:53.961] Process: w3wp |Organization:306a6cd8-f599-df11-b324-005056bb527b |Thread:   14 |Category: Application |User: 00000000-0000-0000-0000-000000000000 |Level: Error | ErrorInformation.LogError
at ErrorInformation.LogError()
at ErrorInformation..ctor(Exception exception, Uri requestUrl, Boolean logError)
at MainApplication.Application_Error(Object sender, EventArgs eventArguments)
at EventHandler.Invoke(Object sender, EventArgs e)
at HttpApplication.RaiseOnError()
at ApplicationStepManager.ResumeSteps(Exception error)
at HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
at HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr)
at ISAPIRuntime.ProcessRequest(IntPtr ecb, Int32 iWRType)
>MSCRM Error Report:
--------------------------------------------------------------------------------------------------------
Error: Exception of type 'System.Web.HttpUnhandledException' was thrown.
Error Message: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Error Details: Exception of type 'System.Web.HttpUnhandledException' was thrown.
Source File: Not available
Line Number: Not available
Request URL: http://dev-crmapp03.abc.com/TestOrg/userdefined/edit.aspx?actualdurationminutes=1&etc=4212&abc_category=9&abc_contactmade=false&abc_pointofcontactid=%7b7E599729-1923-E011-858E-005056BB527B%7d&abc_pointofcontactidname=Human%20Resources&abc_result=11&ownerid=%7bCAA79C99-0E9C-DF11-9D85-005056BB728E%7d&owneridname=Rachel%20Richardson&owneridtype=systemuser&pagemode=iframe&regardingobjectid=%7b58949706-1923-E011-858E-005056BB527B%7d&regardingobjectidname=Cold%20Emails%20-%20016&regardingobjectidtype=account&sitemappath=Workplace%7cMyWork%7cnav_dashboards&subject=%2a%20Security%20Alarm%20Installer%20%2f%20Technician%20%2a%20%28St.Louis%29
Stack Trace Info: [InvalidOperationException: CRM Parameter Filter - Invalid parameter 'regardingobjectidtype=account' in Request.QueryString on page /TestOrg/userdefined/edit.aspx
The raw request was 'GET /TestOrg/userdefined/edit.aspx?actualdurationminutes=1&etc=4212&abc_category=9&abc_contactmade=false&abc_pointofcontactid=%7b7E599729-1923-E011-858E-005056BB527B%7d&abc_pointofcontactidname=Human%20Resources&abc_result=11&ownerid=%7bCAA79C99-0E9C-DF11-9D85-005056BB728E%7d&owneridname=Rachel%20Richardson&owneridtype=systemuser&pagemode=iframe&regardingobjectid=%7b58949706-1923-E011-858E-005056BB527B%7d&regardingobjectidname=Cold%20Emails%20-%20016&regardingobjectidtype=account&sitemappath=Workplace%7cMyWork%7cnav_dashboards&subject=%2a%20Security%20Alarm%20Installer%20%2f%20Technician%20%2a%20%28St.Louis%29' called from http://dev-crmapp03.abc.com/TestOrg/main.aspx?etn=task&pagetype=entityrecord&extraqs=subject%3D*%20Security%20Alarm%20Installer%20%2F%20Technician%20*%20(St.Louis)%26abc_category%3D9%26regardingobjectid%3D%7B58949706-1923-E011-858E-005056BB527B%7D%26regardingobjectidname%3DCold%20Emails%20-%20016%26regardingobjectidtype%3Daccount%26abc_pointofcontactid%3D%7B7E599729-1923-E011-858E-005056BB527B%7D%26abc_pointofcontactidname%3DHuman%20Resources%26ownerid%3D%7BCAA79C99-0E9C-DF11-9D85-005056BB728E%7D%26owneridname%3DRachel%20Richardson%26owneridtype%3Dsystemuser%26abc_contactmade%3Dfalse%26abc_result%3D11%26actualdurationminutes%3D1.]
at Microsoft.Crm.Application.ParameterFilter.ValidateParameter(HttpRequest request, ArrayList parameterCollection, String key, String value, ParameterSources source, EntityType pageEntityType, FormAdditionalAllowedParameters additionalAllowedParameters)
at Microsoft.Crm.Application.ParameterFilter.ValidateParameters(Page page, EntityType pageEntityType, Boolean alwaysEnableParameterChecking, FormAdditionalAllowedParameters formAdditionalAllowedParametersTemp)
at Microsoft.Crm.Application.ParameterFilter.ValidateParameters(Page page, EntityType pageEntityType, FormAdditionalAllowedParameters formAdditionalAllowedParametersTemp)
at Microsoft.Crm.Application.Controls.AppPage.ValidatePageParameters()
at Microsoft.Crm.Application.Controls.PageManager.OnPreRender(EventArgs e)
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

最佳答案

好吧,所以我必须重新启动或其他...看起来我的查找是有关查找,而不是客户查找,并且根据我在问题中引用的 SDK 链接,CRM 不支持设置此值通过额外的。

请参阅此处获取更详细的答案:CRM 2011: Populating email entity form fields with URL parameter

关于javascript - 无法通过 CRM 2011 中的 extraqs 参数传递帐户类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8002479/

相关文章:

javascript - 显示数据元素但不将它们存储在数据库中

dynamics-crm-2011 - MS CRM - setVisible

caching - 如何禁用 CRM 2011 Xrm 缓存?

javascript - Crm 2013 + 从整数字段中删除逗号

javascript - AWS4 签署 S3 PUT 请求

javascript - 如何将选择的值回显到文本框

javascript - HTML/CSS : How to fade the left and right edges of a div?

javascript - Dynamics 2011 CRM 表单我试图隐藏一个选项卡和/或它的加载部分

javascript - 单击 MS CRM 2011 后禁用功能区按钮?

javascript - 如何在解析时更改 JSON 属性名称