Como obter uma lista filtrada por uma View no SharePoint via CSOM

 Como obter os dados do SharePoint via Client Side Object Model com Lists e View no SharePoint 2013

Problemas do CSOM para obter Views no SharePoint 2013
Hoje tive um problema interessante. Tentei obter os dados de uma lista do SharePoint através de uma aplicação desktop via CSOM (Client Side Object Model). Mas não funcionou (do not work!). Simplesmente vieram todos os dados, não executando a filtragem que eu fiz.
Para resolver isto, é necessário dar Load na lista, nas views da lista e nos ítens que serão obtidos.

Além disto, quando for pegar a Query da View, lembre-se de colocar as Tags <View>  e <Query> para funcionar.

O exemplo abaixo mostra como isto funciona.


// Obtem os dados da lista
myList = ....

// Criação da Query
CamlQuery caml = new CamlQuery();
caml.ViewXml = string.Format("<View><Query>{0}</Query></View>", myList.Views[0].ViewQuery),

// Obtenção dos ítens
ListItemCollection allItems = SelectedList.GetItems(caml);
SharePointClientContext.Load(SelectedList);
SharePointClientContext.Load(SelectedList.Views);
SharePointClientContext.Load(allItems);
SharePointClientContext.ExecuteQuery();


Funcionou para você?
Deixe seus comentários.

Como fazer listas cascateadas com lookups no SharePoint 2013

How to Implement SharePoint Cascaded Lookup Field

Implementando relação pai-filho em listas no SharePoint 2013

Este é um problema comum com solução simples que vale a pena ser documentado.
Vou seguir esta explicação com um exemplo igualmente comum:

  • Lista de Estados: Eu tenho uma lista de estados. ex.: Rio de Janeiro, São Paulo, ...
  • Lista de Cidades: Eu tenho uma lista de cidades. ex.: Brasilia, Campo Grande, ...
  • Lista de Cadastro: Eu tenho uma lista com colunas Lookups para 'Estados' e para 'Cidades'.
    • A medida que forem escolhidas os Estados, as cidades devem ser filtradas automaticamente.
    • Uma coluna chamada 'Pai' refere-se aos Estados
    • Uma coluna chamada 'Filho' refere-se às Cidades

Esquema com as listas SharePoint relaacionadas através de Lookup

Para solucionar esta questão utilizei JQuery.
Esta solução foi testada com sucesso no SharePoint 2007, SharePoint 2010 e SharePoint 2013, seja a versão services ou server. As telas a seguir mostram exemplos no SharePoint 2013, mas para fazer nas outras versões o procedimento é semelhante.

1 - Baixe o JQuery

Entre no site http://jquery.com/ e baixe o JQuery.
Baixe também o JQuery customizado para o SharePoint. O JQuery Library for SharePoint Web Services pode ser encontrado no link http://spservices.codeplex.com/releases/view/42672

2 - Adicione os arquivos do JQuery ao SharePoint



Guarde em alguma biblioteca do SharePoint o JQuery, o JQuery do SPServices Minified e o JQuery do SPServices completo. Eu escolhi a biblioteca SiteAssets como repositório para estes arquivos.
Assegure-se de manter estes arquivos com permissão de leitura para todos os usuários.

3 - Adicione a referencia do JQuery à sua MasterPage

Adicione o seguinte script à sua Master Page, preferenciamente, antes do final da tag </head>
...
<!-- JQUERY CONNECTIONS -->
<script language="javascript" type="text/javascript" src="/SiteAssets/jquery-1.11.0.js"></script>
<script language="javascript" type="text/javascript" src="/SiteAssets/jquery.SPServices-2014.01.min.js"></script>
<script language="javascript" type="text/javascript" src="/SiteAssets/jquery.SPServices-2014.01.js"></script>
<!-- JQUERY CONNECTIONS -->
</head>
...


Adicionando referencias do JQuery ao SharePoint


4 - Alterando a lista de Cadastro

