Usuário com melhor resposta
Infopath 2007 - Como capturar o login/nome do usuário logado no wss

Pergunta
-
Olá Pessoal !
Criei um Formulário no Infopath 2007 e o publiquei como um Document Library no wss.
Ao cadastrar um novo item na biblioteca, abre o formulário infopath para inclusão, no momento em que o formulário infopath é aberto para inclusão, como eu faria para trazer em um campo texto do formulário o nome ou o login do usuário que está logado no wss, ou seja o usuário que está cadastrando o item na biblioteca ?
Alguém já passou por isso ?
Desde já agradeço a ajuda !
Obrigada,
Cintia
Respostas
-
Olá Cintia,
Vou tentar lhe ajudar baseado em suas dúvidas......
CintiaYatabe wrote: A página GetUser.aspx é para ser gravada fisicamente na pasta ‘C:\Program Files\Common Files\microsoft shared\Web Server Extensions\12\TEMPLATE\LAYOUTS’ ?
Sim, essa página é gravada no pasta _layouts do servidor WSS, ao que parece, o código de retorno (xml), não apareceu no post anterior, acho que ele retirou os caracteres xml. O código da página GetUser.aspx é o seguinte:
Code Snippetprotected void Page_Load(object sender, EventArgs e)
{
SPWeb _current = SPControl.GetContextWeb(Context);
if (_current != null)
{
// Esse deve ser o XML de retorno do Page_Load, não apareceu no post anterior, troque os caracteres '[' e ']' por '<' e '>'
Response.Write("[User Name=\"" + _current.CurrentUser.Name + "\" LoginName=\"" + _current.CurrentUser.LoginName + "\" /]");
}
}
CintiaYatabe wrote: No menu do infopath, eu cliquei em ‘Tools/Programming/Loading Event’, ele abre o visual Studio tools for applications, mas não encontrei a função init() , encontrei função ‘FormEvents_Loading’ ...... só se eu tentar utilizar esta função ....
Mais uma dúvida, como eu faria para atribuir o conteúdo da variável oCurrentUser em um campo texto do formulário no momento em que o mesmo está sendo aberto ?
Pode utilizar esta função mesmo, o importante é que a mesma seja executada no Load do formulário.
Quando a atualizar o valor do campo em um controle do infopath, é necessário atualizar o Nó referente aquele controle, você deve ter reparado que cada controle do seu formulário infopath é vinculado a um atributo ou elemento XML que armazena o seu valor.
Tem um código que utilizo para isso, veja se pode lhe ajudar....
Code Snippetfunction XDocument::OnLoad(eventObj)
{// Esta variavel vai receber o XML do novo documento que você esta criando quando o formulário for aberto, ou o XML que você está editando.
var g_oDataDom = XDocument.DOM;// Para atualizar qualquer campo, basta que você utilize um XPath convencional para selecionar o nó e atribuir um valor para ele, mais ou mesmo desta forma.
g_oDataDom.selectSingleNode("my:No1").value = 'Valor de Teste';
// Desta forma, o campo vinculado a este nó XML vai aparecer o valor "Valor de Teste". Faça um teste antes de mexer com o MSXML.
}Espero que consiga,
Abraços.
André
- Sugerido como Resposta Andre Castro segunda-feira, 11 de janeiro de 2010 11:52
- Marcado como Resposta Hezequias VasconcelosModerator quinta-feira, 28 de junho de 2012 00:50
-
Na verdade há um modo mais simples de fazê-lo no WSS 3.0 com infopath 2007.
E não precisa de código.
Está bem detalhada no link a seguir:
http://blogs.microsoft.co.il/blogs/itaysk/archive/2007/04/05/InfoPath-_2D00_-Get-the-current-user-without-writing-code.aspx- Marcado como Resposta Hezequias VasconcelosModerator quinta-feira, 28 de junho de 2012 00:50
Todas as Respostas
-
Olá Cintia,
A algum tempo atrás eu trabalhei com uma solução deste tipo, e a necessidade é bem semelhante a sua, vou tentar lhe explicar como resolvemos e te passar uns códigos, qualquer coisa me mande um e-mail.
Bom, o formulário era em Microsoft Office Infopath 2003, utilizando o WSS 2. O código do formulário era todo em código cliente (Javascript), conseguimos resolver isso da seguinte maneira.
Criamos um arquivo chamado GetUser.aspx, dentro deste arquivo, existia o seguinte código no Page_Load.
Code Snippetprotected void Page_Load(object sender, EventArgs e)
{
SPWeb _current = SPControl.GetContextWeb(Context);
if (_current != null)
{
Response.Write("");
}
}Vale ressaltar que a página em questão não havia nenhuma TAG HTML, somente a diretiva .
Ai dentro do infopath, da função init(), que é executada na abertura do formulário, pedimos que o seguinte código javascript fosse executado.
Code Snippetvar oCurrentUser = new Object();
oCurrentUser.Name = '';
oCurrentUser.LoginName = '';
var oXmlUser = new ActiveXObject("Msxml2.DomDocument.5.0");
oXmlUser.async = false;
oXmlUser.load("/_layouts/GetUser.aspx"));if (null != oXmlUser.documentElement)
{
oUser = oXmlUser.documentElement.selectSingleNode("//User");
oCurrentUser.Name = oUser.getAttribute("Name");
oCurrentUser.LoginName = oUser.getAttribute("LoginName");
return oCurrentUser;
}
else
return null;Tinhamos um global oCurrentUser que pegava o usuário atráves de uma chamada XML a página GetUser.aspx (Por isso a mesma não tinha nenhum código HTML, pra não impactar nesta chamada.
Esta foi a forma como fizemos com Office 2003 e WSS 2.0, não tenho certeza, mais acho que não existe nenhuma forma melhor no Office 2007.
Um Abraço,
Espero que lhe ajude....
-
Olá André !
Obrigada pelo retorno! Seu post me ajudou bastante, nunca teria pensado em uma solução assim ....
Estou utilizando o infopath 2007 e wss 3.0, ainda sou iniciante em sharepoint, conheço o básico, e muitas vezes me sinto um pouco perdida sobre o que utilizar em determinadas situações ...
Fiquei com algumas dúvidas ....
-> Página ‘GetUser.aspx’
A página GetUser.aspx é para ser gravada fisicamente na pasta ‘C:\Program Files\Common Files\microsoft shared\Web Server Extensions\12\TEMPLATE\LAYOUTS’ ?
O Código da página seria assim ?
<%@ Page language="C#"%><%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Assembly Name="Microsoft.SharePoint.ApplicationPages" %>
<script language="C#" runat="server">
protected void Page_Load(object sender, EventArgs e)
{
SPWeb _current = SPControl.GetContextWeb(Context);
if (_current != null)
{
Response.Write("");
}
}
</script>
-> Evento init()
No menu do infopath, eu cliquei em ‘Tools/Programming/Loading Event’, ele abre o visual Studio tools for applications, mas não encontrei a função init() , encontrei função ‘FormEvents_Loading’ ...... só se eu tentar utilizar esta função ....
Mais uma dúvida, como eu faria para atribuir o conteúdo da variável oCurrentUser em um campo texto do forumulário no momento em que o mesmo está sendo aberto ?
Mais uma vez obrigada !
Abraços!
Cintia
-
Olá Cintia,
Vou tentar lhe ajudar baseado em suas dúvidas......
CintiaYatabe wrote: A página GetUser.aspx é para ser gravada fisicamente na pasta ‘C:\Program Files\Common Files\microsoft shared\Web Server Extensions\12\TEMPLATE\LAYOUTS’ ?
Sim, essa página é gravada no pasta _layouts do servidor WSS, ao que parece, o código de retorno (xml), não apareceu no post anterior, acho que ele retirou os caracteres xml. O código da página GetUser.aspx é o seguinte:
Code Snippetprotected void Page_Load(object sender, EventArgs e)
{
SPWeb _current = SPControl.GetContextWeb(Context);
if (_current != null)
{
// Esse deve ser o XML de retorno do Page_Load, não apareceu no post anterior, troque os caracteres '[' e ']' por '<' e '>'
Response.Write("[User Name=\"" + _current.CurrentUser.Name + "\" LoginName=\"" + _current.CurrentUser.LoginName + "\" /]");
}
}
CintiaYatabe wrote: No menu do infopath, eu cliquei em ‘Tools/Programming/Loading Event’, ele abre o visual Studio tools for applications, mas não encontrei a função init() , encontrei função ‘FormEvents_Loading’ ...... só se eu tentar utilizar esta função ....
Mais uma dúvida, como eu faria para atribuir o conteúdo da variável oCurrentUser em um campo texto do formulário no momento em que o mesmo está sendo aberto ?
Pode utilizar esta função mesmo, o importante é que a mesma seja executada no Load do formulário.
Quando a atualizar o valor do campo em um controle do infopath, é necessário atualizar o Nó referente aquele controle, você deve ter reparado que cada controle do seu formulário infopath é vinculado a um atributo ou elemento XML que armazena o seu valor.
Tem um código que utilizo para isso, veja se pode lhe ajudar....
Code Snippetfunction XDocument::OnLoad(eventObj)
{// Esta variavel vai receber o XML do novo documento que você esta criando quando o formulário for aberto, ou o XML que você está editando.
var g_oDataDom = XDocument.DOM;// Para atualizar qualquer campo, basta que você utilize um XPath convencional para selecionar o nó e atribuir um valor para ele, mais ou mesmo desta forma.
g_oDataDom.selectSingleNode("my:No1").value = 'Valor de Teste';
// Desta forma, o campo vinculado a este nó XML vai aparecer o valor "Valor de Teste". Faça um teste antes de mexer com o MSXML.
}Espero que consiga,
Abraços.
André
- Sugerido como Resposta Andre Castro segunda-feira, 11 de janeiro de 2010 11:52
- Marcado como Resposta Hezequias VasconcelosModerator quinta-feira, 28 de junho de 2012 00:50
-
Na verdade há um modo mais simples de fazê-lo no WSS 3.0 com infopath 2007.
E não precisa de código.
Está bem detalhada no link a seguir:
http://blogs.microsoft.co.il/blogs/itaysk/archive/2007/04/05/InfoPath-_2D00_-Get-the-current-user-without-writing-code.aspx- Marcado como Resposta Hezequias VasconcelosModerator quinta-feira, 28 de junho de 2012 00:50