MOSS开发Tips
EventHandler:
问题:
最近在开发Eventhandler的时候发现ItemAdded这个方法中如果有对列表项进行更新操作,即执行了item.Update() ,那么就会触发ItemUpdated这个eventhandler事件,我们的本意是编辑,修改的时候
去触发ItemUpdated这个eventhandler
public override void ItemAdded(SPItemEventProperties properties)
{ …
properties.ListItem.Update();
}
public override void ItemUpdated(SPItemEventProperties properties)
{
//update code here
}
解决办法:
添加DisableEventFiring() 这个方法,阻止其他事件被调用
public override void ItemAdded(SPItemEventProperties properties)
{
DisableEventFiring(); //Prevents events from being raised.
…
properties.ListItem.Update();
}
或者不使用properties.ListItem.Update();
改为properties.ListItem.SystemUpdate();
public override void ItemAdded(SPItemEventProperties properties)
{
…
properties.ListItem. SystemUpdate();
}
Splistitem.SystemUpdate Updates the database with changes made to the list item without effecting changes in the modified time or modified by fields.
用户,查阅项数据类型
我们用代码访问用户或查阅项数据类型时候要做些字符串的处理,再使用该数据,
因为这俩中类型,我们用代码item["Author"].ToString()得到的字符串格式是id;#displayname
///get the id by string format as: id;#displayname
///查询项,用户字符串
public static int getID(string val)
{
return Int32.Parse(val.Substring(0, val.IndexOf(';')));
}
///get the displayname by string format as: id;#displayname
///查询项,用户字符串
public static string getDisplayname(string val)
{
return val.Substring(val.IndexOf('#') + 1);
}
Workflow:
workflow.xml 配置
一个工作一般都有初始化表单和任务表单,但有的情况我们不需要初始化表单,即该工作流只有任务表单,这样的话,workflow.xml配置文件就需要作相应修改.
有初始化表单必须有这些节点:
<Workflow
InstantiationUrl="_layouts/IniWrkflIP.aspx"
ModificationUrl="_layouts/ModWrkflIP.aspx">
<MetaData>
<Instantiation_FormURN/>
<Task0_FormURN/>
<StatusPageUrl>_layouts/WrkStat.aspx</StatusPageUrl>
</MetaData>
</Workflow>
只有任务表单的工作流(如果不这样,工作流就会发生错误):
<Workflow
ModificationUrl="_layouts/ModWrkflIP.aspx">
<MetaData>
<Task0_FormURN/>
<StatusPageUrl>_layouts/WrkStat.aspx</StatusPageUrl>
</MetaData>
</Workflow>
IW.Smart Work