2013-08-08 4 views
3

В коде ниже, в следующей строкеSitecore Workflow команда бросает «Не удалось найти определение команды» ошибка

WorkflowResult result = wf.Execute(SitecoreItems.MediaWorkflowApproveCommand, item, "", false); 

бросает ошибку Could not find command definition. Идентификаторы и все другие свойства действительны, но определение команды недопустимо.

Любые идеи относительно того, что может быть причиной этого?

using (new SecurityDisabler()) 
      { 
       // Find all related items 
       ItemLink[] itemLinks = dataItem.Links.GetValidLinks(); 
       foreach (ItemLink link in itemLinks) 
       { 
        Item item = link.GetTargetItem(); 
        // publishing related media items - the ones that were referenced by the workflow item 
        // this can be extended - you can publish related aliases also 
        if (item != null && item.Paths.IsMediaItem) 
        { 
         //push field to the next state 
         IWorkflow wf = item.Database.WorkflowProvider.GetWorkflow(item); 
         WorkflowResult result = wf.Execute(SitecoreItems.MediaWorkflowApproveCommand, item, "", false); 
        } 
       } 
      } 

ответ

5

Это исключение либо, если элемент не в любом состоянии технологического процесса или состояние рабочего процесса, который этот элемент в не имеет никакого ребенка ID равно идентификатор команды передается в качестве параметра.

Попробуйте выполнить следующий код:

 if (item.Database.Name == "web") 
     { 
      throw new Exception("Can not execute workflow command in web database"); 
     } 
     if (String.IsNullOrEmpty(item[FieldIDs.WorkflowState])) 
     { 
      throw new Exception("Workflow state is not set for the item"); 
     } 
     Item stateItem = ItemManager.GetItem(wf.GetState(item), Language.Current, Version.Latest, item.Database, SecurityCheck.Disable); 
     if (stateItem == null) 
     { 
      throw new Exception("Workflow state " + item[FieldIDs.WorkflowState] + " is not a part of " + wf.WorkflowID + " workflow"); 
     } 
     if (stateItem.Axes.GetChild(ID.Parse(SitecoreItems.MediaWorkflowApproveCommand)) == null) 
     { 
      throw new Exception("Workflow state " + stateItem.ID + " does not have a child command with id " + SitecoreItems.MediaWorkflowApproveCommand); 
     } 

перед выполнением строки

WorkflowResult result = wf.Execute(SitecoreItems.MediaWorkflowApproveCommand, item, "", false); 
+0

Это просто подавляет ошибку. Я хочу, чтобы он работал, устраняя ошибку. – Gabbar

+0

Если вы выполните код, который я написал, вы увидите, в чем причина этого исключения –

+0

wf.GetStateItem не является допустимой функцией. Это функция GetState? – Gabbar

Смежные вопросы