2012-08-08 2 views
0

두 개의 동일한 SharePoint 목록이 있습니다. 저는 C#을 사용하여 하나의 루프를 반복하고 SP 객체 모델을 사용하여 다른 루프를 추가합니다.SharePoint 목록 항목이 이미 존재하는지 확인하는 C#. CAML?

문제 목록에서 항목과 일치하는 3 개의 특정 필드가있는 목록 항목이 이미있는 경우 문제를 추가하고 싶지 않습니다.

어떻게이 작업을 C#으로 할 수 있습니까? CAML을 사용합니까?

내 목록이에서까지 호출되며 필드는 a, b 및 c라고합니다.

여기서 "to"에 항목을 추가하고 싶지 않습니다. 이미 항목에서 a, b 및 c가 현재 항목과 일치하는 경우.

SPList fList = web.GetList("/sites/xxxx/Lists/from"); 
SPList tList = web.GetList("/sites/xxxx/Lab/Lists/to"); 

foreach (SPListItem fListItem in fList.Items)  
{ 
    // my caml code here i suspect? 
    //SPquery.query = "CAML"; 
    //SPList<yourlist>.GetItems(SPQuery object) 

    SPListItem tListItem = tList.Items.Add();  
    foreach (SPField field in fList.Fields)  
    {     
try 

답변

1

가능한 경우 SPMetal (LINQ To SharePoint)을 사용하여 시작할 것입니다.

MyContext context = new MyContext(SPContext.Current.Web.Url); 

var fItems = from f in context.FromList 
     select f; 

foreach(FItem fitem in fItems) 
{ 
    var toFoundItems = from t in context.ToList 
       where t.Field1 == fitem.Field1 && t.Field2 == fitem.Field2 && t.Field3 == fitem.Field3 
       select t; 

    if(t.Count > 0) 
     continue; 
    else 
     //Code to add items can use context to do this here also 
    } 

다른 방법은 SPQuery를 언급하고 사용하는 것과 같습니다.

SPQuery query = new SPQuery(); 
query.Query = string.format(" 
<Where> 
    <AND> 

     <Eq> 
      <FieldRef Name='Field1' /> 
      <Value Type='Text'>{0}</Value> 
     </Eq> 
     <And> 
      <Eq> 
       <FieldRef Name='Field2' /> 
       <Value Type='Text'>{1}</Value> 
      </Eq> 
      <Eq> 
       <FieldRef Name='Field3' /> 
       <Value Type='Text'>{2}</Value> 
      </Eq> 
     </And> 
    </And> 
</Where>"); 

    SPListItemCollection items = tList.GetItems(query); 

if(items.Count > 0) 
    continue; 
else 
    //Code to add item 

나는 내가 이러한 코드 중 하나를 테스트 할 수 없습니다 내 일반 PC에서 모르지만, 당신이 시작하는 방법의 아이디어를 줄 것이다, SharePoint에서 복합 고유 키를 허용하지 않는 것은 불행한 일이다.

다른 각도에서 문제에 접근하고 싶다면 해당 목록에 이벤트 수신기가 포함 된 복합 고유 키를 적용하는 것이 가능할 수 있습니다.

+0

감사합니다. 우리가 SP2007에 있다고 언급하고 LINQ를 사용할 수 없다고 생각합니다. – o365spo

+0

관련 질문을했습니다. SPD에서 생성 된 SPDatasource에서 C#을 사용하여 생성 된 CAML을 계산할 수 있습니까? 가장 쉬운 방법은 무엇입니까? 감사. – o365spo

+0

CAML 내부에서 단일 qoutes를 사용하는 것과 같은 문제가 있습니까? 1 행만 반환해야하는 경우이 모든 쿼리를 다시 가져옵니다. <값 유형 = 'DateTime'><오늘 OffsetDays = '- 5'/> o365spo

관련 문제