CRM中的数据转换

来源:互联网 发布:你是我兄弟网络大电影 编辑:程序博客网 时间:2024/04/30 01:53

Dynamics CRM中的时间是UTC时间,与其他系统可能不相同。
时间转换是通过datetime的ToLocalTime()方法来实现的。
当地时间与UTC时间的转换之前一直在疑惑,怎么确定当地所处时区,也没有去设置时区的值,其实,时区的值是从操作系统的时区取出来的,操作系统的时间需要时区来确定,其实当地时间就是操作系统时间。
下面的语句中,前者是CRM系统中的时间,后者是SAP系统中的时间。

DateTime.Parse(schedulingdetails.Attributes["new_planneddeliverytime"].ToString()).ToLocalTime() != DateTime.Parse(viewlist.Tables[0].Rows[i]["EDATU"].ToString())

Dynamics CRM中有很多不一样的数据类型,例如EntityReference;实体更新时,需要比较属性是否更改,当后者(SAP系统传过来的值)与EntityReference相比较时(比较时要全都转换成字符串),肯定是不相等的,所以要将实体中的属性强制转换。
VRKME存储的值是EntityReference的name属性。

((EntityReference)schedulingdetails.Attributes["new_uomid"]).Name != viewlist.Tables[0].Rows[i]["VRKME"].ToString()

与上面情况相似。

((OptionSetValue)schedulingdetails.Attributes["new_factory"]).Value != int.Parse(viewlist.Tables[0].Rows[i]["WERKS"].ToString())

C#计时(转自C#中精确计时的一点收获)
我选用了Stopwatch,需要引用System.Diagnostics。
sw.ElapsedMilliseconds直接输出毫秒。

using System.Diagnostics;Stopwatch sw = new Stopwatch();sw.Start();***********sw.Stop();Console.WriteLine(sw.ElapsedMilliseconds);

两种写法都可以

//billingdetails.Attributes.Add("new_date", DateTime.Parse(viewlist.Tables[0].Rows[i]["FKDAT"].ToString()));billingdetails.Attributes["new_date"] = DateTime.Parse(viewlist.Tables[0].Rows[i]["FKDAT"].ToString());

要适应适当地使用try和catch结构,能更快找出错误所在