工作流2013 assign to问题
根据您的确认, 该问题已经通过我们所提供的方案进行修改后测试通过, 问题解决.
以下为该问题的产生原因:
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问题的更多相关文章
- 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),报错: ...
- SharePoint 2013 实现多级审批工作流
上一篇介绍了安装和配置SharePoint 2013 Workflow,这一篇将用SharePoint 2013 Designer Workflow来实现一个多级审批工作流. 审批工作流介绍 这个De ...
- SharePoint 2013 工作流之使用Designer配置示例篇
在SharePoint 2013中,支持SharePoint Designer 2013(以下简称SPD)配置简单的工作流,完成我们的业务需要.下面,我们就举一个小例子,实现SPD配置工作流. 1. ...
- SharePoint 2013 工作流设计之Designer 使用“可视化视图”
SharePoint 2013增强了工作流功能,而Designer里面也添加了可视化设计视图,也就是类似Visio的设计视图(需要Visio 2013支持),下面我们简单介绍下,在可视化视图下,使用工 ...
- SharePoint 2013 工作流之年假审批Designer配置篇
本文介绍SharePoint 2013 使用Designer工具,设计年假审批工作流,由于流程所用的条件和操作都比较简单,所以演示为主,最后附流程图和流程的文本图,有兴趣的可以参照实验.如果对于Des ...
- SharePoint 2013 工作流平台的选项不可用
问题描述 当我想创建一个SharePoint 2013 工作流的时候,打开SharePoint 2013 Designer(一下简称SPD),发现没有SharePoint 2013 工作流的选项.原来 ...
- SharePoint 2013 工作流之使用Visio设计篇
SharePoint 2013增强了工作流,不仅仅基于WorkFlow Foundation 4.0了,设计方式也不仅仅是Designer,还包括Visio中设计,下面我们就一个简单的例子,介绍下. ...
- SharePoint 2013 工作流之Visual Studio开发示例篇
SharePoint 2013引用了WF4.0 Foundation,支持使用Designer和Visio进行设计,但是功能受限,而Visual Studio可以开发功能更加丰富的工作流,下面我们简单 ...
- SharePoint 2013 状态机工作流之扩展自定义状态
当我们使用SharePoint 2013的状态机工作流时,发现一个非常不爽的事情,就是SharePoint 所有的工作流状态,都是固定的那些,没办法显示我们自定义的状态,后来经过Google发现,原来 ...
随机推荐
- Redis实战——redis主从复制和集群实现原理
出自:https://blog.csdn.net/nuli888/article/details/52136822 redis主从复制redis主从配置比较简单,基本就是在从节点配置文件加上:slav ...
- vertex shader(4)
Swizzling and Masking 如果你使用输入.常量.临时寄存器作为源寄存器,你可以彼此独立地swizzle .x,.y,.z,.w值.如果你使用输出.临时寄存器作为目标寄存器,你可以把. ...
- SVN 与Git的区别
1:最主要的区别是Git是分布式版本控制系统,而SVN是集中式的版本控制系统.能理解这一点,区别它们就会容易很多,Git并不是目前唯一的分布式版本控制系统,比如还有Mercurial等.不过话说回来G ...
- Spring 学习记录4 ResourceLoader
ResourceLoader Spring的ApplicationContext继承了ResourceLoader接口.这个接口主要就是可以加载各种resource.. 接口还是比较简单的: /* * ...
- ASP.NET Web API(C#)学习01
Web Api 记得去年公司有个分享会分享了这个,最近留意招聘信息的时候,发现有个招聘信息的要求是会用WebApi,然后花了半个小时不到,根据下面这篇文章了解了一下,觉得这个东西也不难啊. 突然发现在 ...
- 关于 jdbc 的错误
- Linux实战教学笔记40: Mha-Atlas-MySQL高可用方案实践(二)
六,配置VIP漂移 主机名 IP地址(NAT) 漂移VIP 描述 mysql-db01 eth0:192.168.0.51 VIP:192.168.0.60 系统:CentOS6.5(6.x都可以) ...
- FP回写报错
报错信息如下: 提示java for mo 2022报错 执行的DTS如下: 解决方法:(原因:SAP归档日志满了,导致连接失败)1.检查表temp_out_pr中的siteid是否有三个工厂的数据确 ...
- 开启Windows8里面的Hyper-V虚拟机功能
首先了解下什么是Hyper-V?也就是虚拟化技术,允许终端用户在同一台机器上运行多个操作系统,支持32位和64位系统,可以直接在Windows 8上创建自己的虚拟机.开启Hyper-V虚拟机需要更多的 ...
- 安装运行okvis odometry
源码链接https://github.com/ethz-asl/okvis 1. 安装依赖项 sudo apt-get install cmake sudo apt-get install libgo ...