_XDocumentEventSink2_Event.OnLoad 事件
发生在加载 Microsoft InfoPath 表单之后、初始化任何视图之前。
命名空间: Microsoft.Office.Interop.InfoPath.SemiTrust
程序集: Microsoft.Office.Interop.InfoPath.SemiTrust(位于 Microsoft.Office.Interop.InfoPath.SemiTrust.dll 中)
语法
声明
Event OnLoad As _XDocumentEventSink2_OnLoadEventHandler
用法
Dim instance As _XDocumentEventSink2_Event
Dim handler As _XDocumentEventSink2_OnLoadEventHandler
AddHandler instance.OnLoad, handler
event _XDocumentEventSink2_OnLoadEventHandler OnLoad
备注
此事件处理程序允许用户取消操作。
如果 DocReturnEventObject 对象的 ReturnStatus 属性设置为 false,InfoPath 将取消表单的加载。如果错误发生在 OnLoad 事件的代码中,InfoPath 将忽略该错误并依赖于 ReturnStatus 属性。如果没有显式设置 ReturnStatus 属性,则使用默认值 true。
备注
OnLoad 事件发生时,该视图尚未初始化,用于该视图的 XSL 转换 (XSLT) 也尚未加载。直到 OnLoad 事件发生之后,XDocument 对象才会添加到 XDocumentsCollection 集合中。但在 OnLoad 事件期间,XDocument 对象是可用的。
重要
此事件需要一个"完全信任"安全级别。若要设置此安全级别,请在 InfoPath 设计窗口的"工具"菜单中选择"表单选项",然后在"安全性"选项卡上选择"完全信任"。必须安装"完全信任"表单或者对其进行数字签名。
示例
在下面的示例中,OnLoad 事件处理程序用于确定表单是否已进行数字签名,如果没有,则使用函数和自定义函数的组合来初始化某些日期值:
[InfoPathEventHandler(EventType=InfoPathEventType.OnLoad)]
public void OnLoad(DocReturnEvent e)
{
// Avoid DOM updates when the document has been digitally signed.
if (thisXDocument.IsSigned)
{
return;
}
string today = thisXDocument.Util.Date.Today().ToString();
initializeNodeValue("/sls:salesReport/sls:date", today);
}
此 Onload 事件处理程序示例依赖于两个自定义函数:initializeNodeValue 和 setNodeValue。
private void initializeNodeValue(string xpath, string strValue)
{
IXMLDOMNode xmlNode = thisXDocument.DOM.selectSingleNode(xpath);
// Set the node value *ONLY* if the node is empty.
if (xmlNode.text == "")
{
setNodeValue(xmlNode, strValue);
}
}
private void setNodeValue(IXMLDOMNode xmlNode, string strValue)
{
if (xmlNode == null)
{
return;
}
// The xsi:nil needs to be removed before we set the value.
if (strValue != "" && xmlNode.attributes.getNamedItem("xsi:nil") != null)
{
xmlNode.attributes.removeNamedItem("xsi:nil");
}
// Setting the value would mark the document as dirty.
// Let's do that if the value has really changed.
if (xmlNode.text != strValue)
{
xmlNode.text = strValue;
}
}