【问题标题】:CRM 2011 plugin for multiple entity creation用于创建多个实体的 CRM 2011 插件
【发布时间】:2013-06-05 03:21:25
【问题描述】:

我是 CRM 2011 插件的新手。在这里,我是一段抛出错误的代码:

private static void AddWRItoServiceActivity(IOrganizationService service, Guid id)
    {
        using (var crm = new XrmServiceContext(service))
        {

            var serviceactivity = crm.ServiceAppointmentSet.Where(c => c.Id == id).First();
            var serviceitem = crm.brd_serviceitemSet.Where( c => c.brd_RegardingServiceId == serviceactivity.ServiceId);

            for (int i = 1; i < serviceitem.Count(); i++)
            {
                var workReportItem = new brd_workreportitem
                   {
                       brd_name = "By payman Plugin",
                       brd_serviceappointment_brd_workreportitem = serviceactivity,
                   };
                crm.AddObject(workReportItem);
                crm.SaveChanges();
            }
        }
    }

我试过了:

for (int i = 1; i < serviceitem.ToList().Count(); i++)

这也会产生错误。您能帮我计算一下这样的数还是使用其他语法(例如 foreach)? P.S.:我也试过这个:

foreach (var s in serviceitem.ToList())

【问题讨论】:

  • 不支持“计数”方法。
  • 你试过了吗? foreach(服务项中的 var s)
  • 偏门!这是使用您的建议时的错误:反序列化器不知道映射到此名称的任何类型。考虑更改 DataContractResolver 上 ResolveName 方法的实现,以返回名称“CrmEntityReference”和命名空间“Microsoft.Xrm.Client”的非空值。详细信息:
  • XrmServiceContext 是您的早期绑定课程吗?
  • 是的。 XrmServiceContext 是早期绑定的类。

标签: plugins dynamics-crm-2011


【解决方案1】:

正如@Anwar 建议的那样,Linq to CRM 表达式最终会转换为不支持求和或聚合表达式的 QueryExpressions。我猜 Linq Count 方法正试图转换成一个会失败的 Count Queryexpression。现在为什么serviceitem.ToList().Count() 不起作用,我更困惑。 ToList 应该导致实体的获取,然后将其添加到列表中,然后使用您的标准 LINQ Count 方法...您确实有 LINQ 的 using 语句正确吗?

你为什么不使用foreach(var item in serviceitem)

编辑:没有看到评论。

根据您的提示中的错误,您似乎没有在您的 IOrganizationService 上启用代理类型,或者没有在服务器上包含您的自定义实体。

【讨论】:

  • 感谢您的回复达里尔。是的,我在代码开头使用“使用 linq”语句。正如我在 cmets 中提到的,我也使用了“foreach (var item in serviceitem)”。它确实遇到了如上所述的错误。
【解决方案2】:

我看不出该代码有什么问题,这可能是您设置项目和早期绑定类的方式。

我建议阅读Using LINQ in CRM 2011 Plugins,尝试按照那里列出的步骤进行操作,因为他正在描述您想要实现的目标。

【讨论】:

  • 正如我在您的链接中所读到的:“...不支持将 LINQ 与 CRM 2011 一起使用的 LINQ 计数和求和操作。”。我今天搜索了很多。在 crm 2011 插件中使用“foreach”的每个人都遇到了类似的错误。有谁知道为什么?
  • 再多提示一下:当我删除 for、foreach 等循环语法时,插件运行良好。在这种情况下,它只创建一个“brd_workreportitem”。当我把它放在一个循环中以创建多个“brd_workreportitem”时,就会看到错误。因此,关于引用、crm 程序集……的一切都是真实的。
【解决方案3】:

FetchXML 是唯一支持 Count 和 Sum 功能的东西。 Count 和 Sum 被认为是一个聚合。不幸的是,聚合不起作用 正如你提到的,在 Linq 中。

这里是使用FetchXML的解释。

【讨论】:

  • 使用“foreach”怎么样?我已经使用过,但是发生了错误,正如我之前所说的。
【解决方案4】:

终于成功解决了。 Id 比较有助于 foreach 运行。

var serviceitem = crm.brd_serviceitemSet.Where( c => c.brd_RegardingServiceId.Id == serviceactivity.ServiceId.Id);

【讨论】:

    猜你喜欢
    • 2013-01-19
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多