2016-10-26 4 views
0

일련의 Sharepoint 목록에서 새로운 Dynamics CRM 구현 (온라인)으로 데이터를 옮기는 대규모 SSIS 프로젝트를 만드는 중입니다. SSIS 패키지는 OData 원본을 사용하여 목록에서 데이터를 가져옵니다.OWSSVR.dll을 사용하여 Sharepoint 목록의 복수 선택 필드

내 목록에는 OData 호출에 표시되지 않는 두 개의 열이 있습니다. 이 두 열에는 다중 선택 또는 다중 조회 값이 있습니다. REST 서비스는 다중 선택 필드를 지원하지 않습니다. (다른 스레드에서 발견 : 시도하는 방법은 다중 선택이 아닌 선택 열에서만 작동합니다. 불행히도 다중 선택 열은 REST 인터페이스에서 지원되지 않습니다.

따라서 OWSSVR.dll을 사용하여 SharePoint 목록에서이 열의 데이터에 액세스해야합니다. 문제가있는 목록에서 내가 사용하는 브라우저에 따라 "이 페이지를 표시 할 수 없습니다"또는 "이 사이트에 연결할 수 없습니다"라는 메시지가 나타납니다.

목록 ID를 목록 설정에서 가져 와서 확인했습니다. 이후 작동하지 않았기 때문에 이미 URL 형식을 확인하기 위해 마이그레이션 한 다른 SharePoint 목록으로 이동했습니다. 다른 목록이 작동하고 데이터가 XML 형식으로 반환됩니다.

OWSSVR.dll에 다중 선택 값이 동일한 제한 사항이 있는지 궁금합니다. 어떤 아이디어 나 제안?

사이비 URL이 (제한된 액세스 사이트) :

작품 : http://dummy.sharepointSite.Com/cases/_vti_bin/owssvr.dll?Cmd=Display&List= {b703d405-48c8-4211-9137-e1b50bdb0330} & XMLDATA = TRUE

브로큰 : http://dummy.sharepointSite.Com/cases/_vti_bin/owssvr.dll?Cmd=Display&List= {8e148584-b5be-48f5-9343- 85d23a7731cc} & XMLDATA = TRUE

답변

0

OWSSVR을 사용하지 않고이 작업을 수행 할 방법을 찾았습니다. SharePoint 사이트에 사용자 컨텍스트를 설정 한 다음 항목 목록을 검색해야합니다.

방법 :

public static ClientContext SetupSPContext(string documentLibrarySiteURL, 
         string userName, string password, string domain = "") 
{ 
    ClientContext clientContext = new ClientContext(documentLibrarySiteURL); 
    SecureString pwString = new SecureString(); 

    foreach (char c in password.ToCharArray()) { pwString.AppendChar(c); } 
    if (!String.IsNullOrWhiteSpace(domain)) 
     clientContext.Credentials = new NetworkCredential(userName, pwString, domain); 
    else 
     clientContext.Credentials = new SharePointOnlineCredentials(userName, pwString); 

    Web web = clientContext.Web; 
    clientContext.Load(web); 
    clientContext.ExecuteQuery(); 
    return clientContext; 
} 

public static ListItemCollection GetListItems(ClientContext context, string listName) 
{ 
    ListCollection listCollection = context.Web.Lists; 
    List targetList = context.Web.Lists.GetByTitle(listName); 

    CamlQuery query = new CamlQuery(); 
    query.ViewXml = "<Query><OrderBy><FieldRef Name='fieldName' /></OrderBy></Query>"; 
    ListItemCollection collListItem = targetList.GetItems(query); 

    context.Load(collListItem); 
    context.ExecuteQuery(); 

    if (collListItem.Count == 0) 
    { 
     return null; 
    } 
    else 
    { 
     return collListItem; 
    } 
} 

코드 SSIS에서 스크립트 구성 요소 :

//In the PreExecute method: 
// Variables were defined for the class and not in the preExecute Method 
ClientContext spContext = SetupSPContext(Variables.spLocation, Variables.spUserName, 
           Variables.spPassword, Variables.spDomain); 
ListItemCollection listItems = GetListItems(spContext, "List Name"); 

//Inside the Individual loop inside SSIS (Input0_ProcessInputRow): 
ListItem listItem = GetListItem(listItems, fieldValue); 

//Multiple Lookup Code 
var values = (FieldLookupValue[])listItem["fieldName"]; 
var finalValue = "FieldName values: "; 

if (values.Length > 0) 
{ 
    foreach (var value in values) 
    { 
     finalValue = value.LookupValue + "; "; 
    } 
} 

//Multiple Select 
if (listItem["fieldName2"] != null) 
{ 
    var valuesTwo = (string[])listItem["fieldName2"]; 
    string combinedValues = "fieldName2 Values: "; 

    foreach (var value in valuesTwo) 
    { 
     combinedValues += value + "; "; 
    } 
} 
+0

돌이켜에서, 내가 직접에서 모든 정보를 끌어하기 위해 하나로, OData 소스로부터 입력을 스크립트 구성 요소에서 변경할 수 SharePoint 목록 그러나 이미 다른 논리를 모두 패키지에 적용했으며 SharePoint에서 값을 확인하기 위해 기존 호출을 모두 변환하지 않아도되도록하고 싶지 않았습니다. DataMigration에 대해 한 번만 실행되는 SSIS 패키지입니다. 나는 완전의 모델을 찾고 있지 않다. 마이그레이션 된 모든 데이터가 필요합니다. –