"품질 문서"라는 SharePoint 문서 라이브러리를 사용자 지정하여 새 문서가 라이브러리에 추가 될 때 임의의 고유 번호가 생성되어 "문서 번호". 아래에 기능을 코딩했지만 작동하지 않습니다. 누구든지 문제가 무엇인지 볼 수 있습니까? 아무 일도 일어나지 않고, 오류도없고, 페이지가 제대로 작동하지만 문서 번호가 생성되지 않습니다. 어떤 제안?SharePoint 문서 라이브러리에서 고유 한 임의 문자열 생성
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.Office.Server;
using Microsoft.Office.Server.UserProfiles;
namespace QualityDocHandler
{
class DocumentHandler : SPItemEventReceiver
{
/// <summary>
/// Generates a random string with the given length
/// </summary>
/// <param name="size">Size of the string</param>
/// <returns>Random string</returns>
private string RandomString(int size)
{
StringBuilder builder = new StringBuilder();
Random random = new Random();
char ch;
for (int i = 0; i < size; i++)
{
ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
builder.Append(ch);
}
return builder.ToString();
}
private string createDocNum(SPItemEventProperties properties)
{
int newRnd = 0;
do
{
// set static department
string dept = "QUA";
// set date without separators
string dateString = DateTime.Today.ToString("ddMMyyyy");
// get 1st random string
string Rand1 = RandomString(4);
// get 1st random string
string Rand2 = RandomString(4);
// creat full document number
string docNum = dept + "-" + dateString + "-" + Rand1 + "-" + Rand2;
using (SPWeb oWeb = new SPSite(properties.SiteId).OpenWeb(properties.RelativeWebUrl))
{
SPList oList = oWeb.Lists["Quality Documents"];
//create query
SPQuery oQuery = new SPQuery();
//configure the query //
oQuery.Query = "<Where><Eq><FieldRef Name='Document_x0020_Number' /><Value Type='Text'>" + docNum + "</Value></Eq></Where>";
//get the collection of items in the list
SPListItemCollection oItems = oList.GetItems(oQuery);
if (oItems.Count > 0)
{
newRnd = 0;
}
else
{
newRnd = 1;
}
}
return docNum;
}
while (newRnd < 1);
}
public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
}
public override void ItemAdding(SPItemEventProperties properties)
{
string documentNum = createDocNum(properties);
using (SPWeb oWeb = new SPSite(properties.SiteId).OpenWeb(properties.RelativeWebUrl))
{
SPListItem listItem = properties.ListItem;
properties.AfterProperties["Document_x0020_Number"] = documentNum;
listItem.Update();
oWeb.Update();
}
base.ItemAdding(properties);
}
public override void ItemUpdated(SPItemEventProperties properties)
{
base.ItemUpdated(properties);
}
public override void ItemUpdating(SPItemEventProperties properties)
{
base.ItemUpdating(properties);
}
}
}
이 코드를 depubug하면 어떻게됩니까? 그것이 파문을 일으키는 줄을 아십니까? – Colin
Jeez, 그곳에는 우스꽝스럽게 쓰여진 Engilsh가 있었는데, 미안 .. – Colin
P. 당신은 ItemAdding 오버라이드에서 전체 "using"블록을 제거 할 수 있습니다. 코드 블록만으로 충분합니다 (당연히 oWeb.Update() 호출은 제외됩니다). 부모 SPWeb 객체가 아니라 여기에서 SPLIstItem으로 작업하고 있습니다. – Colin