Plugins 将转换后的注释实体预先存在的附件XML文件插入到新的.MMP文件中

Plugins 将转换后的注释实体预先存在的附件XML文件插入到新的.MMP文件中,plugins,dynamics-crm-2011,crm,dynamics-crm-2013,Plugins,Dynamics Crm 2011,Crm,Dynamics Crm 2013,强文本[注释实体处的插件错误][1] [1]: http://i.stack.imgur.com/hRIi9.png 您好,任何人都解决了我的问题。我在更新“注释”实体时遇到了一个插件错误。基本上,我想要一个插件,可以将预先存在的注释附件XML文件转换为新的同名扩展名文件。 我完成了以下步骤首先我创建了一个“Converter\u Code.cs”dll,其中包含将XML文件转换为.MMP文件的Convert()方法 public Converter(string xml, string

强文本[注释实体处的插件错误][1]

  [1]: http://i.stack.imgur.com/hRIi9.png
您好,任何人都解决了我的问题。我在更新“注释”实体时遇到了一个插件错误。基本上,我想要一个插件,可以将预先存在的注释附件XML文件转换为新的同名扩展名文件。 我完成了以下步骤首先我创建了一个“Converter\u Code.cs”dll,其中包含将XML文件转换为.MMP文件的Convert()方法

 public Converter(string xml, string defaultMapFileName, bool isForWeb)
      {
         Xml = xml;
         DefaultMapFileName = defaultMapFileName;
         Result = Environment.NewLine;
         IsForWeb = isForWeb;
         IsMapConverted = false;
         ResultFolder = CreateResultFolder(MmcGlobal.ResultFolder);
      }
在ConvertPlugin.cs插件类中,我首先在中使用以下方法检索了字符串形式的注释实体附件XML文件

  IPluginExecutionContext context =(IPluginExecutionContext)serviceProvider.
                               GetService (typeof(IPluginExecutionContext));
 IOrganizationServiceFactory serviceFactory= (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
 IOrganizationService service = serviceFactory.CreateOrganizationService
                               (context.UserId);
   if (context.InputParameters.Contains("Target")  
           && context.InputParameters["Target"] is Entity)
       {
        // Obtain the target entity from the input parameters.
        Entity entity = (Entity)context.InputParameters["Target"];
        var annotationid = entity.GetAttributeValue<Guid>("annotationid");
        if (entity.LogicalName != "annotation")
        {
          return;
        }
        else
        {
          try
         {
           //retrieve annotation file
         QueryExpression Notes = new QueryExpression { EntityName ="annotation"
        ,ColumnSet = new ColumnSet("filename", "subject", "annotationid",  
                     "documentbody") };
        Notes.Criteria.AddCondition("annotationid", ConditionOperator.Equal,  
                                    annotationid);
        EntityCollection NotesRetrieve = service.RetrieveMultiple(Notes);
        if (NotesRetrieve != null && NotesRetrieve.Entities.Count > 0)
        {
         {
           //converting document body content to bytes
           byte[] fill = Convert.FromBase64String(NotesRetrieve.Entities[0]
                         .Attributes["documentbody"].ToString());
            //Converting to String
           string content = System.Text.Encoding.UTF8.GetString(fill);
           Converter objConverter = new Converter(content, "TestMap", true);
           objConverter.Convert();
          }
         }
        }
          catch (FaultException<OrganizationServiceFault> ex)
         {
          throw new InvalidPluginExecutionException("something is going wrong");
         }
        }
       }
        }
IPluginExecutionContext上下文=(IPluginExecutionContext)服务提供程序。
GetService(typeof(IPluginExecutionContext));
IOOrganizationServiceFactory serviceFactory=(IOOrganizationServiceFactory)serviceProvider.GetService(类型为(IOOrganizationServiceFactory));
IOOrganizationService=serviceFactory.CreateOrganizationService
(context.UserId);
if(context.InputParameters.Contains(“目标”)
&&context.InputParameters[“Target”]是实体)
{
//从输入参数中获取目标实体。
实体=(实体)上下文。输入参数[“目标”];
var annotationid=entity.GetAttributeValue(“annotationid”);
if(entity.LogicalName!=“注释”)
{
返回;
}
其他的
{
尝试
{
//检索注释文件
QueryExpression Notes=新建QueryExpression{EntityName=“注释”
,ColumnSet=新列集(“文件名”、“主题”、“注释ID”,
“文件体”);
Notes.Criteria.AddCondition(“annotationid”,ConditionOperator.Equal,
注释(D);
EntityCollection NotesRetrieve=service.RetrieveMultiple(Notes);
if(NotesRetrieve!=null&&NotesRetrieve.Entities.Count>0)
{
{
//将文档正文内容转换为字节
byte[]fill=Convert.FromBase64String(NotesRetrieve.Entities[0]
.Attributes[“documentbody”].ToString());
//转换为字符串
string content=System.Text.Encoding.UTF8.GetString(fill);
Converter objConverter=新转换器(内容“TestMap”,true);
objConverter.Convert();
}
}
}
捕获(FaultException-ex)
{
抛出新的InvalidPlugineExecutionException(“出现了问题”);
}
}
}
}
然后字符串作为参数传递给“转换器””构造函数。 最后,我使用以下方法合并了所有dll:
ilmerge/out:NewConvertPlugin.dll ConvertPlugin.dll Converter\u code.dll
NewConvertPlugin已成功注册,但在其工作时会生成以下错误:

插件(执行)出现意外异常:ConverterPlugin.Class1:System.Security.SecurityException:该程序集不允许部分受信任的调用方。
我还使用错误日志调试插件,但它不起作用,所以我无法找到出错的原因

错误是由插件中合并的库引起的

首先,您正在使用CRM Online(从您的屏幕截图中),使用CRM Online,您只能在沙箱中使用注册插件

沙盒意味着你的插件是有限的,它们运行在一个部分信任的环境中

您合并了一个需要完全信任权限的外部库,因此插件无法工作,这就是您出错的原因


因为您在CRM Online中,或者您发现另一个只需要部分信任的库(转换器),希望合并过程能够工作,或者您包括(如果您有)转换器库的源代码直接在插件中。

okay@Guido感谢您的回复。那么我如何解决这个问题呢?好的,我得到了它,这意味着第三方DLL需要完全信任权限。