none
请问下插件CRM用造测试合同实体正常通过,用CRM自带的合同实体,报错“无属性”,这个大概是什么原因呢 RRS feed

  • 问题

  • 请问下编写的CRM插件用造测试合同实体正常通过,用CRM自带的合同实体,报错“无属性”,这个大概是什么原因呢
    2010年10月27日 3:32

答案

  • cols.Attributes = new string[] { "new_contractid", "new_totalbillcash" };

    contract实体有一个属性构架名称为new_contractid么?如果没有那也会报错,我想应该是 contractid 吧

     


    刀客 | MSN:caims@techsun.com | BLOG:http://caims.cnblogs.com
    • 已标记为答案 北蒿 2010年11月4日 2:53
    2010年11月1日 2:52
    版主

全部回复

  • Debug或者抓trace 就可以知道怎么回事了
    刀客 | MSN:caims@techsun.com | BLOG:http://caims.cnblogs.com
    2010年10月28日 9:44
    版主
  • 请问下应该怎样抓trace呢?

    用Debug可以找到出错的行,是 contract = crmService.Retrieve(MyCrmService.EntityName.contract.ToString(), contractid, cols) as MyCrmService.contract;

    出错的原因应该是没有找到合同 contractid,具体为什么没有找到就不清楚了

    主要代码是:                      
     CrmMoney invoiceCash = entity.Properties["new_billmoney"] as CrmMoney;
     MyCrmService.contract contract = new MyCrmService.contract();
     MyCrmService.ColumnSet cols = new MyCrmService.ColumnSet();
     cols.Attributes = new string[] { "new_contractid", "new_totalbillcash" };
     Guid contractid = ((Lookup)entity.Properties["new_contractid"]).Value;
     contract = crmService.Retrieve(MyCrmService.EntityName.contract.ToString(), contractid, cols) as MyCrmService.contract;

    2010年10月29日 3:24
  • cols.Attributes = new string[] { "new_contractid", "new_totalbillcash" };

    contract实体有一个属性构架名称为new_contractid么?如果没有那也会报错,我想应该是 contractid 吧

     


    刀客 | MSN:caims@techsun.com | BLOG:http://caims.cnblogs.com
    • 已标记为答案 北蒿 2010年11月4日 2:53
    2010年11月1日 2:52
    版主
  • // Verify that the entity represents a WorkItem.
    if (context.PrimaryEntityName == MyCrmService.EntityName.new_billcash.ToString())
     {
        // Sum for the invoice   
       CrmMoney invoiceCash = entity.Properties["new_billmoney"] as CrmMoney;
       MyCrmService.contract contract = new MyCrmService.contract();
       MyCrmService.ColumnSet cols = new MyCrmService.ColumnSet();
       cols.Attributes = new string[] { "new_contractid", "new_totalbillcash" };
       Guid contractid = ((Lookup)entity.Properties["new_contractid"]).Value;
       contract = crmService.Retrieve(MyCrmService.EntityName.contract.ToString(), contractid, cols) as MyCrmService.contract;   
        // Update the contract Total invoice
       decimal totalInvoice = contract.new_totalbillcash.Value + invoiceCash.Value;
       contract.new_totalbillcash.Value = totalInvoice;
    }

    上面是更全的代码,这个插件的作用是将几张发票中的金额累加到合同表单的某个字段中,contract实体没有一个属性构架名称为new_contractidnew_billcash实体中有new_contractid。

    在new_billcash实体中建一个N:1的关系、主要实体是contract、名称为new_contractid,然后在new_billcash实体中建一个lookup类型的、名称为new_contractid的字段,这样就可以在new_billcash实体中检索到对应的contract实体的new_totalbillcash字段。

    这段代码用测试的合同(测试合同中只有少数相关的几个字段)可以测通,但是用系统自带的合同就测不通,报无属性的错误。

    2010年11月2日 6:44
  • 谢谢刀客,contract实体没有一个属性构架名称为new_contractid,确实应该是contractid。
    2010年11月4日 3:01