silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了CRM2011与Silverlight交互的问题大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

  1.webresource的路径问题: Silverlight生成的xap文件在CRM2011里一般有两种浏览方式,一是嵌入到html页面里进行浏览,二是在form表单里嵌入浏览,如果在html中嵌入则需注意路径问题,若xap文件的名称为new_/sl/mysl.xap,而Html的文件名为new_/html/myhtml.html,则在html页面中引用Xap文件的路径应为:” ../sl/
 

1.webresource的路径问题:

Silverlight生成的xap文件在CRM2011里一般有两种浏览方式,一是嵌入到html页面里进行浏览,二是在form表单里嵌入浏览,如果在html中嵌入则需注意路径问题,若xap文件名称为new_/sl/mysl.xap,而Html的文件名为new_/html/myhtml.html,则在html页面中引用Xap文件的路径应为:” ../sl/mysl.xap”.

2. 给Silverlight程序传值:

若在html页面传则增加一个” initParams”的参数:

    <param name="initParams" value="id={3A9FA9E8-AFA7-E011-8F5A-000C290D0CA9},type=10013,typename=new_bj,orgname=crm2011,userlcid=2052,orglcid=2052"/>

若在form中直接引用.xap的webresource则勾上”将记录对象类型代码和…..”即可。

 

3.发生” 跨线程访问无效”的异常:

如果在Silverlight中异步调用结束之后,需要更改界面元素的值,则不能直接像a.content=”aaaa”;这样修改,这样会报出” 跨线程访问无效”的错误

解决方法:

界面首次加载时取得当前的线程,然后在修改界面元素时使用该线程的回调函数修改即可,代码如下:

public partial class MainPage : UserControl

    {

        SynchronizationContext syn;

        private crm2011Context _context;

        private String _serverUrl;

 

        public MainPage(App app)

        {

            InitializeComponent();

            syn = SynchronizationContext.Current;

            _serverUrl = ServerUtility.GetServerUrl();

            if (!String.IsNullOrEmpty(_serverUrl))

            {

                _context = new crm2011Context(new Uri(String.Format("{0}/xrmservices/2011/organizationdata.svc/",_serverUrl),UriKind.AbsolutE));

                _context.IgnoreMissingProperties = true;

                String id = app.Host.InitParams["id"];

                try

                {

                    DataserviceQuery<Account> query = (DataserviceQuery<Account>)_context.AccountSet.Where(a => a.AccountId.Equals(new Guid(id)));

                    query.beginExecute(OnAccountSearchComplete,query);

                }

                catch (Exception eX)

                {

 

                }

            }

        }

        private void getStr(object str)

        {

            label1.Content = str.ToString();

        }

        private void OnAccountSearchComplete(IAsyncResult result)

        {

            try

            {

                //Get the original query BACk from the result.

                DataserviceQuery<Account> query = result.AsyncState as DataserviceQuery<Account>;

                ACCOUNT retrievedAccount = new DataserviceCollection<Account>(query

                    .EndExecute(result)).First<Account>();

 

                syn.Post(new SendOrPostCallBACk(getStr),retrievedAccount.Name);

            }

            catch (Exception eX)

            {

               

            }

        }

    }

syn.Post(new SendOrPostCallBACk(getStr),retrievedAccount.Name);这句是关键。

 

4.出现”System.Security.SecurityException: 安全性错误

错误是由于silverlight的跨域访问的问题,解决方法:新建一个文件名称为:” clientaccesspolicy.xml”,用记事本打开,将下面代码copy进去:

<?xml version="1.0" encoding="utf-8" ?>

<access-policy>

  <cross-domain-access>

    <policy>

      <allow-from http-request-headers="*">

        <domain uri="*"/>

      </allow-from>

      <grant-to>

        <resource path="/" include-subpaths="true"/>

      </grant-to>

    </policy>

  </cross-domain-access>

</access-policy>

保存后将clientaccesspolicy.xml放在crm2011 web目录的根目录下面,这样silverlight即可跨域访问,就不会报错了。

 AMT 邱正卫(Peter

大佬总结

以上是大佬教程为你收集整理的CRM2011与Silverlight交互的问题全部内容,希望文章能够帮你解决CRM2011与Silverlight交互的问题所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。