首先,我不認爲你將能夠從事件接收器中訪問頁面的查詢字符串參數。作爲一種解決方法,我會建議使用JavaScript填充SPListItem中的EMP_ID字段。
其次,「Created By」系統字段是否包含創建該記錄的用戶?
例如,把這個JavaScript您EditForm.aspx來填充從EMP_ID參數命名爲「的Emp ID字段」字段:
<script type="text/javascript" src="/path/to/prototype.js"></script>
<script type="text/javascript" src="/path/to/SPUtility.js"></script>
<script type="text/javascript">
function SetValueFromURL(fieldName,queryParamName) {
var queryParams = location.href.toQueryParams();
if (queryParams != null && queryParams[queryParamName] != null) {
SPUtility.GetSPField(fieldName).SetValue(decodeURI(queryParams[queryParamName]));
}
}
Event.observe(window,'load',function(){
try {
// TODO: Put your code here
SetValueFromURL('Emp ID Field', 'EMP_ID');
} catch (ex) {
alert(ex.toString());
}
});
</script>
這是使用SPUtility.js(全面披露,該庫保持由我)。
然後,在您的事件接收器中,您可以訪問EMP ID以查找正確的名稱。
try
{
// same code...
SPListItem currentItem = properties.ListItem;
// **CHANGED** get the current employee's ID from the current SPListItem
string empId = currentItem["Emp ID Field"].ToString();
foreach(SPListItem item in employeesCollection)
{
if(item["EMP_ID"].Equals(empId)){
string name = item["Name"].ToString();
currentItem["Name"] = name;
}
}
}
catch (Exception err)
{
properties.ErrorMessage = "ERROR: " + err.Message;
}
其他有些事情,我與你的代碼注意到...
- 我想你可能必須要更新
properties.ListItem
問題。我想你可能需要更新AfterProperties
而不是(take a look at this very handy reference)。
- 通過不遍歷列表中的每個項目,可以使查找效率更高。如果EMP_ID是自動生成的SharePoint ID,請使用SPQuery對象或SPList.GetItemById。
例如:
try
{
SPSite ohportal = new SPSite("http://moss2007dev:1234");
SPWeb site = ohportal.OpenWeb();
SPList vitality = site.Lists[properties.ListId];
SPList employees = site.Lists["Employees List"];
SPListItemCollection vitalityCollection = vitality.Items;
SPListItemCollection employeesCollection = employees.Items;
SPListItem currentItem = properties.ListItem;
// lookup the employees name
string empId = currentItem["EMP_ID"].ToString();
SPListItem employee = list.GetItemById(Int32.Parse(empId));
properties.AfterProperties["Name"] = employee["Name"].ToString();
}
catch (Exception err)
{
properties.ErrorMessage = "ERROR: " + err.Message;
}
Hi Kit,在這種情況下,「創建者」列無效,因爲只有一個用戶創建該項目,即醫生。所以,我需要的是具有標識符的特定項目所屬,可以完成過濾。我會研究上述選項。感謝您及時的回覆。 :) – janejanejane 2010-11-05 09:11:13
嗨,在上面的代碼中,我怎麼可以引用另一個列表在同一個網站,將確定我的條件爲EMP_ID? – janejanejane 2010-11-05 10:56:46
簡,我認爲我的答案可能沒有包含足夠的細節(已更新,請看一下)。基本上,你會使用JavaScript來填充一個字段,以便你可以在你的事件接收器中引用它(因爲你不能訪問QueryString)。 – 2010-11-05 15:21:01