65.9K
CodeProject 正在变化。 阅读更多。
Home

SharePoint 2013 和 SharePoint Online 的字符串处理工作流操作

starIconstarIconstarIconstarIconstarIcon

5.00/5 (3投票s)

2014年3月25日

CPOL

8分钟阅读

viewsIcon

51303

SharePoint 2013 和 SharePoint Online 的字符串处理工作流操作

在本文中,我将演示一组用于 SharePoint 2013 和 SharePoint Online (Office 365) 的自定义 string 处理工作流操作。开箱即用的工作流操作在 string 处理功能方面有限,因此我将展示如何通过使用自定义 string 处理工作流操作来扩展它。

我将本文分为三个部分

  1. 工作流操作说明。这是所有已开发的 string 处理工作流操作的快速参考。
  2. string 处理工作流操作的使用简要指南。本指南主要介绍如何使用 split string 工作流操作,因为理解其他工作流操作的使用并不难。
  3. 实现说明。在这一部分,我将向您展示如何在没有任何代码的情况下创建 string 处理工作流操作。这允许您将工作流操作用于 SharePoint Online 工作流以及 SharePoint 2013 本地版。

如果您对实现不感兴趣,只需阅读第一部分,然后开始在您的项目中开始使用工作流操作。您可以在 codeplex 项目 中找到现成可用的安装包、说明和 string 操作的源代码。

注意:工作流操作支持 SharePoint 2013 工作流(Workflow Foundation 4.5)。所有工作流操作都兼容 SharePoint Online 和 SharePoint 2013,除了 Foundation,因为 SharePoint 2013 Foundation 不支持 SharePoint 2013 工作流(Workflow Foundation 4.5)。

工作流操作说明

分割字符串 (Split String)

此工作流操作使用指定的定界符将 string 分割为子字符串集合。您可以将字符或 string 作为定界符。此工作流操作返回一个字典作为其结果。可以使用开箱即用的循环遍历字典,我稍后将对此进行演示。

格式化日期 (Format date)

此工作流操作使用格式 string 来格式化日期。它返回格式化后的日期作为 string。我使用 DateTime.ToString(string formatString) 方法作为此工作流操作的基础。您可以使用 MSDN 文档中的格式 string 模板。

字符串包含 (String contains)

此工作流操作检查 string 是否包含子字符串。该工作流操作有一个附加属性称为 IgnoreCase,它允许比较器忽略 string 和子字符串的大小写。默认情况下,IgnoreCase 属性设置为 Yes。该工作流操作返回一个 Boolean 值作为结果。

字符串开头是 (String starts with)

此工作流操作检查 string 是否以子字符串开头。此工作流的行为与 String contains 工作流操作相同。

字符串结尾是 (String ends with)

此工作流操作检查 string 是否以子字符串结尾。此工作流的行为与 String contains 工作流操作相同。

字符串长度 (String length)

此工作流操作计算 string 的长度并将其作为 Integer 值返回。

字符串转小写 (String to lower)

此工作流操作将 string 转换为小写 string。它返回转换后的 string 作为结果。

字符串转大写 (String to upper)

此工作流操作将 string 转换为大写 string。它返回转换后的 string 作为结果。

如何使用工作流操作

从上面的工作流操作示例可以看出,其中大多数都是自解释的。您只需填写输入属性,并将结果保存到变量中。

但是,分割字符串 (Split string) 工作流操作需要额外的说明。此操作将子字符串集合作为字典返回。这并不明显,但 SharePoint 工作流中的字典可以包含元素集合以及键值对。在我们的情况下,它包含以下格式的 string 集合。

[
  "test1",
  "test2",
  "test3",
  "test4"
]   

我将展示如何使用开箱即用的循环遍历此集合。看看这个工作流。

首先,我计算字典中的项数,然后初始化索引变量。我们需要知道字典中的项数来配置循环。在循环结束时,我使用计算工作流操作来增加当前索引。最后,我通过使用索引从字典中获取项来构建键 string。键看起来像 “(1)”"(2)" 等。我在 Get item from dictionary 工作流操作中使用索引变量来构建键。就是这样,现在您可以像遍历数组一样遍历字典。

字符串处理工作流操作的实现

在处理 SharePoint 2010 工作流的操作时,我们过去习惯于使用服务器端代码。SharePoint 2013 工作流具有全新的架构,因此我们必须使用不同的方法来开发工作流操作。SharePoint 2013 工作流操作支持服务器端代码,但 SharePoint Online 不允许任何带有服务器端的工作流操作。如果我们想开发通用工作流操作,有两种选择:

  1. 从工作流操作调用 Web 服务。我们可以调用现有的 SharePoint Web 服务,也可以创建自己的自定义逻辑 Web 服务。
  2. 创建工作流操作,将其作为其他工作流操作和用户 C# 表达式的组合来扩展功能。

