none
求教自定义表单的问题 RRS feed

  • 问题

  • 我想实现在同一页面上显示单个列表项目及其关联的工作流任务和工作流历史记录(项目已启用工作流)。标准页面中只能先查看项目再导航到工作流状态页面查看任务及工作流历史记录,用户体验不够好。曾尝试用SPD自定义表单,但没成功。


    另外列表项目与工作流任务是如何关联的?


    环境为windows2003server+wss3.0

    谢谢。


    2011年4月7日 3:03

答案

  • 你好,wangyk

     SharePoint工作流的所有历史信息都是存在一个叫做工作流历史记录的隐藏列表中的,所以大概的思路就是获得该列表的对象,然后再从该列表中查询出于当前项目相关联工作流历史信息即可,可以参考下面这段代码。

     

    SPListItem m_item = SPContext.Current.ListItem;
         SPWorkflowCollection m_workflow_collection = m_item.Workflows;
         if (m_workflow_collection.Count>0)
         {
          SPWorkflow m_workflow = m_workflow_collection[0];
          SPList m_workflow_history_list = m_workflow.HistoryList;
          
          SPQuery m_query = new SPQuery();
    
          string m_query_str = string.Format("<Where><And><Eq><FieldRef Name=\"WorkflowInstance\" /><Value Type=\"Text\">{0}</Value></Eq><Eq><FieldRef Name=\"List\" /><Value Type=\"Text\">{1}</Value></Eq></And></Where>",
           m_workflow.InstanceId,m_workflow.ListId);
    
          SPListItemCollection m_workflow_history_items = m_workflow_history_list.GetItems(m_query);
    
          foreach (SPListItem item in m_workflow_history_items)
          {
           //White your action
           
          }
    
         }
    

     


    2011年4月9日 9:53
    版主

全部回复

  • 你好,wangyk

    可以通过开发一个WebPart,并将该WebPart部署到你的列表的DispForm.aspx页面来实现你所要的功能。

    第二个问题,可以通过SPListItem的Workflows属性获得当前与列表项关联的工作流实例集合。

    2011年4月7日 6:33
    版主
  • 谢谢你的回答。 能否简单说一下开发的思路。 对这个还不太熟。 谢谢。
    2011年4月8日 3:02
  • 你好,wangyk

     SharePoint工作流的所有历史信息都是存在一个叫做工作流历史记录的隐藏列表中的,所以大概的思路就是获得该列表的对象,然后再从该列表中查询出于当前项目相关联工作流历史信息即可,可以参考下面这段代码。

     

    SPListItem m_item = SPContext.Current.ListItem;
         SPWorkflowCollection m_workflow_collection = m_item.Workflows;
         if (m_workflow_collection.Count>0)
         {
          SPWorkflow m_workflow = m_workflow_collection[0];
          SPList m_workflow_history_list = m_workflow.HistoryList;
          
          SPQuery m_query = new SPQuery();
    
          string m_query_str = string.Format("<Where><And><Eq><FieldRef Name=\"WorkflowInstance\" /><Value Type=\"Text\">{0}</Value></Eq><Eq><FieldRef Name=\"List\" /><Value Type=\"Text\">{1}</Value></Eq></And></Where>",
           m_workflow.InstanceId,m_workflow.ListId);
    
          SPListItemCollection m_workflow_history_items = m_workflow_history_list.GetItems(m_query);
    
          foreach (SPListItem item in m_workflow_history_items)
          {
           //White your action
           
          }
    
         }
    

     


    2011年4月9日 9:53
    版主
  • 谢谢。明白你的意思,晚些试一下,有问题再请教。
    2011年4月13日 7:15