0

次のコードを使用して、SilverlightアプリからCRM2011システムのルックアップフィールド値を更新しようとしています。

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]

誰かがここで何が起こっているのか説明できますか?

ありがとう、

ジャック

4

1 に答える 1

1

Xrm名前空間を使用できるようにするには、CRMフォームのコンテキスト内にいる必要があります。フォーム内から実行していますか?

CRM SDKから:

Silverlight Webリソースがエンティティフォームで表示されるように設計されている場合、フォームには、コンテキスト情報にアクセスするために使用できるXrm.Page.contextオブジェクトがあります。

Silverlightアプリケーションをフォームのコンテキスト外に表示する必要がある場合は、ClientGlobalContext.js.aspxページへの参照を追加して、このコンテキスト情報を提供するようにHTMLWebリソースを構成する必要があります。この参照が追加されると、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");
于 2012-11-19T15:03:18.187 に答える