【问题标题】:Sharepoint 2010 COM - How to approve tasks in C#?Sharepoint 2010 COM - 如何在 C# 中批准任务?
【发布时间】:2017-07-31 15:40:23
【问题描述】:

我们在 Sharepoint 2010 中有一个 Approval 工作流程,当用户上传文档时,他们可以启动这个 Approval 工作流程,并指定几个人来批准/拒绝。文档一开始在In Process,大家认可后移到Released

现在我想在 C# 中批准/拒绝来自 ASP.NET 网页的任务,它包括:

  1. 获取指定人的所有待处理任务,即如果汤姆登录,它可以显示他所有待处理的任务,就像他在浏览器中打开Sharepoint时一样。

  2. 如何在 C# 中批准/拒绝一项任务?

我是 Sharepoint 客户端对象模型的新手,如果有人能给我示例代码以供参考,不胜感激。

更新:

这是我使用的代码,将凭据分配给上下文,但对象项中没有返回任何内容,我无法获取任务项列表。

[代码][1]

这是所有未完成项目的图片,我没有分配任务,但我可以看到所有进行中的项目。

Open items to be approved picture

新代码仍然不起作用,方法 context.Web.Lists.GetByTitle("Tasks"); 似乎没有返回任何内容;

[快速查看对象项][1]

你能告诉我如何检查列表名称吗?我尝试更改为WBXmlList,它返回值但无法读取,也没有键'AssignedTo'

WBXmlList

【问题讨论】:

    标签: c# asp.net sharepoint


    【解决方案1】:

    对于您需要的场景,适当的 CAML 查询和任务批准代码。

    为用户获取未完成的任务:

    string url = "http://sharepointsite/";
    var context = new ClientContext(url);
    var query = @"
    <View>
        <Query>
            <Where>
                <And>
                    <Eq>
                        <FieldRef Name='Completed' />
                        <Value Type='Boolean'>0</Value>
                    </Eq>
                    <Eq>
                        <FieldRef Name='AssignedTo' LookupId='True'/>
                        <Value Type='Lookup'>
                            <UserID/>
                        </Value>
                    </Eq>
                </And>
            </Where>
        </Query>
    </View>";
    var camlQuery = new CamlQuery() { ViewXml = query };
    var list = context.Web.Lists.GetByTitle("Tasks");
    var items = list.GetItems(camlQuery);
    context.Load(items);
    context.ExecuteQuery();
    

    批准/拒绝任务:

    string outcome = "Approved"; // "Rejected"
    var task = GetTask(id); // to implement
    task["Completed"] = true;
    task["PercentComplete"] = 1.0f;
    task["Status"] = "Completed";
    task["WorkflowOutcome"] = outcome;
    task["FormData"] = outcome;
    

    获取所有任务:

    string url = "http://sharepointsite/";
    var context = new ClientContext(url);    
    var camlQuery = CamlQuery.CreateAllFoldersQuery();
    var list = context.Web.Lists.GetByTitle("Tasks");
    var items = list.GetItems(camlQuery);
    context.Load(items);
    context.ExecuteQuery();
    

    【讨论】:

    • 感谢您的代码,我运行了它,但在对象“项目”中没有返回任何内容,我可以看到 Sharepoint 站点中有几个文件正在等待批准。你能再指教一下吗?谢谢。
    • 用你的代码更新你的答案,这样我们就可以解决这个问题 - 你需要用你的内部网址替换我的网址, - 就像你的图片中的这样
    • 现在将我的代码截图上传到我的问题中,我已经替换了实际的 URL。
    • 您在任务列表中有任何可用的任务吗?从网络浏览器检查您的任务列表。
    • 这是所有未清项目的图片,我没有分配任务,但我可以看到所有进行中的项目。我拥有此站点的完全权限,我想检索所有具有 Name、AssignedTo、ID 的任务......
    猜你喜欢
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多