根据您的确认, 该问题已经通过我们所提供的方案进行修改后测试通过, 问题解决.

以下为该问题的产生原因:

SharePoint 2013使用的默认认证机制与2007不一样,  2007使用的是Windows 经典模式身份验证, 2013使用的是基于声明的安全认证机制. 该机制导致内部的登录名的形式为: i:0#.w|<account> 而非<account> 因为其内部代码会进行转化, 您在页面上不会看到这种表现形式. 因此, 在尝试将该用户名赋值给AssignedTo时, SharePoint利用传统的域\用户名调用GetByLoginNoThrow但无法找到该用户, 因此会显示为空. 但是如果利用SPUser类, 其会在内部逻辑进行处理. 这也是直接手动赋值产生问题的原因.

详细表现形式如下:

1) SharePoint 2013 引入了一种新的基于声明的安全认证机制. SharePoint 2013 中的用户身份验证是验证请求访问 SharePoint Web 应用程序的用户的身份的过程。身份验证提供程序会向经过身份验证的用户颁发一个安全令牌,该令牌将封装一组有关用户的基于声明的断言,并用于验证分配给用户的一组权限。SharePoint 2013 中的用户授权是一个确定可对 SharePoint Web 应用程序中指定源执行定义的操作的用户的过程。SharePoint 2013 支持基于以下方法的用户身份验证:  Windows 声明  基于安全声明标记语言 (SAML) 的声明  基于表单的身份验证声明 这些基于声明的身份验证方法现在是为 SharePoint 2013 建议的身份验证方法。 SharePoint 2013 的应用程序身份验证和服务器间身份验证功能需要基于声明的身份验证。为此,基于声明的身份验证是 SharePoint 2013 中针对新 Web 应用程序的默认身份验证。当您在管理中心中创建 Web 应用程序时,您只能为基于声明的身份验证指定身份验证方法。虽然 Windows 经典模式身份验证仍在 SharePoint 2013 中可用且可通过 Windows PowerShell 进行配置,但建议您使用基于声明的身份验证。Windows 经典模式身份验证在 SharePoint 2013 中已被弃用。

2) 有关声明的详细解释: http://msdn.microsoft.com/en-us/library/ff359101.aspx

3) 基于声明的认证架构: http://msdn.microsoft.com/en-us/library/ff359108.aspx

笔误: 更新taskProperties.AssignedTo = @”i:0#.w|wtc\setup1.moss”为taskProperties.AssignedTo = @”i:0#.w|wtc\test2.moss”

Thanks & Regards, Jiankui Guo | P +86 510 6665 7620

From: Jiankui Guo Sent: Friday, April 18, 2014 3:55 PM To: 'Bird Han 韩强' Cc: MSSolve Case Email; Jet Zhu; Qingyan Liang Subject: RE: [REG:114041711371429] Prem/SharePoint 2013/Workflow development issue

Hi Bird,

根据代码, 日志以及本地简单代码模拟测试的相关分析:

1) taskProperties.AssignedTo的值实际上已经传入内部的方法中 Workflow runtime已经开始调用CreateTask 并且我们已经可以看到实际赋予AssignedTo的值为WTC\test2.moss. 参考随后的日志信息.

