Exportar (0) Imprimir
Expandir Tudo
Expandir Minimizar
1 de 4 pessoas classificaram isso como útil - Avalie este tópico

Asp :: WEB Perguntas & Respostas

WEB Perguntas & Respostas

Navegando para trás, Algo mais sobre Framesets, Referenciando nós XML e mais.

P - Como eu crio um botão na minha página que habilite ao usuário acessar a última página visitada?

R - Você pode utilizar a função history.back do JScriptâ para voltar uma página na lista de histórico, ou na lista de URLs que seu browser já visitou. Você pode usar qualquer valor negativo dentro dos parênteses. Por exemplo, history.back(-6) irá voltar seis URLs.

Você pode utilizar um formulário HTML para criar o botão - desta forma não é necessário que exista uma imagem, e será bem mais rápido. Esta solução funciona bem em browsers antigos (que suportem JavaScript), e necessita apenas de três linhas de código:

<FORM action="">
<input type="button" value="Back to Previous Page"
onClick="history.back()"> </form>

Para maiores informações sobre criação Web, visite o MSDNâ Online Web Workshop em http://msdn.microsoft.com/workshop/default.asp.

P - O Web site que estou desenvolvendo deve aparecer dentro de Framesets de outros sites , mas isto esta destruindo o efeito visual do meu site. Existe um modo de esconder os outros frames?

R - Qualquer link que una a sua página deve ser construído da seguinte maneira:

<a href="ourPages.htm" target=_top>

O atributo target=_top abre a sua página em uma janela sem o frameset de outro site ao seu redor. Você também pode utilizar target=_window para abrir uma janela adicional com suas páginas nelas sem fechar a janela original.

P - Estou utilizando um Parser para validar um documento XML e gostaria de nomear alguns nós com o atributo ID de forma que eu possa acessa-los mais tarde usando DOMDocument::nodeFromID. Aqui está a minha função JScript:

//Create a childnode under node with name as id.
function assignID2Node(xmlDoc, node, id)
{
var newAttr = xmlDoc.createAttribute("ID");
newAttr.nodeTypedValue = id;
node.attributes.setNamedItem(newAttr);
}

Mais tarde quando uso nodeFromId para procurar o nó, recebo nada. Na referência do XML, indica que para referenciar um nó com nodeFromID , você deve atribuir um nó como "ID" no schema ou DTD. Simplesmente chamar um atributo de "ID" não irá atribuir o seu tipo de dados, desta forma, ainda fico sem saber o que fazer.

Porém quando uso o seguinte:

var objXMLDOMNode = oXMLDOMDocument.selectSingleNode("descendant-or- self::*[@ID='" + idString + "']");

o browser retorna o erro:

An exception of type 'msxml2.dll:Expected token 'eof' found ':'.

descendant-orself->:<-:*[@ID='menu_0_0']' was not handled.

Este erro ocorre sempre que uso "::" no XPath.

R - Para usar o método NodeFromID do objeto DOMDocument, seu arquivo XML deve incluir uma referencia a um DTD ou a um arquivo de Schema XDR onde o atributo ID tenha um tipo de dados ID. Você também pode utilizar Schemas inline. Por exemplo, em um arquivo XDR pode existir uma sintaxe como essa:

<Schema name="yourSchema" xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="yourElement" >
<AttributeType name="ID" dt:type="id" />
ooo
</ElementType>
ooo
</Schema>

Para incluir uma referência ao arquivo XDR, você deve usar a seguinte sintaxe no seu arquivo XML:

<yourRootElement xmlns="x-schema:yourXDRFile.xml">
Ooo
</yourRootElement>

Enquanto em um arquivo DTD você deve usar:

<!ELEMENT yourElement EMPTY >
<!ATTLIST yourElement
ID ID #IMPLIED
ooo >

Para incluir uma referência para um arquivo DTD, use a seguinte sintaxe no seu arquivo XML:

<!DOCTYPE yourRootElement SYSTEM "yourDTDFile.dtd">

Sem uma referência DTD ou XDR, em vez de usar:

<!DOCTYPE yourRootElement SYSTEM "yourDTDFile.dtd">

você pode utilizar:

var objXMLDOMNode = oXMLDOMDocument.selectSingleNode("descendant-or-
self::*[@ID='" + idString + "']");

Tente também utilizar o seguinte, antes de chamar o método selectSingleNode:

oXMLDOMDocument.setProperty("SelectionLanguage", "XPath");

Para uma referência mais detalhada, de uma olhada no Microsoftâ XML 3.0 SDK( no MSDN Online XML Developer Center, http://msdn.microsoft.com/xml/ ) e leia sobre o método setProperty.

P - Existe uma maneira de detectar se foi desabilitado o JavaScript em um browser? Preciso detectar isso em toda página do no meu site , não apenas na HomePage. Eu gostaria de saber como redirecionar os usuários para uma página padrão se o JavaScript deles tiver o JavaScript desabilitado.

R - Claro que uma solução seria rodar uma função JavaScript e ver se ela funciona. No seu caso, você pode redirecionar seus usuários para uma página padrão caso eles não tenham desabilitado o JavaScript. Por outro lado, você pode usar um código como o apresentado abaixo

<%option explicit%>
<%
' detect whether user has disabled JavaScript
' Created by Joel Katzevman
dim strURL,strJscpt,blnForm
strURL = Request.ServerVariables("url")
strJscpt = Request.QueryString 
blnForm = false 'assumes no form is present
'if there is data in the forms collection then do not append to the 
'querystring 
if (Request.Form.Count) >0 then
blnForm = true
end if 
%>
<HTML>
<HEAD>
<%
ifinstr(strJscpt,"jscript=true")= 0 And (blnForm) = false then with response 
.Write "<SCRIPT LANGUAGE=""JavaScript"">" 
.Write "window.location =" & " """& strURL & "?jscript=true" &""" " 
.Write "</SCRIPT>"
.Write "<META HTTP-EQUIV=""REFRESH"" CONTENT=""0; URL=/Project1/noJscript.htm"">" 
end with
end if
%> 
</HEAD>
<BODY>
Javascript Enabled
</BODY>
</HTML>

Quando a página é carregada, se o JavaScript não foi desabilitado a página se recarregara sozinha juntando "jscript=true" com a URL. Assim que a página for recarregada, ela continua a processar o resto da página. Se o JavaScript estiver desligado, o usuário será enviado para uma outra página que irá avisa-lo que precisa do JavaScript habilitado. Assim, de fato não existe uma detecção real, você esta apenas testando se o browser tem a capacidade de completar a tarefa(juntar um texto com uma URL).

Você pode testar isso checando as opções de segurança e desabilitando o Active Scripting(no Internet Explorer) ou JavaScript (no Netscape Navigator). Feche e reabra o browser, então tente recarregar a página.

P - Como eu faço para adicionar um login na conta do Microsoft SQL Server , de forma que todas as pessoas em um domínio ou um grupo possam acessar um banco de dados naquele servidor por uma página Web? Eu não posso usar machinename\IUSR_machinename porque eu preciso acessar alguns arquivos remotos(com UNC pathnames) na página Web.

R - Você pode usar machinename\IUSR_machinename se você duplicar esta conta no SQL server e desabilitar a password sync no Microsoft Internet Informations Services(IIS) 4.0. Se o recurso esta localizado na maquina onde esta rodando o IIS, você pode utilizar um caminho absoluto. Mas se você estiver utilizando UNC(para acessar a parte local do IIS), apenas desabilite a pasword sync para o "anonymous".

Os seguintes documentos poderão ser úteis para ajuda-lo na sua tarefa:

http://msdn.microsoft.com/workshop/server/feature/security.asp#unc,

http://msdn.microsoft.com/isapi/gosupport.asp?TARGET=/support/kb/articles/q207/6/71.asp, e

http://msdn.microsoft.com/isapi/gosupport.asp?TARGET=/support/kb/articles/q247/9/31.asp.

P - Eu tenho uma página ASP que tem uma área de elemento de texto. Quando os usuários entram com uma string de dados com múltiplas linhas nesta área de texto , eu quero mostrar a mesma string em uma página de visualização. De alguma maneira eu preciso manter os caracteres de "line feed" e "carriage return" destas strings para que a página de visualização possa mostrar as quebras de linha nos mesmos lugares.

R - Tente o código da abaixo.

<% Dim temp
Dim pos 
Dim strOriginal 
Dim strOldChar 
Dim strNewChar 
temp = "" 
strOriginal= "COLUMNNAME"
strOldChar = Chr(13)& Chr(10)
strNewChar = "<br>"
pos = InStr(1, strOriginal, strOldChar) 
While pos > 0 
temp = temp & Mid(strOriginal, 1, pos - 1) & strNewChar 
strOriginal = Right(strOriginal, Len(strOriginal) _
- pos - Len(strOldChar) + 1) 
pos = InStr(1, strOriginal, strOldChar) 
Wend 
ChangeStr = temp & strOriginal 
Response.Write ChangeStr 
%>

Troque COLUMNAME pelo nome da coluna que você deseja formatar. Isto deve funcionar também:

dim SomeText
SomeText = Request.Form("MyTextArea")
SomeText = Replace(SomeText, vbCRLF, "<br>")

Note que se você deseja mostrar SomeText no browser, você deverá inserir o que deseja em HTMLEncode.

Response.Write Server.HTMLEncode(SomeText)

P - Pode o conteúdo de um Data Island do XML ser alterado dinamicamente? Se sim , como? Eu tentei estes dois exemplos sem nenhum sucesso:

document.all("OrganizationDataIsland").innerHTML = objXMLInfo.xml
document.all("OrganizationDataIsland").innerHTML = objXMLInfo.text

Meu Data Island possui um ID do OrganizationDataIsland e eu quero mudar o seu conteúdo para objXMLInfo.xml, com o que esta no conteúdo do DOM do XML.

R - Um OrganizationDataIsland é basicamente como o DOM, e alterar a propriedade innerHTML não muda realmente o conteúdo do Data Island ou o DOM. Isto porque ela é read-only e não pode ser alterada.

É melhor utilizar o método loadXML para carregar os novos dados XML, Por exemplo:

document.all("OrganizationDataIsland").innerHTML = objXMLInfo.xml

Pode ser alterado para:

document.all("OrganizationDataIsland").loadXML(objXMLInfo.xml)

P - Eu preciso carregar dados e um arquivo XML para uma tabela de um banco de dados SQL Server. Por exemplo , eu tenho uma tabela chamada LotteryUser , com first_name , last_name , e-mail , and campos PPID. Eu também tenho um arquivo XML parecido com este:

<users>
<user>
<FirstName>Lei</FirstName>
<LastName>Jin< /LastName>
<Email>abcdef@hmtest.com</Email>
<PPId>0x0000abcdef</PPId>
</user>
</user>

É possível carregar dados diretamente deste arquivo XML para uma tabela em uma base de dados SQL? Eu penso que isto provavelmente envolva o uso de dataset , SQLDataAdapter , and XMLDataDocument. Mas eu não consigo coloca-los todos juntos. No meu programa C# eu testei(parse) o arquivo XML , extrai cada campo , e liguei a um parâmetro. Então eu chamo uma Stored Procedured do SQL para inserir o registro.
Depois de alguma leitura em OPEMXML , eu encontro o processamento do XML do lado do Servidor SQL. Minha compreensão é que System.Data.DataSet traz o XML e o relacionamento das tabelas SQL juntos. Se eu posso escrever dados em de uma tabela SQL para um arquivo XML usando uma classe DataSet , porque não posso ler XML em tabelas SQL usando bibliotecas LI no .Net?

R - Se você esta utilizando o SQL Server 2000, tente a função OPENXML (veja SQL Server Books Online para detalhes). No Beta 1, chamando ReadXML irá automaticamente chamar AcceptChanges depois de ler os dados, assim as linhas não poderão ser marcadas como excluídas, e você não poderá inseri-las dentro do seu banco de dados SQL Server. Com o Beta 2, AcceptChanges não é mais chamado quando da leitura de dados, assim leitura de dados de um arquivo XML parecem mais com dados inseridos pelo usuário. Com isso você pode carregar dados em um DataSet e utilizar o SQL Managed Provider para submeter estas alterações para o SQL Server. Você não precisa fixar um comando Select, como você notou, se tudo o que esta acontecendo esta sendo atualizado. Você precisa especificar a tabela dentro do DataSet para o DataAdapter usar o método Update. No XML mostrado abaixo, na tabela do DataSet será nomeado o usuário. Também, se você utilizar a declaração Insert, você deverá especificar os parâmetros assim que o DataAdapter souber como traçar os parâmetros da declaração Insert para as colunas do DataSet. O SQL Managed Provider usa parâmetros nomeados(veja abaixo).

DataSet ds = new DataSet();
string InsertQuery = "INSERT INTO LotteryUser (firstName, lastName, 
email, ppid) VALUES(@first_name, @last_name, @email, @ppid)";
SqlConnection DriverConn = new SqlConnection(ConnString);
SqlCommand insertCommand = new SqlCommand(InsertQuery);
try
{ 
ds.ReadXmlSchema("user.xsd");
ds.ReadXml(UserFileName);
insertCommand.Parameters.Add(new SqlParameter ("@first_name", 
SqlDbType.NVarChar));
insertCommand.Parameters.Add(new SqlParameter ("@last_name", 
SqlDbType.NVarChar));
insertCommand.Parameters.Add(new SqlParameter ("@email", 
SqlDbType.NVarChar));
insertCommand.Parameters.Add(new SqlParameter ("@ppid", 
SqlDbType.BigInt));
insertCommand.Parameters ["@first_name"].SourceColumn = "first_name";
insertCommand.Parameters ["@last_name"].SourceColumn = "last_name";
insertCommand.Parameters ["@email"].SourceColumn = "email";
insertCommand.Parameters ["@ppid"].SourceColumn = "ppid";
DriverConn.Open();
SqlDataAdapter DriverDataAdapter = new 
SqlDataAdapter(InsertQuery, DriverConn);
DriverDataAdapter.InsertCommand = insertCommand;
DriverDataAdapter.InsertCommand.Connection = DriverConn;
DriverDataAdapter.TableMappings.Add("Table", "LotteryUser");
DriverDataAdapter.Update(ds);

P - Existe alguma maneira de desabilitar o VBScript sem desabilitar o JavaScript? Estou levando um bom tempo isolando a causa do problema quando uma subrotina VBScript , no cliente , que deveria estar respondendo ao evento onclick de um botão não roda.

R - O problema irá desaparecer se você explicitamente indicar qual o "mecanismo de script" deve ser usado no evento onclick:

<input type="button" value="VBS" 
onclick="vbscript:SomeSub()" />
ou 
<input type="button" value="JS" 
onclick="javascript:SomeFunction();" />

P - Eu tenho o seguinte problema. Uma janela pai "spawns" uma "filha" independente , então é fechada pelo usuário. A janela "filha" permanece aberta. Se a janela "filha" tenta acessar windows.opener.name , um erro de acesso negado é lançado , enquanto window.opener não é nulo e não é indefinido. Como eu posso tratar este "erro" do JavaScript?(Estou utilizando o Internet Explorer 4.0)

<script LANGUAGE="JavaScript">
var openerWin = window.opener;
var parentName = "_blank";
if (openerWin.name != null || openerWin.name != undef )
parentName = openerWin.name;
</script>

R - Você pode usar o "try/catch", implementado na versão 5.0 do JScript e posteriores, Para baixar o Windowsâ Script 5.0 a partir de http://msdn.microsoft.com/scripting/ e instalar para o Internet Explorer 4.0, ou você pode apenas suprimir qualquer erro que ocorra na página "filha". Adicione o seguinte código no topo do script da página "filha":

function NoError()
{
return true;
}
window.onerror = NoError;

P - Minha equipe esta desenvolvendo um produto "server-based" que embute múltiplos mecanismos de script. Os garotos estão escrevendo scripts que irão rodar na versão 5.5 do mecanismo Script do Windows devido ao JScript 5.5 possuir algumas novas características interessantes. O mecanismo de script será instalado em um grande número de servidores , por isso é importante que o processo de instalação seja realmente fácil e realmente autônomo , sem a necessidade de interação com o usuário. Para fazer isto fácil , eu gostaria de instalar o Windows Script 5 , 5 como parte do processo de instalação. Atualmente estou tentando scripten.exe/Q do nosso instalador. Infelizmente , o instalador do script esta abrindo uma janela de diálogo dizendo que o computador deverá ser reiniciado.

Qual a melhor maneira de fazer isso? Há um módulo mesclado(MSM) para o Windows Script 5.5? Em quais circunstâncias a reinicialização é necessária? (Minha plataforma de destino é apenas o Windows 2000). Se eu tiver de incluir um descompactador de DLL e registra-las eu mesmo , o que o scripten.exe pode fazer por mim?

R - Não existe MSM para o Windows Script 5.5 por que ele é um componente de sistema e atualizações de componentes de sistemas ainda necessitam do IExpress/inf. Ele necessita ser reinicializado porque o JScript esta quase com certeza em uso devido ao Shell, IIS, e outros componentes estarem usando-o.

Tente scripten.exe/Q:A /R:S. Isto irá reiniciar a máquina automaticamente, e poderá prevenir qualquer necessidade de interação com o usuário. Estas chaves controlam o que o pacote IExpress faz durante a instalação. Todas estas chaves estão descritas no artigo Q247095 do Knowledge Base em http://msdn.microsoft.com/isapi/gosupport.asp?TARGET=/support/kb/articles/Q247/0/95.ASP. Você também pode checar o Office Resource Kit para maiores informações. Estas chaves em particular desabilitam todos UI(/Q:A) e reiniciam o equipamento silenciosamente(/R:S). Você, também, pode utilizar /R:N para desabilitar a reinicialização, mas terá de faze-lo você mesmo ao final do processo de instalação.

Obrigado para os seguintes desenvolvedores Microsoft pela sua perícia técnica: Aaron Averbuch, Andrew Clinick, Britt Cluff, Joao Carlos de Souza, Dan Doris, Brian Ellis, Honghui Guo, John Jansen, Lei Jin, Pranar Kandula, Joel Katzevman, Oleg Kofman, Florin Popovici, Michael Pizzo, Tushar K. Sukale, Peter Torr, Charles Torre, Stuart Updegrave, Adam Vandenberg, Edwin Young, George Young.

Faça o download deste documento:


· WEB Perguntas & Respostas


downl.gif  formato Word, compactado - 17 Kb    

Isso foi útil para você?
(1500 caracteres restantes)
Agradecemos os seus comentários
Mostrar:
© 2014 Microsoft. Todos os direitos reservados.