luglio 2009 - Posts

RS 2005, toolbar, reportserver, file axd e problemi di render
30 luglio 09 05.25 | abenedetti | 1 comment(s)

Come direbbe un mio amico, un comportamento inquietante mi ha rovinato quasi un’intera giornata…

Scenario: macchina SQL Server 2005 SP2 con Reporting Services acceduti via URL.

I report si vedono perfettamente dal Report Manager (http://srvsql/Reports) ma non dal Report Server (http://srvsql/Reportserver)

Questo quello che si ottiene:

rs1

La toolbar non viene renderizzata ed il report non viene caricato / visualizzato (il report viene invece elaborato correttamente se viene specificato sulla URL il parametro rc:toolbar=false).

Oltre a questo decine di errori javascript, come questi:

  • Error: 'RSClientController' is undefined
  • Error: 'ReportViewerHoverButton' is undefined

La macchina è un Win 2003 Srv R2 e quindi non si tratta del “noto” problema di IIS7:

Report Viewer Toolbar does not render properly on IIS 7.0

La soluzione, dopo diversi deliri, è stata la seguente:

 

1. accedere ad IIS ed entrare nelle proprietà dell’applicazione ReportServer

rs0

2. accedere alla sua configurazione

rs3

3. verificare la “wildcard application maps” per il filto ISAPI aspnet_isapi.dll

rs4

4. deselezionare (perchè era selezionato!) il checkbox “verify that file exists

rs2

Ok, tutto regolare!

 

Perchè questo flag deve essere disabilitato?

Perchè le richieste che arrivano ad IIS sono (basta aprire il sorgente HTML di un report) anche di questo tipo:

<script src="/ReportServer/Reserved.ReportViewerWebControl.axd?…

Questo file axd, in realtà,  non esiste ma viene trattato dai binari del report server :-)

La toolbar, infatti, non esiste fisicamente da nessuna parte, ma si trova all’interno del compilato dell’applicazione.

 

Mi resta solo una domanda (per cui ora non ho risposta): chi / cosa aveva selezionato il checkbox incriminato?!?!

Importare file di trace
15 luglio 09 06.47 | abenedetti | 1 comment(s)

Sono solito trarre più informazioni possibili dai file di trace di SQL Server.

Una delle istruzioni (forse l’istruzione) che utilizzo di più per caricare il file con la registrazione all’interno di in una tabella, è la seguente:

SELECT IDENTITY(bigint, 1, 1) AS RowNumber, * 
INTO dbo.trace
FROM ::fn_trace_gettable('C:\temp\trace.trc', default)

Unica accortezza: ricordarsi che il path passato alla funzione deve essere locale all’istanza su cui si vuole caricare i dati.

Quindi, se il file si trovasse su una macchina differente, utilizzare un percorso UNC.

Filed under: ,
Trigger & Table Name
12 luglio 09 09.17 | abenedetti | with no comments

Un paio di giorni fa ho ricevuto questa domanda (sinceramente, non me l’aveva mai fatta nessuno prima :-)): “come posso, dall’interno di un trigger, conoscere il nome della tabella che lo ha scatenato?”.

Ci sono almeno tre modi diversi, tramite le vista:

  1. sys.sysobjects
  2. sys.triggers
  3. sys.dm_tran_locks

Ad esempio:

USE tempdb
GO

/* setup */
CREATE TABLE test
(
   
colonna INT
)
GO

/* trigger */
CREATE TRIGGER trInsertTest ON test 
FOR INSERT
AS
BEGIN
   
/* 1 */
   
SELECT OBJECT_NAME(resource_associated_entity_id) AS tableName
   
FROM sys.dm_tran_locks 
   
WHERE 
       
request_session_id = @@spid AND 
       
resource_type = 'OBJECT'

   
/* 2 */
   
SELECT 
       
OBJECT_NAME(parent_id) AS tableName,
       
OBJECT_NAME(@@PROCID) AS triggerName
   
FROM sys.triggers
   
WHERE name = OBJECT_NAME(@@PROCID) 

   
/* 3 */
   
SELECT 
       
OBJECT_NAME(parent_obj) AS TABNAME 
   
FROM sys.sysobjects 
   
WHERE id = @@PROCID
END
GO

/* insert per test */
INSERT test VALUES (10)
GO

/* cleanup */
DROP TRIGGER trInsertTest
DROP TABLE test
GO
Filed under: ,

This Blog

Syndication