none
编写PlugIn时,能一下查询2个实体吗?急! RRS feed

  • 问题

  •    public void Execute(IPluginExecutionContext context)
            {
                ICrmService crmService = context.CreateCrmService(false);       
                task calltask = (task)crmService.Retrieve(EntityName.task.ToString(), context.UserId, new ColumnSet(new string[] { "subject","description" }));
                systemuser callingUser = (systemuser)crmService.Retrieve(EntityName.systemuser.ToString(), context.UserId, new ColumnSet(new string[] { "domainname" }));
                this.AddWorkjour(this.GetIdByName(callingUser.domainname.ToString()), calltask.subject.ToString(), calltask.description.ToString());
            }

    大家帮我看看,我现在想在创建活动的任务(task)时,执行 以上操作,需要2个实体的数据(systemuser,task),但是我写好后,注册的时候,有First primiarykey我选择了Task SeconPrimaryKey我想选择systemuser,可是不让选了,我不知道该怎么操作 才能实现我的操作呢??
    梅小虎
    2009年4月17日 8:34

答案

  • task calltask = (task)crmService.Retrieve(EntityName.task.ToString(), context.UserId, new ColumnSet(new string[] { "subject","description" }));

    你这个是错的,你Retrieve的是task,但是传过去的guid却是当前用户的guid,你plugin注册到task,那你可以通过target来获取task的属性值

    用户你就必须通过retrieve来获取属性值
    systemuser user = (systemuser)crmService.Retrieve(EntityName.systemuser.ToString(), context.UserId, new ColumnSet(new string[] { "domainname","username" }));
    Batistuta Cai-刀客 | 蔡敏生 | MS CRM MVP | Blog:http://caims.cnblogs.com
    • 已标记为答案 梅小虎 2009年4月20日 15:59
    • 取消答案标记 梅小虎 2009年4月20日 15:59
    • 已标记为答案 梅小虎 2009年4月21日 1:14
    2009年4月20日 15:48
    版主
  • DynamicEntity taskTarget = (DynamicEntity)context.InputParameters.Properties[ParameterName.Target];

    Batistuta Cai-刀客 | 蔡敏生 | MS CRM MVP | Blog:http://caims.cnblogs.com
    • 已标记为答案 梅小虎 2009年4月20日 16:02
    • 取消答案标记 梅小虎 2009年4月20日 16:06
    • 已标记为答案 梅小虎 2009年4月20日 16:07
    • 取消答案标记 梅小虎 2009年4月20日 16:09
    • 已标记为答案 梅小虎 2009年4月21日 1:13
    2009年4月20日 15:59
    版主
  • 获取属性值:
    string  description = (String)taskTarget .Properties["description"];
    string  subject = (String)taskTarget .Properties["subject"];
    Batistuta Cai-刀客 | 蔡敏生 | MS CRM MVP | Blog:http://caims.cnblogs.com
    • 已标记为答案 梅小虎 2009年4月20日 16:02
    • 取消答案标记 梅小虎 2009年4月20日 16:06
    • 已标记为答案 梅小虎 2009年4月20日 16:07
    • 取消答案标记 梅小虎 2009年4月20日 16:07
    • 已标记为答案 梅小虎 2009年4月21日 1:13
    2009年4月20日 16:00
    版主
  • ParamterName.Target 是 static value。 不用改。那是只 "Target"。



    Darren Liu | 刘嘉鸿 | MS CRM MVP | English Blog: http://msdynamicscrm-e.blogspot.com | Chinese Blog: http://liudarren.spaces.live.com
    • 已标记为答案 梅小虎 2009年4月21日 1:13
    2009年4月20日 18:18
    版主

