Usuário com melhor resposta
Recuperar Item de lista pelo Guid

Pergunta
-
Olá galera!
estou tentando recuperar um item de lista, e para identifica-lo tenho o seu guid.ja tentei usar o método
SPListItem listItem = list.GetItemByUniqueId(guid);
mas isso me retorna o seguinte erro:
value does not fall within the expected range.
alguem pode me ajudar a recuperar esse item pelo seu guid?
Respostas
-
A melhor solução que vejo é alterar o workflow como eu falei, mas vc tem q fazer e testar. Sem alterar o fluxo não vejo forma simples.
Segue novamente o texto anterior:
Vc está usando a tarefa "Iniciar Processo de Aprovação"? Se sim, você pode customizar este processo (subfluxo) e no comportamento da tarefa, na seção "Quando uma Tarefa está Pendente", crie uma variável no workflow para armazenar o ID (ou GUID no seu caso) do item atual, que no caso seria a própria tarefa. Depois no email deste mesmo processo envie a variável e veja se o valor dela foi o correto. Não testei aqui, mas pode ser viável.
Atenciosamente,
Fabian André Gehrke
MCITP e MCPD SharePoint 2010
http://fabiangehrke.com.br- Marcado como Resposta Fabian André GehrkeMicrosoft employee, Moderator terça-feira, 7 de maio de 2013 22:02
Todas as Respostas
-
-
-
-
ja foste a lixeira? talvez esteja la.
e tambem valida na lixeira do Site.
André Lage Microsoft SharePoint, CRM Consultant
Blog:http://aaclage.blogspot.com
Codeplex:http://spupload.codeplex.com/http://simplecamlsearch.codeplex.com/ -
-
Talvez tenha nao tenha entendido o pedido,
Atraves das respostas eu entendo que essa tarefa foi apagada, esta correcto?
Se sim, talvez podera encontrar a task no recycling bin, ou esta a procurar da task na workflow history list?
André Lage Microsoft SharePoint, CRM Consultant
Blog:http://aaclage.blogspot.com
Codeplex:http://spupload.codeplex.com/http://simplecamlsearch.codeplex.com/ -
Não, essa tarefa acabou de ser criada e estou enviando um link de um formulário de aprovação personalizado com o Guid da tarefa para que possa ser aprovado por lá. por exemplo:
http://local/form.aspx?task=d598dd73-281a-45f5-93f4-603bb34b6b5c
quando eu tento buscar esse item por seu Guid (sim eu já comparei e essa é o mesmo Guid da tarefa) utilizando o seguinte método:
SPListItem listItem = list.GetItemByUniqueId(guid);
Obs: "guid" é um Guid criado a partir da quarystring.
é retornado o seguinte erro: value does not fall within the expected range.
o que eu preciso é recuperar essa Task por sua Guid e não está dando certo, se alguem tiver outro modo de recuperar que de certo, eu agradeceria muito!
-
-
-
-
David,
Estou tentando adivinhar o que vc está fazendo, para assim tentar achar uma solução que sirva. Você fez um formulário de biblioteca de formulários ao invés de customizar o formulario padrao da lista de tarefas? Se foi isso, o que vc precisou fazer que o formulário de lista não atendeu. Se não, o que foi?
Desculpe perguntar algo fora da sua dúvida, mas é pq o comportamento normal das tarefas é já ter a tarefa que está sendo aberta, não sendo necessária carregá-la via código.
Atenciosamente,
Fabian André Gehrke
MCITP e MCPD SharePoint 2010
http://fabiangehrke.com.br -
Ok, eu estou desenvolvendo uma Web Part que tem o evento de aprovar uma tarefa.
Já consegui fazer essa aprovação ta tudo certo(setando o ID da tarefa na mão), só que o único identificador para essa tarefa que eu consegui passar foi o ID da Instância, ou seja seu Guid (também tenho o ID do Item relacionado).A minha única dificuldade está em pegar essa tarefa, e não estou conseguindo recupera-la com o Guid.
-
David,
Desculpe mas prefiro entender o que está acontecendo antes de dar qualquer sugestão. Sou da ideia que as vezes posso ser mais útil ajudando de verdade do que apenas dando uma resposta.
Se quiser discutir sobre a solução, envie mais detalhes. Porque ainda não entendi o motive de vc ter criado uma web part customizada para aprovar as tarefas. Sou da ideia que quanto mais recursos nativos do SharePoint vc utilizer melhor, mas claro em algumas vezes vou precisar fazer algumas customizações. Que recurso exatamente a sua web part faz que um formulãrio InfoPath não faz? Está usando SharePoint Enterprise?
Atenciosamente,
Fabian André Gehrke
MCITP e MCPD SharePoint 2010
http://fabiangehrke.com.br -
Sim estou usando o Sharepoint Enterprise. Nessa minha Web Part os usuários atualizam o item e aprovam ou rejeitam a tarefa ao mesmo tempo. Fiz isso também pra tirar a permissão de alterar qualquer item diretamente nas listas, assim só é possível aprovar uma tarefa atribuída a esse usuário e alterar o item relacionado por essa Web Part.
Faltou algum detalhe? -
Legal, já é um começo.
A sua webpart exibe o próprio item que está executando o workflow, certo? Aí nessa tela vc vai mostrar o botão da tarefa diretamente e fazer ela ser aprovada programaticamente ou o usuário vai clicar nela e abrir? Como vc está pegando a instãncia do workflow que está rodando?
Atenciosamente,
Fabian André Gehrke
MCITP e MCPD SharePoint 2010
http://fabiangehrke.com.br -
isso, o usuário faz a aprovação pelo botão programaticamente.
eu construí esse workflow no Sharepoint Designer entao no momento da atribuição o Sharepoint envia um e-mail, nesse e-mail eu coloquei a URL da pagina que contem a Web Part com o parâmetro "ID da Instância", ou seja, o Guid está sendo enviado como parâmetro.
- Editado David Bissotto terça-feira, 7 de maio de 2013 19:37
-
Vc está recebendo o Guid ad Instância do workflow ou Guid da Tarefa? Porque vc não passa o ID do Item e o da Tarefa ao invés da instância do workflow?
Atenciosamente,
Fabian André Gehrke
MCITP e MCPD SharePoint 2010
http://fabiangehrke.com.br -
estou recebendo o Guid da task. Pois é, não tem o ID da tarefa pra poder passar, apenas o ID do Item relacionado. Além disso acho mais seguro passar um código hexadecimal do que um numero que pode ser mudado facilmente. Bom mas a essa altura se eu achasse pelo menos o ID da tarefa já estava de bom tamanho ^^
-
-
Vc está usando a tarefa "Iniciar Processo de Aprovação"? Se sim, você pode customizar este processo (subfluxo) e no comportamento da tarefa, na seção "Quando uma Tarefa está Pendente", crie uma variável no workflow para armazenar o ID (ou GUID no seu caso) do item atual, que no caso seria a própria tarefa.
Depois no email deste mesmo processo envie a variável e veja se o valor dela foi o correto.
Não testei aqui, mas pode ser viável.
Atenciosamente,
Fabian André Gehrke
MCITP e MCPD SharePoint 2010
http://fabiangehrke.com.br -
Tudo bem, mas a minha duvida é como recuperar um item por seu Guid, ja vi um monte de formas na internet mas nenhuma deu certo, e o método:
SPListItem listItem = list.GetItemByUniqueId(guid);
retorna:value does not fall within the expected range.
sendo que eu estou passando um Guid como parâmetro.
- Editado David Bissotto terça-feira, 7 de maio de 2013 20:22
-
Aparentemente vc está pegando o GUID errado, por isso está dando a mensagem que ele não existe.
Viu as perguntas que fiz? Acredito que respondendo a elas poderemos ter mais luz no fim do túnel. Olhei rapidamente e não encontrei o GUID da tarefa que está sendo criada, por isso quero saber como vc fez. Pq se pegou do contexto o GUID é o da instância.
Atenciosamente,
Fabian André Gehrke
MCITP e MCPD SharePoint 2010
http://fabiangehrke.com.br -
-
Não sei como vc comparou, não fiz isso para comprovar, mas está estranho. Imagina que um workflow pode ter várias tarefas, para cada uma ele vai gerar um GUID diferente. Como que pode ter ficado igual ao da instância? Ou melhor, como vc irá pegar o GUID das tarefas seguintes do Workflow? Se o que vc disse está correto, irá funcionar apenas para a primeira tarefa, mas verifique bem.
Atenciosamente,
Fabian André Gehrke
MCITP e MCPD SharePoint 2010
http://fabiangehrke.com.br -
-
Como vc está testando que é um novo GUID cada vez? Está executando 1 workflow com várias tarefas, aí vc confere? Ou está executando vários workflows com 1 tarefa e aí conferindo?
Atenciosamente,
Fabian André Gehrke
MCITP e MCPD SharePoint 2010
http://fabiangehrke.com.br -
um workflow com várias tarefas a cada aprovação eu vejo a URL enviada e comparo na URL da tarefa(item da lista de tarefas) e são as mesmas
- Editado David Bissotto terça-feira, 7 de maio de 2013 21:02
-
-
-
A melhor solução que vejo é alterar o workflow como eu falei, mas vc tem q fazer e testar. Sem alterar o fluxo não vejo forma simples.
Segue novamente o texto anterior:
Vc está usando a tarefa "Iniciar Processo de Aprovação"? Se sim, você pode customizar este processo (subfluxo) e no comportamento da tarefa, na seção "Quando uma Tarefa está Pendente", crie uma variável no workflow para armazenar o ID (ou GUID no seu caso) do item atual, que no caso seria a própria tarefa. Depois no email deste mesmo processo envie a variável e veja se o valor dela foi o correto. Não testei aqui, mas pode ser viável.
Atenciosamente,
Fabian André Gehrke
MCITP e MCPD SharePoint 2010
http://fabiangehrke.com.br- Marcado como Resposta Fabian André GehrkeMicrosoft employee, Moderator terça-feira, 7 de maio de 2013 22:02
-
-