quarta-feira, 17 de agosto de 2011

Olá moçada, começo meu primeiro posto com um problema existente no Sharepoint 2010 onde acontece o seguinte...

Tenho duas listas idênticas, com o campo Título, Data Inicio e Data Fim, onde a lista 1 cria o registro idêntico na lista 2 via workflow, com isso a visualização em Gantt sempre me retorna o erro

Value does not fall within the expected range.

Se eu crio o registro diretamente na Lista 2 na mão, ele não dá esse erro, mas a partir do momento que o workflow inclui mais um item, ferra tudo e dá o mesmo erro... Lembrando que o erro acontece mesmo que TODOS os campos forem obrigatórios, e eu preencha TODOS via workflow. Parece que internamente falta algo que dá zica... .

Enfim, depois de postar a argumentação no forum MSDN o Ivan Costa achou onde está o problema...

Quando se faz a cópia pelo workflow, ele seta alguns valores diferentes em colunas internas. Ele Vasculhou o banco aqui e achou onde está essa divergências.

Existe um internal field que chama ows_Metainfo. Quando se cria o item na mão, essa coluna vem com um valor que pra mim é igual o ID, por exemplo 3;# e quando se cria pelo workflow, ele coloca mais coisa: 4;#WorkflowCreationPath:SW4e801014-35db-4b9c-b876-3198ac8cccb2;
e é ai que acontece o problema de conversão. O método Microsoft.SharePoint.SPFieldMultiColumnValue.ParseMultiColumnValue(String fieldValue, DelimiterType delimiterType) gera um erro não tratado e mata a execução

Tem também duas tabelas com informação no banco, a AllUserData e a AllDocs. Essa informação fica grava da AllDocs, na coluna MetaInfo. 0xA8A930310C0000003F000000789C0BCF2FCA4....... são 83 bytes.

Se zerar na mão essa coluna e a referente ao tamanho, MetaInfoSize imediatamente a Gantt view começa a funcionar.

Então ele abriu um chamado para o time de projetos (inclusive clique aqui para dar uma prioridade) para solucionar.

Aeeeeeeeeeeeeeee que surge nossa primeira marreta, pois o cliente não quer saber se tem bug, quer é ver o negócio funcionando.

Criei a trigger que quando o cara faz o insert na lista que eu preciso, ele dá um update na tora no campo

USE [WSS_Content]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[trigger_OnInsertDocs] ON [dbo].[AllDocs] AFTER INSERT
AS

Declare @Id uniqueidentifier

select @Id = Id from inserted

update AllDocs
set MetaInfo = null,
MetaInfoSize = 0
where Id = @Id and ListId = '9F812E8A-D45A-4BA0-B140-2C5B64B5BB72'

Lembrando que não é a solução mais encontrada nos Designers & Partners, mas resolve...

abraços!

Nenhum comentário: