CRM 2011使用outlook插件访问webcontext

CRM 2011使用outlook插件访问webcontext,outlook,dynamics-crm-2011,dynamics-crm,outlook-addin,microsoft-dynamics,Outlook,Dynamics Crm 2011,Dynamics Crm,Outlook Addin,Microsoft Dynamics,我在网上找到了一些插件代码,可以让我在插件中获取实体ID和对象类型代码。该插件在ActivityPointInter上的RetrieveMultiple上启动。代码允许我获取当前正在查看的实体的id和目标代码,该实体显示激活插件的活动网格 使用web界面时,此代码工作正常。但是,我需要它也在Outlook预览窗格中工作,而目前它没有。Outlook预览窗格中的“活动”网格仅表示发生了错误。下面是插件用于从web标题获取详细信息的代码 internal static Dictionary&

我在网上找到了一些插件代码,可以让我在插件中获取实体ID和对象类型代码。该插件在ActivityPointInter上的RetrieveMultiple上启动。代码允许我获取当前正在查看的实体的id和目标代码,该实体显示激活插件的活动网格

使用web界面时,此代码工作正常。但是,我需要它也在Outlook预览窗格中工作,而目前它没有。Outlook预览窗格中的“活动”网格仅表示发生了错误。下面是插件用于从web标题获取详细信息的代码

    internal static Dictionary<string, string> GetHeaderFields(HttpContext webcontext, string objectTypeCode, string objectId)
    {
        Dictionary<string, string> fields = new Dictionary<string, string>();
        string callerentitytype = null;
        string callerentityidstring = null;
        try
        {
            // Activities Navigation Pane
            if (new List<string>(webcontext.Request.Params.AllKeys).Contains("oType"))
            {
                callerentitytype = webcontext.Request.Params["oType"];
                callerentityidstring = webcontext.Request.Params["oId"];
            }
            // Activities Sub Grid
            else
            {
                string requeststring = webcontext.Request.UrlReferrer.Query;
                requeststring = requeststring.Substring(1);

                string[] parts = requeststring.Split(new string[] { "=", "&" }, StringSplitOptions.RemoveEmptyEntries);
                for (int i = 0; i < parts.Length - 1; i++)
                    if (parts[i].ToLower() == "otype" || parts[i].ToLower() == "etc")
                        callerentitytype = parts[i + 1];
                    else if (parts[i].ToLower() == "oid" || parts[i].ToLower() == "id")
                        callerentityidstring = parts[i + 1];
            }

            fields.Add(objectTypeCode, callerentitytype);
            fields.Add(objectId, callerentityidstring);
        }
        catch (Exception ex)
        {
            throw new Plugin.LoggableException(string.Format("Failed to obtain header information; {0}", ex.Message), ex.InnerException);
        }

        return fields;
    }
原因是webcontext.Request.UrlReferer为空。是否还有其他地方可以获取“呼叫”实体的信息?不是触发插件的活动子网格,而是子网格所在的实际父实体


感谢您的帮助或指导。

这可能会奏效。如果在子网格中,则返回的每个ActivityPoints都应该与同一条记录相关。如果取第一个并检查regardingobjectid属性,则应该是一个实体引用,它将为您提供父对象的逻辑名称及其guid。如果这样做有效,理论上它将适用于所有客户端。

我不认为这是一个实体引用,我认为这是一个guid。我没有可以访问的crm实例,但如果它只是一个guid,那么您可以使用类型代码+guid来检索实际的活动,我相信它会从中保留到父记录的entref。有关信息,请参阅