2012-11-19 55 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");