2013-12-18 38 views
2

我已经尝试了许多代码,但仍然无法正常工作,我是新的动态crm 2011的开发人员。我创建了与用户实体有多对多关系的新自定义实体“new_smsmessage”,我编写插件向许多用户发送短信,我需要在我的插件中检索用户mobilenumber,我使用下面的代码检索userId,但一直获取crm中的错误消息“给定的键不存在于disctionary” 任何帮助PLZ:动态crm插件查找字段

if (context.InputParameters.Contains("Target") && 
       context.InputParameters["Target"] is Entity) 
      { 
       Entity entity = (Entity)context.InputParameters["Target"]; 


       if (entity.Attributes.Contains("new_smsmessage") == false) 
       { 

        string smstext = entity.Attributes["new_message"].ToString(); 
        string smsnumber = entity.Attributes["new_phonenumber"].ToString(); 

        EntityReference userlookup = (EntityReference)entity["systemuser"]; 

        string receipient = userlookup.Name.ToString(); 
       } 
} 

回答

0

最有可能systemuser是不是你的属性的名称。如果它是new_smsmessage记录的所有者,那么它将是(EntityReference)entity["ownerid"]。如果是用户查找的自定义属性,那么它会是这样的(EntityReference)entity["new_systemuser"]

在插件代码中使用它们之前,您还应该检查属性是否存在。

+0

但我自定义属性更改为查找字段的名称它给了同样的错误: – Jawad

0

这里是完整的代码

public void Execute(IServiceProvider serviceProvider) 
     { 
      // Obtain the execution context from the service provider. 
      Microsoft.Xrm.Sdk.IPluginExecutionContext context = (Microsoft.Xrm.Sdk.IPluginExecutionContext) 
       serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext)); 

      // The InputParameters collection contains all the data passed in the message request. 
      if (context.InputParameters.Contains("Target") && 
       context.InputParameters["Target"] is Entity) 
      { 

       Entity entity = new Entity("New_smsmessage"); 

       ExternalSMSService1.ExternalSMSService wbSrvSMS = new ExternalSMSService1.ExternalSMSService(); 

       string strToken = wbSrvSMS.Login(userName, pwd); 
       string smsResult = string.Empty; 
       string smstext = entity.Attributes["new_message"].ToString(); 
       string smsnumber = entity.Attributes["new_phonenumber"].ToString(); 
       EntityReference aliaselookup = (EntityReference)entity.Attributes["new_aliaseid"].ToString; 

       switch (strToken) 
       { 
        case "01": 
         Console.WriteLine("Invalid Username or pwd"); 
         break; 

        case "03": 
         Console.WriteLine("Host Application Down"); 
         break; 

        default: 
         StringBuilder strMsg = new StringBuilder(); 
         strMsg.Append("<SEND_SMS>"); 
         strMsg.Append("<MSG_DATA TEXT='" + smstext + "' SHORT_CODE='" + aliaselookup + "'/>"); 
         strMsg.Append("<RECIPIENTS>"); 
         strMsg.Append("<RECIPIENT MOBILE_NUMBER='" + smsnumber + "' RECP_NAME ='tester'/>"); 
         strMsg.Append("</RECIPIENTS>"); 
         strMsg.Append("</SEND_SMS>"); 

         smsResult = wbSrvSMS.SendSMS(strMsg.ToString(), strToken); 

         switch (smsResult) 
         { 
          case "01": 
           Console.WriteLine("Invalid or Expired token"); 
           break; 

          case "02": 
           Console.WriteLine("Incorrect input XML format"); 
           break; 

          case "03": 
           Console.WriteLine("Host Application down"); 
           break; 

          default: 
           Console.WriteLine("SMS Sent Successfully"); 
           break; 
         } 

         break; 
        // } 

       } 
      } 
     } 
+1

我认为这个问题是这一行:'实体实体=新的实体( “New_smsmessage”);'相反它应该是'Entity entity =(Entity)context.InputParameters [“Target”]'。因为你正在将实体设置为一个新的'Entity'类,所以没有与它相关的属性,这就是为什么你得到'给定的密钥不存在于disctionary'错误。 –