Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Sitecore-自定义字段,在创建时添加唯一值_C#_Vb.net_Sitecore_Sitecore7 - Fatal编程技术网

C# Sitecore-自定义字段,在创建时添加唯一值

C# Sitecore-自定义字段,在创建时添加唯一值,c#,vb.net,sitecore,sitecore7,C#,Vb.net,Sitecore,Sitecore7,我想创建一个字段,生成一个运行编号。每次我创建新项目时都会自动生成此编号,并且必须是唯一的 有没有关于如何实现这一点的例子?我不想为此使用Sitecore项目ID 您可以实现自定义令牌,只需使用您的字段即可。我认为这将是解决你问题的最干净的办法。您可以添加自定义算法以确保ID是唯一的,也可以只使用Guid.NewGuid()。您可以在此对话框中检查如何创建自定义令牌。好的。受nsgocev博客帖子的启发,我提出了一个解决方案。我们的ID需要存储在某个地方,因此我在/sitecore/conten

我想创建一个字段,生成一个运行编号。每次我创建新项目时都会自动生成此编号,并且必须是唯一的


有没有关于如何实现这一点的例子?我不想为此使用Sitecore项目ID

您可以实现自定义令牌,只需使用您的字段即可。我认为这将是解决你问题的最干净的办法。您可以添加自定义算法以确保ID是唯一的,也可以只使用
Guid.NewGuid()
。您可以在此对话框中检查如何创建自定义令牌。

好的。受nsgocev博客帖子的启发,我提出了一个解决方案。我们的ID需要存储在某个地方,因此我在/sitecore/content/中创建了一个项,将最后一个ID存储为字符串。将开始设置为“AA000000”。我们的ID有一个前缀“AA”和6位数字

这是重要的逻辑:

Namespace Tokens

Public Class GeneratedArticleId
    Inherits ExpandInitialFieldValueProcessor

    Public Overrides Sub Process(ByVal args As ExpandInitialFieldValueArgs)
        If args.SourceField.Value.Contains("$articleid") Then
            Dim database = Sitecore.Client.ContentDatabase
            Dim counter = database.GetItem(New ID("Our Item"))

            If counter Is Nothing Then
                args.Result = ""
                Exit Sub
            End If

            Dim idfield = AppendToIdValue(counter("ID"))

            Using New SecurityDisabler()
                counter.Editing.BeginEdit()
                counter.Fields("ID").Value = idfield
                counter.Editing.EndEdit()
            End Using

            If args.TargetItem IsNot Nothing Then
                args.Result = args.Result.Replace("$articleid", idfield)
            End If
        End If
    End Sub

    'Extracts the digits and adds one

    Private Shared Function AppendToIdValue(ByVal id As String)
        Dim letterprefix = Left(id, 2)
        Dim integervalue = CInt(id.Replace(letterprefix, ""))
        integervalue += 1
        Return letterprefix & integervalue.ToString("000000")
    End Function
End Class
End Namespace
我们还需要将类添加到web配置文件中。修补程序中给定的类:


现在,当我们使用标记“$articleid”创建一个新项目时,ID是AA000001。下一个将是AA000002,以此类推


感谢@nsgocev提供的资源和答案。

听起来不错!将尝试
  <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
      <sitecore>
        <pipelines>
          <expandInitialFieldValue help="Processors should derive from Sitecore.Pipelines.ExpandInitialFieldValue.ExpandInitialFieldValueProcessor">
            <processor patch:after="*[@type='Sitecore.Pipelines.ExpandInitialFieldValue.ReplaceVariables, Sitecore.Kernel']" type="OurLibrary.Tokens.GeneratedArticleId, OurLibrary"/>
          </expandInitialFieldValue>
        </pipelines>
      </sitecore>
  </configuration>