1

我正在创建一个应该从 CRM 检索数据的 Silverlight 应用程序。我在这里尝试了教程,但由于调用 GetServerBaseUrl 时上下文无效,我无法在 Visual Studio 中调试我的应用程序

Uri serviceUrl = CombineUrl(GetServerBaseUrl(), "/XRMServices/2011/Organization.svc/web");

我知道我可以使用连接字符串和使用来自这个问题的 SDK 的 dll 连接到 CRM,但是提供的第一个链接已损坏,我看不到示例。

4

2 回答 2

1

该代码适用于 Dynamics CRM 2011 并使用函数getServerUrl。该函数已被声明为 CRM 2011 过时,并已从 Dynamics CRM 2015 中删除。

幸运的是,您只需对示例代码进行一些小修改:

public static Uri GetServerBaseUrl()
{
    string serverUrl = (string)GetContext().Invoke("getClientUrl");
    //Remove the trailing forwards slash returned by CRM Online
    //So that it is always consistent with CRM On Premises
    if (serverUrl.EndsWith("/"))
        serverUrl = serverUrl.Substring(0, serverUrl.Length - 1);

    return new Uri(serverUrl);
}

这里的文字“getServerUrl”被“getClientUrl”取代。

于 2015-05-07T12:15:46.397 回答
1

除了 Henk 的回答之外,我们使用的函数的修改版本可以与旧方法和新方法一起使用,最后回退到使用硬编码值。这允许我们在 Visual Studio 中进行调试,而无需部署到 CRM

public static string GetServerBaseUrl(string FallbackValue = null)
    {


        try
        {
            string serverUrl = (string)GetContext().Invoke("getClientUrl");
            //Remove the trailing forwards slash returned by CRM Online
            //So that it is always consistent with CRM On Premises
            if (serverUrl.EndsWith("/"))
            {
                serverUrl = serverUrl.Substring(0, serverUrl.Length - 1);
            }

            return serverUrl;
        }
        catch
        {
            //Try the old getServerUrl
            try
            {
                string serverUrl = (string)GetContext().Invoke("getServerUrl");
                //Remove the trailing forwards slash returned by CRM Online
                //So that it is always consistent with CRM On Premises
                if (serverUrl.EndsWith("/"))
                {
                    serverUrl = serverUrl.Substring(0, serverUrl.Length - 1);
                }

                return serverUrl;
            }
            catch
            {
                   return FallbackValue;   
            }
        }

    }
于 2015-05-08T08:18:49.803 回答