Entering: GetByLoginNoThrow(WTC\test2.moss) SqlCommand: ; EXEC proc_secgetprincipalbylogin 'fc09578e-4e68-49d4-8a3a-7092669049ad', @login, 0, 0, @RequestGuid OUTPUT ConnectionString: 'Data Source=wtcsps99;Initial Catalog=WSS_Content;Integrated Security=True;Enlist=False;Pooling=True;Min Pool Size=0;Max Pool Size=100;Connect Timeout=15'    Partition: fc09578e-4e68-49d4-8a3a-7092669049ad ConnectionState: Closed ConnectionTimeout: 15 SqlCommand: 'proc_SecGetPrincipalByLogin'     CommandType: StoredProcedure CommandTimeout: 0     Parameter: '@RETURN_VALUE' Type: Int Size: 0 Direction: ReturnValue Value: ''     Parameter: '@SiteId' Type: UniqueIdentifier Size: 0 Direction: Input Value: 'fc09578e-4e68-49d4-8a3a-7092669049ad'     Parameter: '@Login' Type: NVarChar Size: 4000 Direction: Input Value: 'WTC\test2.moss'     Parameter: '@GetSTSToken' Type: Bit Size: 0 Direction: Input Value: 'False'     Parameter: '@GetExternalToken' Type: Bit Size: 0 Direction: Input Value: 'False'     Parameter: '@RequestGuid' Type: UniqueIdentifier Size: 0 Direction: Input Value: '680f889c-fac4-20f7-31a4-ef255c2f9782' SqlCommand StackTrace-Managed:    at Microsoft.SharePoint.Utilities.SqlSession.OnPreExecuteCommand(SqlCommand command)     at Microsoft.SharePoint.Utilities.SqlSession.ExecuteReader(SqlCommand command, CommandBehavior behavior, SqlQueryData monitoringData, Boolean retryForDeadLock)     at Microsoft.SharePoint.SPSqlClient.ExecuteQueryInternal(Boolean retryfordeadlock)     at Microsoft.SharePoint.SPSqlClient.ExecuteQuery(Boolean retryfordeadlock)     at Microsoft.SharePoint.Library.SPRequestInternalClass.GetUsersDataAsSafeArray(String bstrUrl, UInt32 dwUsersScope, UInt32 dwUserCollectionFlags, String bstrValue, UInt32 dwValue, UInt32& pdwColCount, UInt32& pdwRowCount, Object& pvarDataSet)     at Microsoft.SharePoint.Library.SPRequestInternalClass.GetUsersDataAsSafeArray(String bstrUrl, UInt32 dwUsersScope, UInt32 dwUserCollectionFlags, String bstrValue, UInt32 dwValue, UInt32& pdwColCount, UInt32& pdwRowCount, Object& pvarDataSet)     at Microsoft.SharePoint.Library.SPRequest.GetUsersDataAsSafeArray(String bstrUrl, UInt32 dwUsersScope, UInt32 dwUserCollectionFlags, String bstrValue, UInt32 dwValue, UInt32& pdwColCount, UInt32& pdwRowCount, Object& pvarDataSet)     at Microsoft.SharePoint.SPUser.InitMember()     at Microsoft.SharePoint.SPUser..ctor(SPWeb web, SPSecurableObject scope, String strIdentifier, Object[,] arrUsersData, UInt32 index, Int32 iByParamId, String strByParamSID, String strByParamEmail, SPUserCollectionType userCollectionType, SPUserCollectionFlags ucf, Boolean isSiteAuditor)     at Microsoft.SharePoint.SPUserCollection.GetByLoginNoThrow(String loginName, SPUserCollectionFlags ucf)     at Microsoft.SharePoint.Workflow.SPWinOETaskService.UpdateTaskInternal(Guid taskId, SPWorkflowTaskProperties properties, Boolean fSetWorkflowFinalize, Boolean fCreating, HybridDictionary specialPermissions)     at Microsoft.SharePoint.Workflow.SPWinOETaskService.CreateTaskWithContentTypeInternal(Guid taskId, SPWorkflowTaskProperties properties, Boolean useDefaultContentType, SPContentTypeId ctid, HybridDictionary specialPermissions)     at Microsoft.SharePoint.Workflow.SPWinOETaskService.CreateTask(Guid taskId, SPWorkflowTaskProperties properties, HybridDictionary specialPermissions)     at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)     at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)     at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)     at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)     at System.Workflow.Activities.CallExternalMethodActivity.Execute(ActivityExecutionContext executionContext)     at System.Workflow.ComponentModel.ActivityExecutor`1.Execute(T activity, ActivityExecutionContext executionContext)     at System.Workflow.ComponentModel.ActivityExecutorOperation.Run(IWorkflowCoreRuntime workflowCoreRuntime)     at System.Workflow.Runtime.Scheduler.Run()

2) 请直接更新以下代码尝试: taskProperties.AssignedTo = @”i:0#.w|wtc\test2.moss”

3) 请将如下代码更新为:

if (!currentApprover.IsGroup)             {                 //Replace the CurrentApprover LogonName to Delegation                 workflowHelper.getDelegation(currentApprover, context);                 SPUser currentUser = workflowProperties.Web.EnsureUser(currentApprover.LogonName);             }

taskProperties.AssignedTo = currentApprover.LogonName;

=             if (!currentApprover.IsGroup)             {                 //Replace the CurrentApprover LogonName to Delegation                 workflowHelper.getDelegation(currentApprover, context);                 SPUser currentUser = workflowProperties.Web.EnsureUser(currentApprover.LogonName);                 taskProperties.AssignedTo = currentUser.LoginName;             }             else                 taskProperties.AssignedTo = currentApprover.LogonName;

4) 测试效果. 我的repro代码能够重现并修复.

问题定义: AssignedTo in SPWorkflowTaskProperties doesn't work for user but for sharepoint group. Environment: SharePoint 2013 Workflow Type: SharePoint 2010

//AssignedTo of the task created by workflow is blank taskProperties.AssignedTo = "wtc\\setup1.moss"; //AssignedTo of the task created by workflow is expected. "IT Department Accountant Group" is a group in SharePoint taskProperties.AssignedTo = "IT Department Accountant Group";

wtc\\setup1.moss has permisisons for the site

问题范围: Suggest workaround or solution to fix this issue

如果您对以上的问题范围界定有任何异议,请尽快告知.如果您有其他任何疑问,也欢迎随时与我联系.

工作流2013 assign to问题的更多相关文章

  1. Server-side activities have been updated. You need to restart SharePoint Designer to use the updated version of activities

    一,环境: SharePoint Online Win10 + SharePoint Designer 2013 错误描述: 使用SPD3013打开SPO站点,然后编辑已有工作流(2013),报错: ...

  2. SharePoint 2013 实现多级审批工作流

    上一篇介绍了安装和配置SharePoint 2013 Workflow,这一篇将用SharePoint 2013 Designer Workflow来实现一个多级审批工作流. 审批工作流介绍 这个De ...

  3. SharePoint 2013 工作流之使用Designer配置示例篇

    在SharePoint 2013中,支持SharePoint Designer 2013(以下简称SPD)配置简单的工作流,完成我们的业务需要.下面,我们就举一个小例子,实现SPD配置工作流. 1. ...

  4. SharePoint 2013 工作流设计之Designer 使用“可视化视图”

    SharePoint 2013增强了工作流功能,而Designer里面也添加了可视化设计视图,也就是类似Visio的设计视图(需要Visio 2013支持),下面我们简单介绍下,在可视化视图下,使用工 ...

  5. SharePoint 2013 工作流之年假审批Designer配置篇

    本文介绍SharePoint 2013 使用Designer工具,设计年假审批工作流,由于流程所用的条件和操作都比较简单,所以演示为主,最后附流程图和流程的文本图,有兴趣的可以参照实验.如果对于Des ...

  6. SharePoint 2013 工作流平台的选项不可用

    问题描述 当我想创建一个SharePoint 2013 工作流的时候,打开SharePoint 2013 Designer(一下简称SPD),发现没有SharePoint 2013 工作流的选项.原来 ...

  7. SharePoint 2013 工作流之使用Visio设计篇

    SharePoint 2013增强了工作流,不仅仅基于WorkFlow Foundation 4.0了,设计方式也不仅仅是Designer,还包括Visio中设计,下面我们就一个简单的例子,介绍下. ...

  8. SharePoint 2013 工作流之Visual Studio开发示例篇

    SharePoint 2013引用了WF4.0 Foundation,支持使用Designer和Visio进行设计,但是功能受限,而Visual Studio可以开发功能更加丰富的工作流,下面我们简单 ...

  9. SharePoint 2013 状态机工作流之扩展自定义状态

    当我们使用SharePoint 2013的状态机工作流时,发现一个非常不爽的事情,就是SharePoint 所有的工作流状态,都是固定的那些,没办法显示我们自定义的状态,后来经过Google发现,原来 ...

随机推荐

  1. BUI 框架使用指南

    指南说明:只适用于对框架的剥离 如果不需要剥离则原来的东西直接粘贴就行 在主界面中使用时需要加入一下引用bui.js jquery.js config.js 末尾的文件 BUI.use(位置1, fu ...

  2. php-yii-form标签

    yii 标签用法(模板) (2013-08-14 17:28:19) 转载▼ 标签: it 分类: yii yii模板中的label标签 <?php echo $form->labelEx ...

  3. 201671010127 2016-2017-11 Java图形用户界面设计技术

    一.事件处理器 1.什么是事件处理 一个事件要求特定的动作被执行,它被作为消息由外界或系统自身发送给GUI系统.这些事件包括来自计算机设备如鼠标键盘和网络端口的I/O中断,以及GUI系统的逻辑事件触发 ...

  4. 3D Math Keynote

    [3DMathKeynote] 1.常用公式. 1)(A*B)^T = B^T*A^T.   2)(A*B)^-1 = B^-1*A^-1. 3)|A*B| = |A|*|B|. 4)|M^T|=|M ...

  5. JS回调函数深入篇

    <有些错别字> 在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用.既然函数实际上是对象:它们能被“存储”在变量中,能作为函数参数被传递,能在函数中 ...

  6. 525. Contiguous Array两位求和为1的对数

    [抄题]: Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 ...

  7. 541. Reverse String II 指定翻转前k个的字符串

    [抄题]: Given a string and an integer k, you need to reverse the first k characters for every 2k chara ...

  8. Qt自定义插件编程小结

    qt自定义组件开发步骤演示.以下所有步骤的前提是自己先编译Qtcreator源码,最好生成release版的QtCreator,否则自定义的插件嵌入QtCreator会失败!!!(这个网上教程很多) ...

  9. QT中自定义系统托盘的实现—c++语言为例

    将要介绍的是:QT中自定义系统托盘(systemtray)的一个Demo,希望能帮需要的读者快速上手. 前提假设是诸位已经知道QT中的signals .slot以及资源文件,所以关于这些不会再累述. ...

  10. loadrunner中回放log看不到参数替代后具体数值

    1.打开run-time settings,找到 log - always send messages,选择 extended log--parameter substitution.