Na lista de cadastro, altere o 'Novo Formulário Padrão', como segue a imagem.
Alterando o Novo Formulário Padrão do SharePoint através da Ribbon

 5 - Adicionando uma WebPart de Script

 Antes do formulário Padrão adicione uma WebPart de Edição de Scripts. Ela será responsável por fazer tal funcionalidade ter sucesso.


6 - Adicione o script JScript/JavaScript criado com JQuery

<script language="javascript" type="text/javascript">
$(document).ready(function(){

$().SPServices.SPCascadeDropdowns({
relationshipList: "Cidades",
relationshipListParentColumn: "Estado",
relationshipListChildColumn: "Title",
parentColumn: "Pai",
childColumn: "Filho",
debug: true
});

});
</script>

7 - Verificando

Por fim, verifique se está funcionando.
Bastando clicar no pai e o filho deverá realizar a filtragem necessária, automaticamente.
Repita o processo 4 para a página 'Formulário de Edição Padrão', para funcionar também na página de edição.

Lista mostrando a relação pai-filho funcionando com Lookups Cascateados



Relação de campos, nomes internos e IDs do SharePoint




Display Name Internal Name GUID Type
ID ID {1d22ea11-1e32-424e-89ab-9fedbadb6ce1} Counter
Content Type ID ContentTypeId {03e45e84-1992-4d42-9116-26f756012634} ContentTypeId
Content Type ContentType {c042a256-787d-4a6f-8a8a-cf6ab767f12d} Text
Created Created {8c06beca-0777-48f7-91c7-6da68bc07b69} DateTime
Created By Author {1df5e554-ec7e-46a6-901d-d85a3881cb18} User
Modified Modified {28cf69c5-fa48-462a-b5cd-27b6f9d2bd5f} DateTime
Modified By Editor {d31655d1-1d5b-4511-95a1-7a09e9b75bf2} User
Has Copy Destinations _HasCopyDestinations {26d0756c-986a-48a7-af35-bf18ab85ff4a} Boolean
Copy Source _CopySource {6b4e226d-3d88-4a36-808d-a129bf52bccf} Text
Approval Status _ModerationStatus {fdc3b2ed-5bf2-4835-a4bc-b885f3396a61} ModStat
Approver Comments _ModerationComments {34ad21eb-75bd-4544-8c73-0e08330291fe} Note
URL Path FileRef {94f89715-e097-4e8b-ba79-ea02aa8b7adb} Lookup
Path FileDirRef {56605df6-8fa1-47e4-a04c-5b384d59609f} Lookup
Modified Last_x0020_Modified {173f76c8-aebd-446a-9bc9-769a2bd2c18f} Lookup
Created Created_x0020_Date {998b5cff-4a35-47a7-92f3-3914aa6aa4a2} Lookup
File Size File_x0020_Size {8fca95c0-9b7d-456f-8dae-b41ee2728b85} Lookup
Item Type FSObjType {30bb605f-5bae-48fe-b4e3-1f81d9772af9} Lookup
Effective Permissions Mask PermMask {ba3c27ee-4791-4867-8821-ff99000bac98} Computed
ID of the User who has the item Checked Out CheckedOutUserId {a7b731a3-1df1-4d74-a5c6-e2efba617ae2} Lookup
Is Checked out to local IsCheckedoutToLocal {cfaabd0f-bdbd-4bc2-b375-1e779e2cad08} Lookup
Checked Out To CheckoutUser {3881510a-4e4a-4ee8-b102-8ee8e2d0dd4b} User
Name FileLeafRef {8553196d-ec8d-4564-9861-3dbe931050c8} File
Unique Id UniqueId {4b7403de-8d94-43e8-9f0f-137a3e298126} Lookup
ProgId ProgId {c5c4b81c-f1d9-4b43-a6a2-090df32ebb68} Lookup
ScopeId ScopeId {dddd2420-b270-4735-93b5-92b713d0944d} Lookup
Virus Status VirusStatus {4a389cb9-54dd-4287-a71a-90ff362028bc} Lookup
Checked Out To CheckedOutTitle {9d4adc35-7cc8-498c-8424-ee5fd541e43a} Lookup
Check In Comment _CheckinComment {58014f77-5463-437b-ab67-eec79532da67} Lookup
Checked Out To LinkCheckedOutTitle {e2a15dfd-6ab8-4aec-91ab-02f6b64045b0} Computed
Document Modified By Modified_x0020_By {822c78e3-1ea9-4943-b449-57863ad33ca9} Text
Document Created By Created_x0020_By {4dd7e525-8d6b-4cb4-9d3e-44ee25f973eb} Text
File Type File_x0020_Type {39360f11-34cf-4356-9945-25c44e68dade} Text
HTML File Type HTML_x0020_File_x0020_Type {0c5e0085-eb30-494b-9cdd-ece1d3c649a2} Text
Source Url _SourceUrl {c63a459d-54ba-4ab7-933a-dcf1c6fadec2} Text
Shared File Index _SharedFileIndex {034998e9-bf1c-4288-bbbd-00eacfc64410} Text
Edit Menu Table Start _EditMenuTableStart {3c6303be-e21f-4366-80d7-d6d0a3b22c7a} Computed
Edit Menu Table End _EditMenuTableEnd {2ea78cef-1bf9-4019-960a-02c41636cb47} Computed
Name LinkFilenameNoMenu {9d30f126-ba48-446b-b8f9-83745f322ebe} Computed
Name LinkFilename {5cc6dc79-3710-4374-b433-61cb4a686c12} Computed
Type DocIcon {081c6e4c-5c14-4f20-b23e-1a71ceb6a67c} Computed
Server Relative URL ServerUrl {105f76ce-724a-4bba-aece-f81f2fce58f5} Computed
Encoded Absolute URL EncodedAbsUrl {7177cfc7-f399-4d4d-905d-37dd51bc90bf} Computed
Name BaseName {7615464b-559e-4302-b8e2-8f440b913101} Computed
File Size FileSizeDisplay {78a07ba4-bda8-4357-9e0f-580d64487583} Computed
Property Bag MetaInfo {687c7f94-686a-42d3-9b67-2782eac4b4f8} Lookup
Level _Level {43bdd51b-3c5b-4e78-90a8-fb2087f71e70} Integer
Is Current Version _IsCurrentVersion {c101c3e7-122d-4d4d-bc34-58e94a38c816} Boolean
Select SelectTitle {b1f7969b-ea65-42e1-8b54-b588292635f2} Computed
Select SelectFilename {5f47e085-2150-41dc-b661-442f3027f552} Computed
Edit Edit {503f1caa-358e-4918-9094-4a2cdc4bc034} Computed
owshiddenversion owshiddenversion {d4e44a66-ee3a-4d02-88c9-4ec5ff3f4cd5} Integer
UI Version _UIVersion {7841bf41-43d0-4434-9f50-a673baef7631} Integer
Version _UIVersionString {dce8262a-3ae9-45aa-aab4-83bd75fb738a} Text
Instance ID InstanceID {50a54da4-1528-4e67-954a-e2d24f1e9efb} Integer
Order Order {ca4addac-796f-4b23-b093-d2a3f65c0774} Number
GUID GUID {ae069f25-3ac2-4256-b9c3-15dbc15da0e0} Guid
Workflow Version WorkflowVersion {f1e020bc-ba26-443f-bf2f-b68715017bbc} Integer
Workflow Instance ID WorkflowInstanceID {de8beacf-5505-47cd-80a6-aa44e7ffe2f4} Guid
Source Version (Converted Document) ParentVersionString {bc1a8efb-0f4c-49f8-a38f-7fe22af3d3e0} Lookup
Source Name (Converted Document) ParentLeafName {774eab3a-855f-4a34-99da-69dc21043bec} Lookup
Title Title {fa564e0f-0c70-4ab9-b863-0177e6ddd247} Text
Template Link TemplateUrl {4b1bf6c6-4f39-45ac-acd5-16fe7a214e5e} Text
Html File Link xd_ProgID {cd1ecb9f-dd4e-4f29-ab9e-e9ff40048d64} Text
Is Signed xd_Signature {fbf29b2d-cae5-49aa-8e0a-29955b540122} Boolean
Merge Combine {e52012a0-51eb-4c0c-8dfb-9b8a0ebedcb6} Computed
Relink RepairDocument {5d36727b-bcb2-47d2-a231-1f0bc63b7439} Computed

