C# Sharepoint开箱即用审批工作流以编程方式更改注释时审批/拒绝注释问题

C# Sharepoint开箱即用审批工作流以编程方式更改注释时审批/拒绝注释问题,c#,sharepoint-2010,sharepoint-workflow,C#,Sharepoint 2010,Sharepoint Workflow,我有一个可重复使用的现成sharepoint审批工作流2010,我正在使用infopath formcode(2010)中的以下代码段以编程方式审批/拒绝工作流 任务更改方法 private static bool AlterTask(SPListItem task, Hashtable htData, bool fSynchronous, int attempts, int millisecondsTimeout) { if ((int)task[SPBuiltInFieldId.Workf

我有一个可重复使用的现成sharepoint审批工作流2010,我正在使用infopath formcode(2010)中的以下代码段以编程方式审批/拒绝工作流

任务更改方法

private static bool AlterTask(SPListItem task, Hashtable htData, bool fSynchronous, int attempts, int  millisecondsTimeout)
{
if ((int)task[SPBuiltInFieldId.WorkflowVersion] != 1)
    {
        SPList parentList = task.ParentList.ParentWeb.Lists[new Guid(task[SPBuiltInFieldId.WorkflowListId].ToString())];
        SPListItem parentItem = parentList.Items.GetItemById((int)task[SPBuiltInFieldId.WorkflowItemId]);
        for (int i = 0; i < attempts; i++)
        {
            SPWorkflow workflow = parentItem.Workflows[new Guid(task[SPBuiltInFieldId.WorkflowInstanceID].ToString())];
            if (!workflow.IsLocked)
            {
                task[SPBuiltInFieldId.WorkflowVersion] = 1;
                task.SystemUpdate();
                break;
            }
            if (i != attempts - 1)
                Thread.Sleep(millisecondsTimeout);
        }
    }
    return SPWorkflowTask.AlterTask(task, htData, fSynchronous);
}
private static bool AlterTask(SPListItem任务、Hashtable htData、bool fSynchronous、int次尝试、int毫秒计时)
{
如果((int)任务[SPBuiltInFieldId.WorkflowVersion]!=1)
{
SPList parentList=task.parentList.ParentWeb.Lists[new Guid(task[SPBuiltInFieldId.WorkflowListId].ToString())];
SPListItem parentItem=parentList.Items.GetItemById((int)任务[SPBuiltInFieldId.WorkflowItemId]);
for(int i=0;i
这段代码工作正常,但任务的注释不会被更改,也不会包含在电子邮件中。我使用的ht[“注释”]有什么问题吗?它不会在任务注释中更改。这是SharePoint 2010工作流,我使用的infopath表单也是2010


有人遇到过类似的问题吗?

如果您只需要列表的代码(不需要文档库),可以使用
item.ModerationInformation.Status
属性。如以下示例所示:

var url = @"http://server/Lists/ContentApList";
var web = new SPSite(url).OpenWeb();
var list = web.GetList(url);
var item = list.GetItemById(1);
item["MyCheck"] = "test23";
item.ModerationInformation.Status = SPModerationStatusType.Pending;
item.ModerationInformation.Comment = "my coment";
item.SystemUpdate();
但如果要对所有列表类型执行此操作,可以使用内部方法
UpdateInternal
,并使用以下参数:

static void UpdateMigrate(SPListItem item)
{
  UpdateInternal(item, true, false, Guid.Empty, true, false,false, false, false, false);
}

static void CheckList5()
{
    var url = @"http://server/Lists/ContentApList";
    var web = new SPSite(url).OpenWeb();
    var file = web.GetFile("CheckDocLib/logo.gif");
    var item = file.ListItemAllFields;
    item["MyComments"] = "test23ddd";
    item.ModerationInformation.Status = SPModerationStatusType.Approved;
    item.ModerationInformation.Comment = "my coment";
    UpdateMigrate(item);
}

您可以使用本俄文博客中的示例向任务添加注释。当您批准/拒绝任务时,只需使用任务前的行:

ht["ows_FieldName_Comments"] = comments;
任务批准后,您可以在工作流历史记录列表中查看注释

您还可以通过以下方式从任务中获取所有合并注释:

Hashtable extProperties = SPWorkflowTask.GetExtendedPropertiesAsHashtable(currentTask);

string consolidatedComments = extProperties["FieldName_ConsolidatedComments"].ToString();

祝你好运

我猜你说的是温和的评论。。我在审批工作流中引用任务注释,该工作流也将在电子邮件中提供。该代码肯定在一个非常重要的项目上帮助了我。现在我要写评论了。如果我发现任何有用的东西,我一定会让你知道。谢谢嗨,Gonçalo Leote,谢谢你的回答。这是我所期望的。它很好用,再次非常感谢!
Hashtable extProperties = SPWorkflowTask.GetExtendedPropertiesAsHashtable(currentTask);

string consolidatedComments = extProperties["FieldName_ConsolidatedComments"].ToString();