全部回复

  • 你做的是 Pre-Plugin 还是 Post-Plugin 呢?Register在哪一个entity 呢?

    如果是 Task, 可以从 context 那里拿 activityid 和使用 WhoAmI() 的方法拿 callinguser 的 Id.
    Darren Liu | 刘嘉鸿 | MS CRM MVP | English Blog: http://msdynamicscrm-e.blogspot.com | Chinese Blog: http://liudarren.spaces.live.com
    2009年4月17日 14:59
    版主
  • context 里也有 callinguser 的id。
    Darren Liu | 刘嘉鸿 | MS CRM MVP | English Blog: http://msdynamicscrm-e.blogspot.com | Chinese Blog: http://liudarren.spaces.live.com
    2009年4月17日 15:00
    版主
  • 我做的是Plug-in,注册的是Task实体,但是我同时需要Systemuser的domainname的值???? 不知道怎么实现呢?
    梅小虎
    2009年4月20日 1:30
  • Hi,梅小虎
         并不是每个message都有Secondary Entity,你可以参考sdk中的tools目录下面的plug-in message-entity table.xls文件
    Batistuta Cai-刀客 | 蔡敏生 | MS CRM MVP | Blog:http://caims.cnblogs.com
    2009年4月20日 11:02
    版主
  • 你需要的Systemuser的domainname中的Systemuser是指当前的操作用户吗? 通过context.UserId获取用户的id
    还是task的负责人呢? 通过task.ownerid获取用户的id

    Batistuta Cai-刀客 | 蔡敏生 | MS CRM MVP | Blog:http://caims.cnblogs.com
    2009年4月20日 11:06
    版主
  • systemuser 不是有个domainname这个属性吗?我需要的就是当前用户的domainname 格式是 domainame/username
    另外这句话   task calltask = (task)crmService.Retrieve(EntityName.task.ToString(), context.UserId, new ColumnSet(new string[] { "subject","description" }));
    中间的context.UserId这个参数是什么?我找不到 ?这句话怎样改正确?


    梅小虎
    2009年4月20日 15:43
  • task calltask = (task)crmService.Retrieve(EntityName.task.ToString(), context.UserId, new ColumnSet(new string[] { "subject","description" }));
    context.activityid??我怎么在VS里拿不到?
    梅小虎
    2009年4月20日 15:45
  • task calltask = (task)crmService.Retrieve(EntityName.task.ToString(), context.UserId, new ColumnSet(new string[] { "subject","description" }));

    你这个是错的,你Retrieve的是task,但是传过去的guid却是当前用户的guid,你plugin注册到task,那你可以通过target来获取task的属性值

    用户你就必须通过retrieve来获取属性值
    systemuser user = (systemuser)crmService.Retrieve(EntityName.systemuser.ToString(), context.UserId, new ColumnSet(new string[] { "domainname","username" }));
    Batistuta Cai-刀客 | 蔡敏生 | MS CRM MVP | Blog:http://caims.cnblogs.com
    • 已标记为答案 梅小虎 2009年4月20日 15:59
    • 取消答案标记 梅小虎 2009年4月20日 15:59
    • 已标记为答案 梅小虎 2009年4月21日 1:14
    2009年4月20日 15:48
    版主
  • 类似systemuser user = (systemuser)crmService.Retrieve(EntityName.systemuser.ToString(), context.UserId, new ColumnSet(new string[] { "domainname","username" })); 这句话我明白 我最上面的程序里已经写了,现在如果我要获得Task实体 该怎么写呢?
    梅小虎
    2009年4月20日 15:55
  • DynamicEntity taskTarget = (DynamicEntity)context.InputParameters.Properties[ParameterName.Target];

    Batistuta Cai-刀客 | 蔡敏生 | MS CRM MVP | Blog:http://caims.cnblogs.com
    • 已标记为答案 梅小虎 2009年4月20日 16:02
    • 取消答案标记 梅小虎 2009年4月20日 16:06
    • 已标记为答案 梅小虎 2009年4月20日 16:07
    • 取消答案标记 梅小虎 2009年4月20日 16:09
    • 已标记为答案 梅小虎 2009年4月21日 1:13
    2009年4月20日 15:59
    版主
  • 获取属性值:
    string  description = (String)taskTarget .Properties["description"];
    string  subject = (String)taskTarget .Properties["subject"];
    Batistuta Cai-刀客 | 蔡敏生 | MS CRM MVP | Blog:http://caims.cnblogs.com
    • 已标记为答案 梅小虎 2009年4月20日 16:02
    • 取消答案标记 梅小虎 2009年4月20日 16:06
    • 已标记为答案 梅小虎 2009年4月20日 16:07
    • 取消答案标记 梅小虎 2009年4月20日 16:07
    • 已标记为答案 梅小虎 2009年4月21日 1:13
    2009年4月20日 16:00
    版主
  •    DynamicEntity taskTarget = (DynamicEntity)context.InputParameters.Properties[ParameterName.Target];
    string  description = (String)taskTarget .Properties["description"];
    string  subject = (String)taskTarget .Properties["subject"];
    如果我选择注册的是Task    ParameterName需要做什么更改不?  是不是上面这些就够了?
    梅小虎
    2009年4月20日 16:15
  • ParamterName.Target 是 static value。 不用改。那是只 "Target"。



    Darren Liu | 刘嘉鸿 | MS CRM MVP | English Blog: http://msdynamicscrm-e.blogspot.com | Chinese Blog: http://liudarren.spaces.live.com
    • 已标记为答案 梅小虎 2009年4月21日 1:13
    2009年4月20日 18:18
    版主