none
plugin 里能检索自定义实体吗?引用的Sdk里应该是没有自定义实体的~ RRS feed

答案

  • 试下下面的方法:

    // Create the column set object that indicates the fields to be retrieved.
    ColumnSet cols = new ColumnSet();

    // Set the properties of the column set.
    cols.Attributes = new string [] {"name"};

    // Create the target object for the request.
    TargetRetrieveDynamic target = new TargetRetrieveDynamic();

    // Set the properties of the target object.
    // EntityId is the GUID of the record being retrieved.

    target.EntityName = "new_mycontract";
    target.EntityId = new Guid("2B951FBC-1C56-4430-B23B-20A1349068F3");

    // Create the request object.
    RetrieveRequest retrieve = new RetrieveRequest();

    // Set the properties of the request object.
    retrieve.Target = target;
    retrieve.ColumnSet = cols;

    // Execute the request.
    RetrieveResponse retrieved = (RetrieveResponse)service.Execute(retrieve);


    刀客 | MSN:caims@techsun.com | BLOG:http://caims.cnblogs.com
    • 已标记为答案 peter.qiu 2010年11月16日 7:50
    2010年11月16日 2:54
    版主
  • 还是不行 跟原来的错误一样 我自己再研究下吧
    • 已标记为答案 peter.qiu 2010年11月16日 7:50
    2010年11月16日 3:20

全部回复

  • 你需要用DynamicEntity

    如何使用Dynamic Entities 参考SDK中的

    Microsoft Dynamics CRM SDK->Sample Code-〉Entity Sample Code-〉Using Dynamcis Entities


    刀客 | MSN:caims@techsun.com | BLOG:http://caims.cnblogs.com
    2010年11月16日 0:30
    版主
  • DynamicEntity里的实体貌似只有系统自带的啊,找不到我自定义的实体。比如“new_xxx”,而且我retrieve自定义实体的时候报错,不存在“new_xxx”
    2010年11月16日 1:15
  •             // Create the DynamicEntity object.
                DynamicEntity customEntity = new DynamicEntity();

                // Set the name of the entity type.
                customEntity.Name = "new_xxx"
     


    刀客 | MSN:caims@techsun.com | BLOG:http://caims.cnblogs.com
    2010年11月16日 1:47
    版主
  • 可能我没说清楚,我的代码是这样的:

    1。先得到new_needgoodsform实体,再根据其中的new_mycontract_new_needgoodsformid外键,检索到new_mycontract实体。.

    2。我引用的dll文件是sdk里的,dll文件里应该是没有我自定义的实体的。是不是与dll文件有关?

    3。这是写在plugin里的

    try
                {
                    DynamicEntity entity = (DynamicEntity)context.InputParameters.Properties["Target"];
                    if (entity.Name == "new_needgoodsform")
                    {
                        //get guid
                        Guid needGoodsGuid = (Guid)context.OutputParameters.Properties["Id"];
                        if (!entity.Properties.Contains("new_needgoodsformid"))
                        {
                            entity.Properties["new_needgoodsformid"] = new Key(needGoodsGuid);
                        }
                        // get contract guid
                        Guid contractid = ((Lookup)entity.Properties["new_mycontract_new_needgoodsformid"]).Value;
                        ICrmService crmService = context.CreateCrmService(true);

                        //这里在检索的时候出了问题 没有new_mycontract这个实体
                        DynamicEntity contract = (DynamicEntity)crmService.Retrieve("new_mycontract", contractid, new AllColumns());
                        ......

                    }
                }
                catch (System.Web.Services.Protocols.SoapException ex)
                {
                    string aa = ex.Detail.InnerText;
                }

    2010年11月16日 2:23
  • 详细的error贴出来看一下
    jeff.han
    2010年11月16日 2:25
  • 详细的error贴出来看一下
    jeff.han

    未识别指定的类型: name='new_mycontract',namespace='http://schemas.microsoft.com/crm/2007/WebServices',位于 <RetrieveResult xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>。
    2010年11月16日 2:34
  • 代码看起来没有问题,你确定CRM系统有实体叫 new_mycontract 吗?检查下拼写是否正确,这个实体创建后是否已经发布?


    刀客 | MSN:caims@techsun.com | BLOG:http://caims.cnblogs.com
    2010年11月16日 2:49
    版主
  • 试下下面的方法:

    // Create the column set object that indicates the fields to be retrieved.
    ColumnSet cols = new ColumnSet();

    // Set the properties of the column set.
    cols.Attributes = new string [] {"name"};

    // Create the target object for the request.
    TargetRetrieveDynamic target = new TargetRetrieveDynamic();

    // Set the properties of the target object.
    // EntityId is the GUID of the record being retrieved.

    target.EntityName = "new_mycontract";
    target.EntityId = new Guid("2B951FBC-1C56-4430-B23B-20A1349068F3");

    // Create the request object.
    RetrieveRequest retrieve = new RetrieveRequest();

    // Set the properties of the request object.
    retrieve.Target = target;
    retrieve.ColumnSet = cols;

    // Execute the request.
    RetrieveResponse retrieved = (RetrieveResponse)service.Execute(retrieve);


    刀客 | MSN:caims@techsun.com | BLOG:http://caims.cnblogs.com
    • 已标记为答案 peter.qiu 2010年11月16日 7:50
    2010年11月16日 2:54
    版主
  • 名称肯定是正确的 并且实体也是发布了的

    而且EntityName.xxx也不会出现任何自定义的实体,我就怀疑是不是plugin中引用的dll文件的问题,那个dll是下载的sdk里的

    Microsoft.Crm.Sdk.dll

    Microsoft.Crm.SdkTypeProxy.dll

    这两个里面应该不会有我自定义的实体的

    2010年11月16日 2:58
  • 而且EntityName.xxx也不会出现任何自定义的实体  是正常的


    刀客 | MSN:caims@techsun.com | BLOG:http://caims.cnblogs.com
    2010年11月16日 3:07
    版主
  • 还是不行 跟原来的错误一样 我自己再研究下吧
    • 已标记为答案 peter.qiu 2010年11月16日 7:50
    2010年11月16日 3:20