我有一个状态机工作流程和相关任务。可以编辑任务,直到满足某些条件。由infopath组成的任务。这些任务包含一个人选择器字段。我为这些值分配3个字段:
private void createTask_Operator_MethodInvoking(object sender, EventArgs e)
{
this.createTask_Id = Guid.NewGuid();
this.createTask_Properties.ExtendedProperties["ows_TaskDisplayName"] = "user1";
this.createTask_Properties.ExtendedProperties["ows_TaskAccountId"] = @"SP\user1";
this.createTask_Properties.ExtendedProperties["ows_TaskAccountType"] = "User";
}
这是有效的,我可以在我的表单中看到这些用户的价值。但是当我更改用户(例如:“user2”)并提交表单时,我无法检索手动更改的字段值,它始终返回“user1”的值。
private void onTaskChanged_Operator_Invoked(object sender, ExternalDataEventArgs e)
{
this.onTaskChanged_AfterProperties = this.onTaskChanged.AfterProperties;
this.onTaskChanged_BeforeProperties = this.onTaskChanged.BeforeProperties;
// here I cannot retrieve changed field value, always returns: SP\user1
this.workflowProperties.Item["UserName"] =
this.onTaskChanged_AfterProperties.ExtendedProperties["TaskAccountId"].ToString();
this.workflowProperties.Item.Update();
}
如果您遇到这样的问题,请帮助我...
答案 0 :(得分:0)
我在理解你的问题时遇到了一些麻烦,但这里有两个答案。要成功设置人员选取器字段的值,您必须正确填充所有三个字段:DisplayName,AccountId和AccountType。 AccountType始终为“用户”,但其他两个必须与您的AD或您从中获取用户数据的任何位置一致。要从人员选择器获取数据,最佳解决方案通常包括the double eval trick:eval(eval(person, "concat(my:AccountId, ';')"), "..")
这样可以正确处理多个条目,如果您的意思是仅获得列表中的第一个条目。