工作流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发现,原来 ...
随机推荐
- shell编程——保留元字符
在shell中有以下几种字符含有特殊含义,属于保留元字符: & * + ^ $ ` " | ? 当脚本在执行过程中遇到上述字符时,会执行其具有的特殊含义,除非在前面加"\& ...
- hdu3999-The order of a Tree (二叉树的先序遍历)
http://acm.hdu.edu.cn/showproblem.php?pid=3999 The order of a Tree Time Limit: 2000/1000 MS (Java/Ot ...
- 解决:EXCEL复制粘贴,精度丢失
公司一部分数据是存在elasticsearch里面的,但里面的ID设计得特别长,我是打算把ID号考出来,用jmeter批量 删除的,但复制粘贴到excel里,ID就会精度丢失. 后来找到一个办法,解决 ...
- java web框架发展的新趋势--跨界轻型App
“跨界(cross over)在汽车界已然成风,将轿车.SUV.跑车和MPV等多种不同元素融为一体的混搭跨界车型,正在成为汽车设计领域的新趋势.从个人而言,当包容.多元的审美要求和物质要求越来越强烈时 ...
- 天云CloudStack 改进版
整体风格 创建区域
- ubuntu配置ftp
0.sudo apt-get install vsftpd 1.vi /etc/vsftpd.conf 将里面的注释打开 2.sudo service vsftpd restart 3.端口号21
- Ubuntu14.04下opencv卸载与重装
参考链接:http://askubuntu.com/questions/334158/installing-opencv http://stackoverflow.com/questions/1313 ...
- LoadRunner11学习记录二 -- 进行cookie模拟
1.LoadRunner录制打开一个网页的脚本,会生成脚本夹杂迅雷,迅雷看看,百度等链接地址,这是因为ie打开之后会加载未禁用的加载项.需要把相关的加载项禁用掉. 禁用ie加载项步骤,工具--管理加载 ...
- [C++] the pointer array & the array's pointer
int *p[4]------p是一个指针数组,每一个指向一个int型的int (*q)[4]---------q是一个指针,指向int[4]的数组 --> type: int(*)[4] vo ...
- jQuery自动截取文字长度,超过部分
<html> <head> <meta charset="utf-8"> <script src="js/jqu ...