关于自动启动工作流失败的问题

zhaokunsummer 2014-12-30 11:28:29
环境:
产品: Sharepoint2010
开发工具:Vs2012

问题描述:

我新建了一个WebService(外部独立的 网站),添加一条记录,没办法自动启动相关联的工作流,但如果用这个用户(非admin)手工去添加一条记录则可以启动工作流
这个是代码添加记录


手工添加记录


string SiteUrl = "http://localhost";
using (SPSite site = new SPSite(SiteUrl))
{
SPWeb web = site.RootWeb;
string loginName;
string spid; //sharepoint的审批ID
loginName = web1.QueryLoinName(context.Request.QueryString["user"]);
spid = web1.CreateSpGuid(context.Request.QueryString["CRMID"]);
SPUser user = web.EnsureUser(loginName);
SPUserToken token = user.UserToken;
//利用用户Token构造新的Site对象
SPSite siteWithUser = new SPSite(web.Url, token);
SPWeb webWidthUser = siteWithUser.RootWeb;
webWidthUser.AllowUnsafeUpdates = true;
SPList list = webWidthUser.Lists["审批工作流"];
SPListItem spi = list.Items.Add();
spi["Title"] = context.Request.QueryString["name"];
spi["CRMID"] = context.Request.QueryString["CRMID"];
spi["申请授信金额"] = context.Request.QueryString["je"];
spi["功能"] = "授信";
spi["功能"] = webWidthUser.CurrentUser;
spi["GUID0"] = spid;
spi.Update();
}
});
callback = context.Request.QueryString["callback"];
json = "{\"name\":\"" + callback + "\",\"OK\":\"OK\"}";
context.Response.ContentType = "application/json";
context.Response.Write(callback + "(" + json + ")");
}
}



日志如下
MetadataWebServiceApplication.GetChanges called on 'Managed Metadata Service' completed.
Leaving Monitored Scope (ExecuteWcfServerOperation).
此用户不存在或不唯一。
Leaving Monitored Scope (FireWorkflowStartingEvent). 执行时间=1.52365733633744
RunWorkflow: Microsoft.SharePoint.SPException: <Error><CompilerError Line="1" Column="1" Text="根 Activity 类型无效。" /></Error>
Microsoft.SharePoint.SPException: <Error><CompilerError Line="1" Column="1" Text="根 Activity 类型无效。" /></Error>
Leaving Monitored Scope (Event Receiver (Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c,
Entering monitored scope (Timer Job job-timer-locks) 65bb29bc-8806-4174-b430-216d3607c043
...全文
568 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
SPFarmer 2014-12-31
  • 打赏
  • 举报
回复
引用 6 楼 laoziyaonitian 的回复:
此用户不存在或不唯一。 这应该是代码里面跑异常自己加的输出,自己加的输出应该是知道什么情况或者什么错误会出现,还不好解决么?
我觉得你的问题是有 系统账户引起的。就是说,在 SPUser user = web.EnsureUser(loginName);,传入的loginname是 system account,不是一个具体的user。 你调试一下,看看loginName是不是 system account, 如果是的话,问题就在这里了。因为 API找不到 system account 到底是谁。
计算机器 2014-12-30
  • 打赏
  • 举报
回复
你的工作流是自定义的么?你用控制台程序试一下这段代码,看一下能否正常启动工作流。 在log中还有更详细的错误信息,贴出来会更容易找到问题。
社区之星 2014-12-30
  • 打赏
  • 举报
回复
此用户不存在或不唯一。 这应该是代码里面跑异常自己加的输出,自己加的输出应该是知道什么情况或者什么错误会出现,还不好解决么?
霖雨 版主 2014-12-30
  • 打赏
  • 举报
回复
代码在控制台中,是以当前登陆的账号执行的;代码在WebService,是以iis身份执行代码;执行的账号不一样,权限也不一样,报错也是正常的~~建议检查一下代码~~
Justin-Liu 2014-12-30
  • 打赏
  • 举报
回复
我建议你调试一下,看是哪句出的错 如果在命令行里可以,webservice中可能是缺少权限导致不好用的
zhaokunsummer 2014-12-30
  • 打赏
  • 举报
回复
代码,如果运行在 控制台程序中,是可以正常启动工作流的,但代码放到 webservice中,就不行
Justin-Liu 2014-12-30
  • 打赏
  • 举报
回复
SPUser user = web.EnsureUser(loginName); 是不是这里报错了?调试一下 用户不存在或不唯一

3,242

社区成员

发帖
与我相关
我的任务
社区描述
企业开发 SharePoint
社区管理员
  • SharePoint社区
  • 霖雨
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