Sitecore工作箱"不允许使用空字符串"错误

时间:2014-05-29 10:56:14

标签: sitecore sitecore7 sitecore-workflow

尝试在工作箱中显示用户创建的工作流程时遇到此异常。

Empty string is not allowed.
Parameter name: value.
Actual value was .

跟踪如下。

[ArgumentOutOfRangeException: Empty string is not allowed.
Parameter name: value.
Actual value was .]
   Sitecore.Diagnostics.Error.AssertString(String argument, String name, Boolean allowEmpty) +136
   Sitecore.Shell.Framework.CommandBuilders.CommandBuilder.Add(String key, String value) +42
   Sitecore.Shell.Applications.Workbox.WorkboxForm.CreateCommand(IWorkflow workflow, WorkflowCommand command, Item item, XmlControl workboxItem) +280
   Sitecore.Shell.Applications.Workbox.WorkboxForm.CreateItem(IWorkflow workflow, Item item, Control control) +1758
   Sitecore.Shell.Applications.Workbox.WorkboxForm.DisplayState(IWorkflow workflow, WorkflowState state, DataUri[] items, Control control, Int32 offset, Int32 pageSize) +167
   Sitecore.Shell.Applications.Workbox.WorkboxForm.DisplayStates(IWorkflow workflow, XmlControl placeholder) +654
   Sitecore.Shell.Applications.Workbox.WorkboxForm.DisplayWorkflow(IWorkflow workflow) +439
   Sitecore.Shell.Applications.Workbox.WorkboxForm.Pane_Toggle(String id) +141

起初我认为工作流程中的某些项目没有设置状态值,因此我更正了问题并且问题仍然存在。

Sitecore版本为7.0(rev.130918)

这个工作流程没有什么特别之处,只有标准的三种状态,包括电子邮件提醒和自动发布。我认为这只是标准工作流程与新名称的直接重复。

我投入生产后进入这个项目的时间已经很晚了,所以我仍然可以发现设置有些奇怪。

3 个答案:

答案 0 :(得分:2)

问题在于流程的CreateItem步骤。本质上,它试图创建一个新的Item,但运行规则来反对Item的命名。

"实际值为。"实际上是指针对建议的Item名称运行的正则表达式是空字符串,而不是句号。

解决方案是确认web.config中的以下设置具有这些(或类似的)值,如果没有添加值。

<setting name="InvalidItemNameChars" value="\/:?&quot;&lt;>|[]" />

<setting name="ItemNameValidation" value="^[\w\*\$][\w\s\-\$]*(\(\d{1,}\)){0,1}$" />

通常会删除它们以使用包含这些字符的项目上传包,但忘记撤消更改的步骤。

答案 1 :(得分:1)

真的不是答案:我和@wardey在同一个项目上工作,这可能有助于说明问题所在? 不允许使用Workbox空字符串只有在用户设置为管理员时才会出现错误。 我将“用户管理员”设置为关闭,我可以看到工作流程。

答案 2 :(得分:0)

请参阅CreateCommand类的代码:

private void CreateCommand(IWorkflow workflow, WorkflowCommand command, Item item, XmlControl workboxItem)
{
    Assert.ArgumentNotNull(workflow, "workflow");
    Assert.ArgumentNotNull(command, "command");
    Assert.ArgumentNotNull(item, "item");
    Assert.ArgumentNotNull(workboxItem, "workboxItem");
    XmlControl webControl = Resource.GetWebControl("WorkboxCommand") as XmlControl;
    Assert.IsNotNull(webControl, "workboxCommand is null");
    webControl["Header"] = command.DisplayName;
    webControl["Icon"] = command.Icon;
    CommandBuilder builder = new CommandBuilder("workflow:send");
    builder.Add("id", item.ID.ToString());
    builder.Add("la", item.Language.Name);
    builder.Add("vs", item.Version.ToString());
    builder.Add("command", command.CommandID);
    builder.Add("wf", workflow.WorkflowID);
    builder.Add("ui", command.HasUI);
    builder.Add("suppresscomment", command.SuppressComment);
    webControl["Command"] = builder.ToString();
    workboxItem.AddControl(webControl);
}

添加到builder.Add()行的其中一个值为空。似乎您的工作流程命令中存在一些配置错误。

希望这有助于让你朝着正确的方向前进。