我有一个系统配置实体,我存储了Web服务的凭据。我需要加密密码字段(new_SharePointServicePassword),我希望我的插件进行加密。
所以,我创建了一个新的程序集,注册了以下事件。
base.RegisteredEvents.Add(new Tuple<int, string, string, Action<LocalPluginContext>>(40, "Create", "new_systemconfiguration", new Action<LocalPluginContext>(ExecutePostSystemConfigurationCreate)));
base.RegisteredEvents.Add(new Tuple<int, string, string, Action<LocalPluginContext>>(40, "Update", "new_systemconfiguration", new Action<LocalPluginContext>(ExecutePostSystemConfigurationCreate)));
我的插件代码如下。
string plainTextPassword = SystemConfiguration.new_SharePointServicePassword;
string encryptedPassword;
this.TracingService.Trace("Generating Keys");
Encryption encryption = new Encryption(localContext.PluginExecutionContext.OrganizationId.ToString());
this.TracingService.Trace("Generating Keys - Completed");
if (!string.IsNullOrEmpty(plainTextPassword))
{
this.TracingService.Trace("Encrypting password");
encryptedPassword = encryption.Encrypt(plainTextPassword);
this.TracingService.Trace("Encrypting password - Completed");
SystemConfiguration.new_SharePointServicePassword = encryptedPassword;
localContext.OrganizationService.Update(SystemConfiguration);
}
针对插件注册的步骤适用于创建和更新消息的后期操作。将在new_SharePointServicePassword属性上过滤更新消息。
问题
localContext.OrganizationService.Update(SystemConfiguration);
?是因为,我的插件是在将更改提交到数据库之后执行的吗?答案 0 :(得分:2)
我建议您在Pre Operation
上运行该插件。因为当您通过UI输入密码时,它将首先保存未加密的密码。用户必须刷新才能看到加密。此外,如果您在密码字段上启用了审核。它将在审核日志中显示未加密的密码。在Pre Operation
,您不需要以下行:
localContext.OrganizationService.Update(SystemConfiguration);
确保在代码中将40
替换为20
。