返回首页


你有没有想过如何自动化的SharePoint顺序工作流项目的审批程序?看一看没有这篇文章是说。
让我们开始一个场景要清楚,说有人在你的公司批准阈值的基础上,每一个产品上市门槛的措施可以是在某些产品类型的价格范围,我们有一个产品列表。现在这个人通常会下降办公桌产品类型时,贡献者表示价格是低于$ 200和500美元以上,在这一点上审批人会做看起来是否该产品有违反的已知的门槛,手动,这是一个10件容易的任务但是想象一下,管理其中300。这就是为什么我们将自动化,根据定义,我们将设置一个单独的名单上。这将创建的清单,将不同的产品类型定义阈值,所以如果碰到任何障碍,我将下降列表项和不将自动批准。听起来很简单?进一步阅读。
您可能已经认为我们可以通过使用列表列验证。不太有一定的局限性,其中重要的一条是支持布尔运算符。所以这样一个公式将工作

=[Product Price] < 500

但这并不{C} 现在,你可能会认为,我们再次可以实现SharePoint Designer中。不太以及SharePoint Designer中只会给你1列表中查找的搜索条件。因此,例如,你需要查找一个符合例如一个产品的类型和最大日期的有效性等多个列的条件,那么它将不可能的价格门槛。
{S1}
所以我们最后的手段是使用Visual Studio!因此,在这个岗位,我会向你解释如何这将是最简单的方式来实现。所有你需要的是要遵循这个步骤,我可以向你保证,可以使更复杂的情况,经此一。1。建立产品和产品类别列表产品类型列表
{S2}产品列表
{S3}
注意,列产品类型列在产品目录中查找产品类型列表2。启用产品的版本
正如你可以看到,我们需要需要内容审批的,我们需要创建一个版本,每一次(这确保您可以回滚),并选择"的用户才可以批准itemsquot,这使得确保只有授权批准的项目手动
{S4}的3。创建任务列表
这是在SharePoint库的类型,​​默认情况下,人会做。4。创建顺序工作流项目
选择顺序工作流在SharePoint的GT; 2010
{五}
按照向导选择的名单,你会调用的工作流程和相关的任务列表和历史记录列表
{七}
触发创建和更新
{S8}
现在,你将提出一个工作流程图
{S9}
您可以创建更复杂的东西,选择工具栏上的的项目
{S10}
,但此实例中,我们将会使这个onWorkflowActivated节上的直接的和做的一切。现在双击,你将代码背后。现在下面的代码复制。
private void onWorkflowActivated1_Invoked(object sender, ExternalDataEventArgs e)

{



    SPLinqDataContext dc = new SPLinqDataContext(workflowProperties.SiteUrl);



    EntityList<ProductTypeItem> ProductType = dc.GetList<ProductTypeItem>("Product Type");



    string sProductType = GetLinkedListItemString(workflowProperties.Item["Product Type"].ToString());

    double dPrice = double.Parse(workflowProperties.Item["Product Price"].ToString());



    var Result = (from p in ProductType

                    where p.Title == sProductType && p.MaxDateValidity >= DateTime.Now

                    select p).SingleOrDefault();



    if (Result.MinPrice > dPrice)

    {

        workflowProperties.Item.ModerationInformation.Status = SPModerationStatusType.Denied;

        workflowProperties.Item.ModerationInformation.Comment = "Price Below Threshold - Saved on Approval Comment";

        workflowProperties.Item["Notes"] = "Price Below Threshold - Saved on Notes Field";

        workflowProperties.Item.Update();

    }

    else if (Result.MaxPrice < dPrice)

    {

        workflowProperties.Item.ModerationInformation.Status = SPModerationStatusType.Denied;

        workflowProperties.Item.ModerationInformation.Comment = "Price Above Threshold - Saved on Approval Comment";

        workflowProperties.Item["Notes"] = "Price Above Threshold - Saved on Notes Field";

        workflowProperties.Item.Update();

    }

    else

    {

        workflowProperties.Item.ModerationInformation.Status = SPModerationStatusType.Approved;

        workflowProperties.Item.Update();

    }



}



private string GetLinkedListItemString(string sItem)

{

    if (sItem.Contains("#"))

    {

        return sItem.Substring(sItem.LastIndexOf("#") + 1);

    }

    else

    {

        return sItem;

    }

}

如果你发现我这里使用LINQ到SharePoint,你可以参考这篇文章一个,这使得我的生活更容易查询SharePoint列表
现在来解释上面的代码中的一些要点:为了获取和设置使用workflowProperties.Item正在处理的当前列表项的项值";列Namequot;要设置的审批状态使用workflowProperties.Item.ModerationInformation.Status由于我们查询LINQ的风格,搜索条件,可以作为复杂的,你想要,你只是你的想象力的限制您还可以看到,我们使用的批准注释字段和注释自定义字段,我们创建的,我只是想展示给你如何节省审批领域的意见,以及在您的列表中的一个字段。如果您使用的是一列从链表,它会显示在此格式ID#VALUE(即quot; 1#Testquot;) 以外,我想上面的代码是它的唯一简单的是当价格高于或低于阈值水平,然后将下降列表中的条目,并留下一张纸条。
运行项目,然后把你的数据。5。运行您的代码
首先添加产品类型中的项目定义阈值
{S12}
添加一个新的产品,这将违反您的门槛
{S13}
现在你可以看到,一旦其提交的进展
{S14}
然后一旦完成,你将看到的说明,并最终批准状态
{S15}

回答

评论会员:arpitgold 时间:2012/01/27
4
投票
评论会员:卡迈勒康德乔希 时间:2012/01/27
可能将在未来它会帮助我。很好的概念
评论会员:BillWoodruff 时间:2012/01/27
喜阿隆,

非常有趣的代码,谢谢,让我想起与创造"不寻常"的主要对象,包括字典对象的键的字典打我,我很久以前的一些实验。

我建议:你与一些实施战略的讨论这篇文章,也许是为什么你使用的是"锁定"对象的一个​​段落,和一些成本估算(内存,性能)"掉肉"使用这种扩展字典形式相比其他一些策略。

现在这个#4汇率,但​​肯定看到它变得#5如果扩大,一个位。

方面,条例草案的伍德拉夫
"的原因是自然秩序的真理,但想象力是
器​​官意思是"CS刘易斯
评论会员:。阿隆维勒 时间:2012/01/27
我对这个类的实际文章... ...可能会回答你的一些问题

{A}