近期在使用SPD开发简单工作流的时候,积累了一些小的经验,觉得大家可能会碰到,也防止自己忘记,所及记录下来。 本文会持续更新。
1、我在给发布类网站,也就是新闻类网站做审批工作流的时候
需要关闭“页面”列表的“文档库版本控制设置”中的“提交的项目是否需要内容审批? ”,将这项设置为否,否则用SPD做的工作流在运行的过程中会提示错误。
SP中的列表都可以启用内容审批,就可以在Item的下拉菜单中多出一个“批准/拒绝”,不用工作流也可以在列表中实现审批能,这个内容审批功能和SPD的工作流审批不要同时使用。启用了这个审批就不要在SPD中修改Item的栏目值,因为修改了就需要内容审批吗。可以不启用这个选项,在SPD中就不能使用“设置内容审批”操作了,使用自定义的一些状态就好了。
2、在做工作流之前要明确的几个概念
做工作流会产生很多的内容类型,工作流任务内容类型,工作流内容类型,要求审批的内容类型(也就是工作流加载的内容类型)
3、如果在你的工作流中需要修改启动工作流的Item的某些字段的时候,恰巧这时候你的列表启用了版本控制的话,就需要在操作里面选择“签出项目”,然后才可以修改相应的栏目,当然了,修改之后别忘了使用“签入项目”,最后别忘了“结束工作流”。
下面我贴一个我用SPD做的工作流吧,方便大家交流。功能是实现审批的置顶和图片轮换,通过审批来决定是否置顶,是否图片轮换。
图1
图2

图3

图4

图5

图 6

图 7
现在还有一个问题,就是启动工作流的时候,输入的参数在审批的时候看不见,不知道如何才能显示呢,也就是新闻建议轮换和新闻建议置顶,如何在审批的时候参考一下啊,谢谢大家了。
问题解决
1、 将启动工作流的用户在启动项中填写或者选中的值带入审批者界面的解决办法
我想到一个办法,就是根据启动变量设置的不同,也就是是否建议进入轮换和置顶,决定分配不同的任务,这里举例就两个吧,产生两个任务内容类型,在SPD中会看到如下结构
图 8
然后打开一个任务的aspx页面,编辑里面的xsl格式化显示,让不同的任务显示不同的内容,比如说建议轮换,就显示启动者建议轮换之类的内容,
编辑rowedit template就可以了,具体内容见下面的xsl代码


<xsl:template name="dvt_1.rowedit">
<xsl:param name="Pos" />
<tr>
<td>
<table border="0" cellspacing="0" width="100%"><tr><td class="ms-formlabel" valign="top" nowrap="true" width="25%"><b>标题:</b></td><td class="ms-formbody" valign="top" width="75%">新闻审批任务1<br></br><br></br></td></tr>
<tr>
<td width="25%" class="ms-formlabel">
<b>申请者建议<span class="ms-formvalidation"> *</span>:</b>
</td>
<td width="75%" class="ms-formbody">
建议进入首页图片轮换
</td>
</tr>
<tr>
<td width="25%" class="ms-formlabel">
<b>新闻审批结果<span class="ms-formvalidation"> *</span>:</b>
</td>
<td width="75%" class="ms-formbody">
<SharePoint:FormField runat="server" id="ff1{$Pos}" ControlMode="Edit" FieldName="_x5ba1__x6279__x7ed3__x679c_" __designer:bind="{ddwrt:DataBind('u',concat('ff1',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@_x5ba1__x6279__x7ed3__x679c_')}"/>
<SharePoint:FieldDescription runat="server" id="ff1description{$Pos}" FieldName="_x5ba1__x6279__x7ed3__x679c_" ControlMode="Edit"/>
</td>
</tr>
<tr>
<td width="25%" class="ms-formlabel">
<b>新闻审批意见:</b>
</td>
<td width="75%" class="ms-formbody">
<SharePoint:FormField runat="server" id="ff2{$Pos}" ControlMode="Edit" FieldName="_x65b0__x95fb__x5ba1__x6279__x61" __designer:bind="{ddwrt:DataBind('u',concat('ff2',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@_x65b0__x95fb__x5ba1__x6279__x61')}"/>
<SharePoint:FieldDescription runat="server" id="ff2description{$Pos}" FieldName="_x65b0__x95fb__x5ba1__x6279__x61" ControlMode="Edit"/>
</td>
</tr>
<xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">
<tr>
<td colspan="99" class="ms-vb">
<span ddwrt:amkeyfield="ID" ddwrt:amkeyvalue="ddwrt:EscapeDelims(string(@ID))" ddwrt:ammode="edit"></span>
</td>
</tr>
</xsl:if>
<tr><td class="ms-formlabel" valign="top" nowrap="true" width="25%"><b>相关列表项:</b></td><td class="ms-formbody" valign="top" width="75%"><a href="{substring-before(@WorkflowLink, ', ')}"><xsl:value-of select="substring-after(@WorkflowLink, ', ')"></xsl:value-of></a></td></tr></table>
</td>
</tr>
</xsl:template>
2、在启动的时候让用户输入审批者的解决办法
添加工作流启动参数,上面有一张图(图7)里面就是启动参数,添加一个,不过启动参数的类型选择中没有用户选择器这种东西,只能添加添加一个单行文本,看看通过修改NewApprove.aspx(如图8所示),看看能不能把输入改成用户选择peopleeditor控件了。
用文本框输入审批者可以成功,但是把控件可修改成peopleeditor,审批者的名称不知道如何传递?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构