现在,我将描述如何使用第二种方法创建 string 处理工作流操作。我选择了这种方法,因为我不想创建和维护新的 Web 服务。此外,SharePoint 不提供任何开箱即用的 Web 服务来帮助我完成任务。我只需要执行基本的字符串操作,这就足以采用第二种方法。

SharePoint 2013 的声明性工作流操作允许在现有工作流操作中使用 C# 表达式,这是一个很棒的功能。您可以直接在工作流操作中调用 C# 方法和属性。因此,您可以通过组合标准的 Assign 工作流操作来创建工作流操作。这对于创建相对简单的工作流操作非常有帮助。例如,这是 String to lower 工作流操作在 Visual Studio 中的样子。

如您所见,我在 Assign 操作中使用了 String.ToLower() C# 方法来实现 String to lower 工作流操作。是的,它只是一个带有单个 C# 表达式的工作流操作。

//C# expression
SourceString.ToLower()

现在让我们看看里面有什么。您可以打开 StringToLower.xaml 并找到 Assign 工作流操作的定义。

<Assign sap2010:WorkflowViewState.IdRef="Assign_1">
  <Assign.To>
    <OutArgument x:TypeArguments="x:String">
      <mca:CSharpReference x:TypeArguments="x:String">
        ResultString
      </mca:CSharpReference>
    </OutArgument>
  </Assign.To>
  <Assign.Value>
    <InArgument x:TypeArguments="x:String">
      <mca:CSharpValue x:TypeArguments="x:String">
        SourceString.ToLower()
      </mca:CSharpValue>
    </InArgument>
  </Assign.Value>
</Assign>

如您所见,它使用 CSharpValue 以声明方式定义 C# 表达式。

您可能会想,使用 C# 表达式安全吗?能否在沙盒代码服务中执行 C# 表达式?微软已宣布沙盒解决方案中的服务器端代码已被弃用,不建议用于开发。您说得对,但 C# 表达式不会在沙盒代码服务中执行。您可以自己确保这一点。只需部署 string 操作包,然后在 SharePoint Central Administration 中停止 Microsoft SharePoint Foundation Sandboxed Code Service。然后,尝试使用任何工作流操作。它们都将正常工作。此外,工作流操作将在 SharePoint Online 和 SharePoint 2013 中运行。

不幸的是,标准的 C# 表达式非常有限。您无法使用大多数 .NET 类、方法、属性和枚举,但某些方法是可用的。这是 String 类可用的方法和属性列表。

  • Contains
  • EndsWith
  • Equals
  • IndexOf
  • 长度
  • 替换
  • StartsWith
  • Substring
  • ToLower
  • ToLowerInvariant
  • ToString
  • ToUpper
  • 修剪

String 类与 StringComparison 枚举配合使用。不幸的是,它不受支持,大多数枚举也是如此。为了实现 string 处理工作流操作的忽略大小写功能,我不得不使用 ToLower 方法。这是 String contains 工作流操作在 Visual Studio 中的样子。

//C# expression for contains
SourceString.Contains(Substring)

//C# expression for ignore case contains
SourceString.ToLower().Contains(Substring.ToLower())

我使用了相同的逻辑来实现 String starts withString ends with 工作流操作。

从上面的列表中可以看出,String 类也不支持 Split 方法。为了实现 Split string 工作流操作,我不得不使用开箱即用的工作流操作和 C# 表达式在循环中解析 string。有很多工作流操作,Split string 工作流操作的完整图景将不适合在此页面上。您可以下载源代码并自行分析。它运行得很好,与其他工作流操作一样。

幸运的是,C# 表达式支持 DateTime 类的大多数方法和属性。我使用 ToString(string format) 方法来实现 Format date 工作流操作。

//C# expression
SourceDate.ToString(FormatString)

您可以在下面找到受支持的 DateTime 类方法和属性列表。我曾计划实现一个用于计算工作日的工作流操作,但正如我之前提到的,大多数枚举都不受支持,包括 DayOfWeek 枚举。

支持的方法和属性列表如下:

  • Add
  • AddDays
  • AddHours
  • AddMilliseconds
  • AddMinutes
  • AddMonths
  • AddSeconds
  • AddYear
  • CompareTo
  • Equals
  • 小时
  • Kind
  • 分钟
  • 第二种
  • Subtract
  • ToString
  • 年份

结论

在本文中,我展示了如何通过自定义工作流操作来扩展开箱即用的 string 处理工作流操作集。您可以在 codeplex 项目 中找到现成可用的安装包、说明和字符串操作的源代码。

C# 表达式非常有限,但它们可以快速实现简单的工作流操作。可以执行基本计算并调用有限的 C# 属性和方法。您可以分析支持的方法和属性,并使用它们来实现自己的工作流操作。

上面,我提到了实现通用工作流操作的两种方法。我使用了第二种方法,但您可以将两者结合起来,为 SharePoint 2013 和 SharePoint Online 实现相当复杂的工作流操作。

© . All rights reserved.