2012-11-19 44 views
0

我用下面的代码,试图从Silverlight应用程序更新我的CRM系统2011查找字段的值:从Silverlight应用程序更新查找字段 - CRM 2011

try 
{ 
    ma.my_ActionDetails = details; 

    Guid userId = new Guid(); 
    foreach (SystemUser s in SystemUsers) 
    { 
     if (s.FullName.Equals(comboBox1.SelectedItem)) 
     { 
      userId = s.SystemUserId; 
     } 
    } 

    // Define eval statements for setting lookup to a value and null 
    string setLookupJscript = @"Xrm.Page.getAttribute(""{0}"").setValue([ {{ id: ""{1:B}"", typename: ""{2}"", name: ""{3}"" }}])"; 
    string evalStatement = null; 

    // Set the statement to be evaluated based upon the value of the id argument 
    // Setting the lookup to a value 
    evalStatement = string.Format(setLookupJscript, "my_salesperson", userId, "my_memberaction", ma.my_SalesPerson.Name); 

    HtmlPage.Window.Eval(evalStatement); 

    _context.UpdateObject(ma); 
    _context.BeginSaveChanges(OnUpdateAccountComplete, ma); 
} 
catch (SystemException se) 
{ 
    _syncContext.Send(new SendOrPostCallback(showErrorDetails), se); 
} 

然而,当我运行此代码会生成以下错误:

在浏览器:

'Xrm' is undefined 

从代码:

System.InvalidOperationException: [Common_MethodFailed] 

任何人都可以解释这是怎么回事吗?

感谢,

杰克

回答

1

你需要一个CRM的形式为XRM命名空间范围内可用。你是从一个表单中跑步吗?

CRM SDK

如果你的Silverlight网络资源被设计成一个实体的形式来看待,形式有你可以用它来访问上下文信息的Xrm.Page.context对象。

如果您需要Silverlight应用程序出现在表单上下文之外,则必须配置HTML Web资源以通过添加对ClientGlobalContext.js.aspx页面的引用来提供此上下文信息。在添加了这个引用之后,您的Silverlight应用程序可以像访问实体表单一样访问上下文信息。以下示例显示如何从Xrm.Page.context对象调用getServerUrl函数。

private string serverUrl = ""; 
ScriptObject xrm = (ScriptObject)HtmlPage.Window.GetProperty("Xrm"); 
ScriptObject page = (ScriptObject)xrm.GetProperty("Page"); 
ScriptObject pageContext = (ScriptObject)page.GetProperty("context"); 
serverUrl = (string)pageContext.Invoke("getServerUrl");