This task is currently locked by a running workflow and cannot be edited
Olá! 🙂
Esse post bem rapidinho… O Workflow do SharePoint “trava” as tarefas do tipo de conteúdo “WorkflowTask” para assegurar que a tarefa não seja editada enquanto o processo do Workflow aconcete. E depois que o Workflow termina de rodar, ele tira essa “trava” para que a tarefa seja editável novamente.
Ok! Comportamento esperado… mas, no decorrer do projeto, decidimos que as tarefas não seriam mais utilizadas em um Workflow e passariam as ser simplesmente tarefas atualizadas por outros mecanismos como: Forms Customizados e Event Receivers. Só que nesse caso específico a tarefa em questão herdava o Content Type de “WorkflowTasks” e então eu mesmo preciso tirar essa “trava” que o workflow faz automaticamente.
NOTA: Se sua tarefa herda do Content Type de “Tasks”, isso não é necessário.
Quando for atualizar uma tarefa que herda da “WorkflowTasks” atualize também a coluna do Workflow e assim a tarefa será editável.
item[Microsoft.SharePoint.SPBuiltInFieldId.WorkflowVersion] = 1;
item.Update(); //SPListItem
Pronto, o item será atualizado sem que a mensagem de erro seja apresentada.
Abraço!
WebPart ‘Navegador da Organização’ carrega vazio em sites fora da WebApplication de MySites
Olá!
Cenário:
Eu sou MUITO fã dessa WebPart nativa do SharePoint.
Navegador da Organização (Organization Browser):
Ela roda nas páginas de perfis ao configurar o servidor de User Profile do SharePoint. Mas, e se quisermos utilizar essa webpart em nossas aplicações e sites? Good idea! Hã?!
Se o site que estiver tentando adicionar a webpart de Navegador da Organização estiver na mesma WebApplication do site de MySites, ok, irá funcionar.
Mas e se o site estiver em uma WebApplication diferente? Bom aí precisamos fazer algumas configurações, pois a WebPart irá carregar “vazia”. Se você mudar para “HTML View” perceberá que a hierarquia foi montada, mas o SilverLight View não renderiza.
ERRO:
Não chega a apresentar uma mensagem de erro, apenas a webpart abre “vazia”. Sem renderizar a hierarquia.
SOLUÇÃO:
Precisamos criar um arquivo XML e copiar no root das WebApplication no IIS.
Então, vamos lá. Crie o arquivo ClientAccessPolicy.xml similar a este:
<?xml version="1.0" encoding="utf-8" ?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="*" />
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true" />
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
NOTA: você definir apenas domínio do seu site, caso não queira liberar todas uri’s (*).
Após criar o arquivo, adicione o arquivo no root da WebApplication do MySites e da WebApplication onde está rodando a webpart (C:\inetpub\wwwroot\wss\VirtualDirectories).
Pronto! Isso deve resolver e a webpart agora irá renderizar corretamente mesmo rodando fora da WebApplication que roda o MySites.
Abraço!
Bancos de Conteúdo do SharePoint em modo “Suspect”
Olá!
Cenário:
Do dia pra noite a Central Administration do meu SharePoint parou de funcionar. Ao acessar a url da minha Central Admin, estava mostrando página não encontrada (HTTP Error 404).
Verifiquei o IIS, e estava tudo funcionando. Serviço iniciado e os diretórios do IIS, até então, tudo normal. Então vamos verificar os serviços do SQL e seus respectivos bancos de conteúdo.
ERRO:
Para minha surpresa e constatação do problema, o banco da minha Central Administration estava em modo “Suspect”.
SOLUÇÃO:
Primeiro, certifique-se de realizar um backup/cópia dos arquivos do seu banco de conteúdo antes de realizar as tarefas a seguir, pois iremos realizar tarefas de manutenção na base que podem corromper a mesma.
Feito isso, realize os comandos abaixo no SQL Management Studio para realizar as tarefas de reparo na base.
Use master
–Verique se o banco de dados de conteúdo tem algum problema
EXEC sp_resetstatus "WSS_AdminContent"
–Altera o banco de contéudo para colocá-lo em modo "Emergência"
ALTER DATABASE "WSS_AdminContent" SET EMERGENCY
DBCC checkdb(‘WSS_AdminContent’)
–Coloque o banco de conteúdo em modo "Single User"
ALTER DATABASE "WSS_AdminContent" SET SINGLE_USER WITH ROLLBACK IMMEDIATE
–Inicia a tarefa de reparação no banco de conteúdo e permita perda de dados
DBCC CheckDB(‘WSS_AdminContent’,REPAIR_ALLOW_DATA_LOSS)
–Volte o banco de conteúdo para modo "Multi-User"
ALTER DATABASE "WSS_AdminContent" SET MULTI_USER
–Certifique-se que o banco de conteúdo foi resetado
EXEC sp_resetstatus ‘WSS_AdminContent’
Execute um iisreset caso necessário e acesse novamente a Central Administration.
Abraço!
PowerPivot: The referenced file is not allowed on this page.
Olá!
Cenário:
Depois de instalar e configurar o PowerPivot para SharePoint 2010, tentei utilizar o PowerPivot Gallery para exibir as planilhas no SharePoint de uma forma mais interativa. Afinal, isso é nativo da funcionalidade. 😉
Mas, ao tentar utilizar esse recurso, algo estava faltando, pois é apresentado um erro ao acessar a página. Vejam na seção abaixo.
ERRO:
PowerPivot: The referenced file is not allowed on this page.
Pelo erro, foi fácil supor que algo estava faltando no web.config.
SOLUÇÃO:
E como suspeitei, estava faltando uma entrada nos SafeControls do web.config do SharePoint. Após adicionar a entrada, a página carregou normalmente.
<SafeControl Src="~/_layouts/powerpivot/*" IncludeSubFolders="True" Safe="True" AllowRemoteDesigner="True" SafeAgainstScript="True" />
Abraço!
Erros comuns ao configurar Serviço de Busca do SharePoint 2010
Olá!
Cenário:
Post rápido com dois erros comuns na configuração do serviço de busca (Search) do SharePoint 2010.
Antes de se descabelar, percebam que as soluções desses dois erros são bem simples.
ERRO 1:
CoreResultsWebPart::OnInit: Exception initializing: System.NullReferenceException: Referência de objeto não definida para uma instância de um objeto. em Microsoft.Office.Server.Search.WebControls.CoreResultsWebPart.SetPropertiesOnQueryReader() em Microsoft.Office.Server.Search.WebControls.CoreResultsWebPart.OnInit(EventArgs e)
Se procurar no ULS do SharePoint poderá encontrar esse erro, quando estiver configurando o serviço de busca.
SOLUÇÃO 1:
Bem simples! Dê um IISRESET.
Como você acabou de configurar parte do serviço e o SharePoint já havia carregado os assemblies, agora precisamos fazer com que ele atualizar os assemblies.
ERRO 2:
Error: Access to the path ‘Global\Microsoft.SharePoint.SPIisProvisioningLock’ is denied
Se procurar no ULS do SharePoint poderá encontrar esse erro, quando estiver configurando o serviço de busca.
SOLUÇÃO 2:
Bem simples também! Reinicie os serviços de Timer (SPTimerV4) e Administration (SPAdminV4) do SharePoint.
Abraço!
Abrir Dialog em um CustomAction
Olá!
Cenário:
Neste post vou dar mais uma dica de utilização das funcionalidades nativas do SharePoint 2010.
Muitas vezes criamos links e/ou botões para abrir páginas, e muitas vezes queremos abrir essas páginas em dialogs (ou modal) do SharePoint.
Há inúmeras formas de fazer isso… mas você pode utilizar a função nativa do SharePoint 2010 para isso!
SOLUÇÃO:
Já mostrei como utilizar o Dialog em outro artigo (http://thiagottss.com.br/2010/04/25/usando-client-object-model-do-sharepoint-2010-para-melhorar-a-experincia-do-usurio-ux/), mas aqui está uma outra opção:
OpenPopUpPageWithTitle(url, callback, width, height,title);
Esse método está no core.js e internamente chama o SP.UI.ModalDialog (que mostrei no artigo acima) para abrir o link em Modal Dialog.
Aqui está um exemplo de utilização em um CustomAction:
<CommandUIHandlers>
<CommandUIHandler
Command="MeuCommand" CommandAction="javascript:OpenPopUpPageWithTitle(‘{SiteUrl}/Lists/MinhaLista/AllItems.aspx’, RefreshOnDialogClose, 600, 400,’Meu Custom Action’);" />
</CommandUIHandlers>
Abraço!
Evento RowUpdating do GridView não está disparando
Olá!
Cenário:
Esse post na verdade é uma dica (#tip).
Se você utilizar vários controles com mesmo ID nos ItemTemplate e EditTemplate, o evento de Update (Atualizar) não disparada. Você clica no botão e não acontece nada. Não há postback.
ERRO:
<asp:TemplateField HeaderText="Bla bla">
<ItemTemplate>
<asp:Label ID="lbl1" runat="server" Text='<%# Eval("Valor1") %>’ />
</ItemTemplate>
<EditItemTemplate>
<asp:Label ID=" lbl1" runat="server" Text='<%# Eval("Valor1") %>’ Visible="false" />
<asp:DropDownList ID="ddl1" runat="server" />
</EditItemTemplate>
</asp:TemplateField>
SOLUÇÃO:
Utilize Ids diferentes para cada ItemTemplate. Isso fará o Update disparar o evento de RowUpdating.
<asp:TemplateField HeaderText="Bla bla">
<ItemTemplate>
<asp:Label ID="lbl1" runat="server" Text='<%# Eval("Valor1") %>’ />
</ItemTemplate>
<EditItemTemplate>
<asp:Label ID="lbl2" runat="server" Text='<%# Eval("Valor1") %>’ Visible="false" />
<asp:DropDownList ID="ddl1" runat="server" />
</EditItemTemplate>
</asp:TemplateField>
Abraço!
#GridView #RowUpdating #event #notfiring
Bug DateTimeControl perde “estado” no postback
Olá!
Cenário:
Já me deparei com esse “bug” algumas vezes, mas não tinha encontrado solução até então.
Ao utilizar o DateTimeControl no SharePoint 2010 e realizar alguns postbacks, o controle perdia o valor já preenchido anteriormente.
Encontrei um “workaround” para esse problema… bem #bizarro por sinal rs. Confira a seguir!
SOLUÇÃO:
Basta adicionar uma condição no método que causa o postback para o selected date do controle para que ele mantenha o estado. No meu caso, usava um DropDownList para dar postback e o evento SelectedIndexChanged coloquei minha condição:
if (dtcDateTime.SelectedDate < DateTime.Today) { }
Pronto, só isso já resolve. Não precisa fazer nada dentro da condição. Agora posso fazer quantos postbacks quiser, que o controle MANTEM o estado anterior.
Abraço!