none
Infopath 2007 - Como capturar o login/nome do usuário logado no wss RRS feed

  • 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

    sexta-feira, 16 de janeiro de 2009 13:01

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 Snippet

    protected 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 Snippet

    function 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é

    terça-feira, 20 de janeiro de 2009 13:56
  • 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
    quarta-feira, 13 de janeiro de 2010 19:09

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 Snippet

    protected 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 Snippet

     var 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....

    segunda-feira, 19 de janeiro de 2009 14:37
  • 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

    terça-feira, 20 de janeiro de 2009 13:26
  • 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 Snippet

    protected 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 Snippet

    function 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é

    terça-feira, 20 de janeiro de 2009 13:56
  • 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
    quarta-feira, 13 de janeiro de 2010 19:09