从SharePoint 2010中的列表项上的自定义按钮/操作启动工作流(全部使用Visual Studio 2010)

Dan*_*ner 2 sharepoint workflow custom-action code-behind

我很抱歉问了一个双重问题,但我搞砸了找不到解决方案 - 或者对答案缺乏理解.

我的问题就像被描述一样:

我有一些带按钮的自制定制丝带.如果我点击设计按钮,我想开始工作流程.

好的,有关设置的更多信息:

这是一个通用列表,意思是,我的elemets.xml看起来像这样:

<CustomAction
  Id="MyCustomRibbonTab"
  Location="CommandUI.Ribbon.ListView"
  RegistrationId="100"
  RegistrationType="List">
  <CommandUIExtension>
    <CommandUIDefintions>
      <CommandUIDefinition
        Location="Ribbon.Tabs._children">
        <Tab Id="Ribbon.CustomTab" Sequence="501">
        ... (Scaling)
          <Groups Id="Ribbon.CustomTab.Groups">
            <Group 
              Id="Ribbon.CustomTab.GroupOne" 
              Sequence="52">
              <Controls Id="Ribbon.CustomTab.GroupOne.Controls">
                <Button
                  Id="Ribbon.CustomTab.GroupOne.ButtonOne"
                  Command="CustomTab.ButtonOneCommand"
                  Sequence="11">
              </Controls>
            </Group>
          </Groups>
        </Tab>
      </CommandUIDefinition>
    </CommandUIDefinitions>
    <CommandUIHandlers>
      <CommandUIHandler
        Command="CustomTab.ButtonOneCommand"
        CommandAction="javascript:alert('how start workflow here?');" />
        />
    </CommandUIHandlers>
  </CommandUIExtension>
  <!-- what about starting workflow here? How? -->
</CustomAction>
Run Code Online (Sandbox Code Playgroud)

希望很清楚我的XML-Post意味着什么.好吧,如果我把CommandAction ="javascript:alert('应该启动一个工作流程'),这样可以正常工作;" .我的意思是,这个警报弹出,我可以点击好,没别的.

现在我在同一个项目中设计了我的工作流程.有两种类型,一种在asp中有启动形式,另一种没有,都在选定的项目上运行.我可以在使用标准功能区"Workflows"时启动它们,然后单击它们.到目前为止一切都很好.

但我希望通过单击我的按钮来启动每个工作流程,而不是现在的点击次数.谢谢你到目前为止帮助我.

我是SharePoint的新手.所以请在你的答案中包括诸如"添加新的...空元素/ JavaScript文件"之类的内容或者任何必要的内容以获得我所假设的内容.

如果您对我的工作流程设计有更多疑问,我会尽快回答.

非常感谢你,

danbruc

注意:是的,我只是希望即使我的Elements.xml也没问题.我从网上拿走了所有.所以如果你有重新设计的建议,我是开放的.只是盲目地看到解决方案.另外,我可以把这个Tab放在ListView的ContextualTab中,但是后来甚至javascript都无法正常工作.

Den*_*s G 6

您是否阅读了有关自定义和扩展SharePoint 2010 Server功能区的文档?

它非常简洁,并向您显示有关您的问题的重要信息:您需要进行回发以通过服务器端代码启动工作流程:

<CommandUIHandler Command="WebPartContextualTabs.OnPostback"
CommandAction="javascript:__doPostBack('StartMyWorkflowPostBack','');" />
Run Code Online (Sandbox Code Playgroud)

现在要投入什么来StartMyWorkflowPostBack启动您的工作流程?有几个资源,您可以通过Google找到更多资源:

让我简单解释一下:你没有告诉我们什么样的工作流程.基于列表的工作流程或站点工作流程,启动方法因这些而异.以列表工作流程为例,您需要像这样启动工作流程:

SPWorkflowProperties.Site.WorkflowManager.StartWorkflow(listItem, associationTemplate, initData);
Run Code Online (Sandbox Code Playgroud)

但正如你所看到的,你需要很多东西:这个SPListItem,SPWorkflowAssociationTemplate以及一些启动数据.