Como criar um EventHandler que altera as permissões do próprio item

Criando um EventHandler que altere as permissões do próprio item do SharePoint

Eu pensei que fosse mais simples. Até parece simples, mas quando vc dá o BreakRoleInheritance o SharePoint exige que se tenha uma permissão maior. Assim, se um usuário comum tentar usar, não funciona.

Uma solução óbvia para isto é usar o Runwithelevated que também não funciona. Porque ele eleva o privilégio autorizando a execução desta tarefa. Mas, como está num EventHandler, o seu contexto já está fixado no próprio usuário. Então, o BreakRoleInheritance com o Runwithelevated retiraria a permissão para a execução do próprio evento. Então não funciona.

Se tentar, terá o seguinte erro:

"Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

ou melhor

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) at Microsoft.SharePoint.SPGlobal.HandleUnauthorizedAccessException(UnauthorizedAccessException ex) at Microsoft.SharePoint.Library.SPRequest.UpdateRoleAssignment(String bstrUrl, Guid& pguidScopeId, Int32 lPrincipalID, Object& pvarArrIdRolesToAdd, Object& pvarArrIdRolesToRemove) at Microsoft.SharePoint.SPRoleAssignmentCollection.UpdateAssignment(Int32 principalId, SPRoleDefinitionBindingCollection bindings, Boolean addOnly) at Microsoft.SharePoint.SPRoleAssignmentCollection.Add(SPRoleAssignment roleAssignment) at MYDLL.MYDLLHandler.ItemAdded(SPItemEventProperties properties)

