2015-03-02 6 views
1

Предположим, у меня есть 2 списка: Команды и . Каждая команда имеет ряд сотрудников:Обновление ProjectedField с помощью JOIN в Sharepoint с использованием объектной модели клиента Javascript

Teams 
    ID 
    Name 

Employees 
    ID 
    Name 
    TeamID (foreign key of Teams) 

Если я создал Join запрос о сотрудниковLEFT JOINКоманды, я мог тогда set_item и updateName поля в командах?

var ctx = SP.ClientContext.get_current(); 
var list = clientContext.get_web().get_lists().getByTitle('Employees'); 

var queryText = 
"<View>" + 
    "<Query></Query>" + 
    "<ProjectedFields>" + 
    "<Field Name='TeamName' Type='Lookup' List='Team' ShowField='Name' />" + 
    "</ProjectedFields>" + 
    "<Joins>" + 
    "<Join Type='INNER' ListAlias='Team'>" + 
     "<Eq>" + 
     "<FieldRef Name='TeamID' RefType='Id'/>" + 
     "<FieldRef List='Team' Name='ID'/>" + 
     "</Eq>" + 
    "</Join>" + 
    "</Joins>" + 
    "<ViewFields>" + 
    "<FieldRef Name='TeamName'/>" + 
    "</ViewFields>" + 
"</View>"; 

var camlQuery = new SP.CamlQuery(); 
camlQuery.set_viewXml(queryText); 

var listItemsCollection = list.getItems(camlQuery); 
ctx.executeQueryAsync(onSuccess, onError); 

И затем обновите TeamName поле:

var first = listItemsCollection.get_data()[0]; 
first.set_item("TeamName", "something"); 
first.update(); 

ctx.executeQueryAsync(onSuccess, onError); 

ли это поддерживается? (В настоящее время я не пытаюсь это сделать)

Если нет, то какой может быть альтернатива?

ответ

0

Нет, только те поля, которые содержит, элемент списка может быть обновлен. Но вы можете рассмотреть следующий подход для обновления прогнозируемых полей .

Поскольку проецируемые поля возвращаются как поиск значения, вы можете получить проецируется элемент списка и обновить его свойства, как показано ниже:

var listTitle = 'Employees'; 
var joinListTitle = 'Teams' 
var joinFieldName = 'TeamID'; 
var projectedFields = ['Name']; 


getListItems(listTitle,joinListTitle,joinFieldName,projectedFields, 
    function(items){ 

    var item = items.get_data()[0]; //get first item 
    var itemId = item.get_item('TeamsName').get_lookupId(); //get projected list item id 
    var propertiesToUpdate = {'Name': 'New Team Name'}; 

    updateListItem(joinListTitle,itemId,propertiesToUpdate,function(item){ 
     console.log('List Item has been updated'); 
    }, 
    logError); 


    }, 
logError); 

где

function createJoinQuery(joinListTitle,joinFieldName,projectedFields,joinType) 
{ 
    var queryText = 
    "<View>" + 
     "<Query/>" + 
     "<ProjectedFields>"; 
    for(var idx in projectedFields) { 
     queryText += String.format("<Field Name='{0}{1}' Type='Lookup' List='{0}' ShowField='{1}' />",joinListTitle,projectedFields[idx]); 
    } 
    queryText += 
     "</ProjectedFields>" + 
     "<Joins>" + 
      "<Join Type='{2}' ListAlias='{0}'>" + 
       "<Eq>" + 
        "<FieldRef Name='{1}' RefType='Id'/>" + 
        "<FieldRef List='{0}' Name='ID'/>" + 
       "</Eq>" + 
      "</Join>" + 
     "</Joins>" + 
    "</View>"; 
    var qry = new SP.CamlQuery(); 
    qry.set_viewXml(String.format(queryText,joinListTitle,joinFieldName,joinType)); 
    return qry; 
} 

function getListItems(listTitle,joinListTitle,joinFieldName,projectedFields,success,error) 
{ 
    var ctx = SP.ClientContext.get_current(); 
    var web = ctx.get_web(); 
    var list = web.get_lists().getByTitle(listTitle); 
    var items = list.getItems(createJoinQuery(joinListTitle,joinFieldName,projectedFields,'INNER')); 

    ctx.load(items); 
    ctx.executeQueryAsync(
    function() { 
     success(items); 
    }, 
    error 
    ); 
} 



function updateListItem(listTitle,itemId, propertiesToUpdate,success,error) 
{ 
    var ctx = SP.ClientContext.get_current(); 
    var web = ctx.get_web(); 
    var list = web.get_lists().getByTitle(listTitle); 
    var listItem = list.getItemById(itemId); 
    for(var name in propertiesToUpdate) { 
     listItem.set_item(name,propertiesToUpdate[name]); 
    } 
    listItem.update(); 
    ctx.executeQueryAsync(function() { 
     success(listItem); 
    },error); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^