我正在创建一个应该从CRM中检索数据的Silverlight应用程序。我尝试了教程here,但由于在调用GetServerBaseUrl时Context无效,我无法在Visual Studio中调试我的应用程序
Uri serviceUrl = CombineUrl(GetServerBaseUrl(), "/XRMServices/2011/Organization.svc/web");
据我所知,我可以使用连接字符串连接到CRM,并使用来自this问题的SDK中的dll,但是提供的第一个链接已损坏,我无法看到示例。
答案 0 :(得分: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”取代。
答案 1 :(得分: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;
}
}
}