Para resolver esta questão, tem que fazer algumas coisas.
O evento possui o properties que possui o ListItem, etc. Você deve ignorar isto e criar um novo ListItem, em um novo contexto. E esta criação deve estar com privilegio elevado.
Após isto, a função BreakRoleInheritance também deve estar com contexto elevado. Veja um exemplo a seguir:


public override void ItemAdded(SPItemEventProperties properties)
{

base.ItemAdded(properties);
SPSecurity.RunWithElevatedPrivileges(delegate()
{

Guid MywebGuid = properties.Web.ID;
Guid MysiteGuid = properties.Site.ID;

this.Web = new SPSite(MysiteGuid).OpenWeb(MywebGuid);
this.ListItem = Web.Lists[properties.ListId].GetItemById(properties.ListItemId);
this.CurrentUserId = properties.CurrentUserId;
ListItem.BreakRoleInheritance(false);
});

}

SharePoint_Config_log gigante

Log do SharePoint com crescimento exagerado

Hoje me atentei ao servidor de banco de dados e notei que o SharePoint estava consumindo uma quantidade muito grande de recursos.O SharePoint_Config_log.ldf estava consumindo quase 70 GB de espaço.

Executei uma query simples para limpar esse monte de LOG. Com a linha de comando abaixo reduzi de 70GB para 1MB

USE [master]
GO
ALTER DATABASE[SharePoint_Config] SET RECOVERY SIMPLE WITH NO_WAIT
GO
USE [SharePoint_Config] 
GO
DBCC SHRINKFILE ('SharePoint_Config_Log')
GO
 
Executei esta linha de comando com o SharePoint ativo com vários sites em produção e não tive qualquer problema.