domingo, 14 de septiembre de 2014

5.2.7.2 - Tareas de elementos de lista de SharePoint

Usar el método Include para obtener acceso a propiedades de objetos ListItem

Hay 4 propiedades de objetos ListItem que no están disponibles de forma predeterminada al devolver elementos de lista: displayName, effectiveBasePermissions, hasUniqueRoleAssignments y roleAssignments. El ejemplo anterior devuelve una excepción PropertyOrFieldNotInitializedException si trata de obtener acceso a una de estas propiedades. Para obtener acceso a una de estas propiedades, se debe usar el método Include como parte de la cadena de la consulta, como se muestra en el siguiente ejemplo.

Nota

Al usar LINQ para crear consultas respecto del modelo de objetos de cliente, se utiliza LINQ to Objects, y no el proveedor LINQ to SharePoint, que solo se puede usar cuando se escribe código respecto al modelo de objetos de servidor.

function retrieveListItemsInclude(siteUrl) {
    var clientContext = new SP.ClientContext(siteUrl);
    var oList = clientContext.get_web().get_lists().getByTitle('Announcements');

    var camlQuery = new SP.CamlQuery();
    camlQuery.set_viewXml('<View><RowLimit>100</RowLimit></View>');
    this.collListItem = oList.getItems(camlQuery);

    clientContext.load(
        collListItem, 
        'Include(Id, DisplayName, HasUniqueRoleAssignments)'
    );
    clientContext.executeQueryAsync(
        Function.createDelegate(this, this.onQuerySucceeded), 
        Function.createDelegate(this, this.onQueryFailed)
    );
}

function onQuerySucceeded(sender, args) {
    var listItemInfo = '';
    var listItemEnumerator = collListItem.getEnumerator();
        
    while (listItemEnumerator.moveNext()) {
        var oListItem = listItemEnumerator.get_current();
        listItemInfo += '\nID: ' + oListItem.get_id() + 
            '\nDisplay name: ' + oListItem.get_displayName() + 
            '\nUnique role assignments: ' + 
            oListItem.get_hasUniqueRoleAssignments();
    }

    alert(listItemInfo.toString());
}

function onQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message() + 
        '\n' + args.get_stackTrace());
}


Dado que en este ejemplo se usa Include, solo las propiedades especificadas estarán disponibles después de la ejecución de la consulta. Por lo tanto, recibirá una excepciónPropertyOrFieldNotInitializedException si trata de obtener acceso a otras propiedades además de las que se especificaron. Además, se recibirá este error si se trata de usar propiedades como get_contentType o get_parentList para obtener acceso a las propiedades de los objetos que contienen.

1 comentario: