Во-первых, я не думаю, что вы сможете получить доступ к параметрам строки запроса страницы из приемника событий. В качестве обходного пути я бы предложил заполнить поле EMP_ID в вашем SPListItem с помощью JavaScript.
Во-вторых, не будет ли системное поле «Создано» содержать пользователя, создавшего запись?
Например, поместив этот JavaScript в свой EditForm.aspx, чтобы заполнить поле с именем 'Emp ID Field' из параметра 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
вместо этого ( взгляните на этот очень удобный справочник ).
- Вы можете повысить эффективность поиска, не перебирая все элементы в списке. Используйте объект SPQuery или SPList.GetItemById , если EMP_ID является автоматически сгенерированным идентификатором SharePoint.
Например:
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;
}