Showing posts with label client. Show all posts
Showing posts with label client. Show all posts

Tuesday, March 27, 2012

Customize Reportserver interface

Hi,
Im currently developing various reports for my company. We have many
different clients and different reports for each client.
I want to develop a common website (just like reportserver) for all
the reports and through NT-logon redirect a client to his reports.
My question is: Is it possible to customize the reportserver interface
to do this? How ?Stefan wrote:
> Im currently developing various reports for my company. We have many
> different clients and different reports for each client.
> I want to develop a common website (just like reportserver) for all
> the reports and through NT-logon redirect a client to his reports.
> My question is: Is it possible to customize the reportserver interface
> to do this? How ?
Look at http://www.codeproject.com/useritems/SQLRSViewer.asp
You have to modify this solution but it works great.
regards
Frank
www.xax.de|||Thank you!
/Regards Stefan
"Frank Matthiesen" <fm@.xax.de> wrote in message news:<366uerF4klp8oU1@.individual.net>...
> Stefan wrote:
> > Im currently developing various reports for my company. We have many
> > different clients and different reports for each client.
> >
> > I want to develop a common website (just like reportserver) for all
> > the reports and through NT-logon redirect a client to his reports.
> >
> > My question is: Is it possible to customize the reportserver interface
> > to do this? How ?
> Look at http://www.codeproject.com/useritems/SQLRSViewer.asp
> You have to modify this solution but it works great.
> regards
> Frank
> www.xax.desql

Thursday, March 22, 2012

Custom Zoom Factor

How'd
I was asked by a client if they could specify a custom zoom factor is this possible?
If not can it be incorporated into next SP or Version?
Thanks in Advance
SheaThe Zoom supported by Reporting Services is the standard Zoom supported by
IE. You can employ any numeric value and then also Page Width and Whole
Page.
What is the custom Zoom factor your client wishes to use?
Is your client accessing reports through Report Manager or through a custom
application?
--
Bryan Keller
Developer Documentation
SQL Server Reporting Services
A friendly reminder that this posting is provided "AS IS" with no
warranties, and confers no rights.
"Shea Strickland" <SheaStrickland@.discussions.microsoft.com> wrote in
message news:21322E4C-766B-4812-B1BA-6D096BA6753D@.microsoft.com...
> How'd
> I was asked by a client if they could specify a custom zoom factor is this
possible?
> If not can it be incorporated into next SP or Version?
> Thanks in Advance
> Shea|||I guess the client wants to be able to type a % in the drop down in the builtin control just like other microsoft products. eg 79%
The application is a custom web app that just uses the builtin reportparameter control and navigation control (export etc)
Thanks for you help
Shea
"Bryan Keller [MSFT]" wrote:
> The Zoom supported by Reporting Services is the standard Zoom supported by
> IE. You can employ any numeric value and then also Page Width and Whole
> Page.
> What is the custom Zoom factor your client wishes to use?
> Is your client accessing reports through Report Manager or through a custom
> application?
> --
> Bryan Keller
> Developer Documentation
> SQL Server Reporting Services
> A friendly reminder that this posting is provided "AS IS" with no
> warranties, and confers no rights.
>
> "Shea Strickland" <SheaStrickland@.discussions.microsoft.com> wrote in
> message news:21322E4C-766B-4812-B1BA-6D096BA6753D@.microsoft.com...
> > How'd
> >
> > I was asked by a client if they could specify a custom zoom factor is this
> possible?
> > If not can it be incorporated into next SP or Version?
> >
> > Thanks in Advance
> > Shea
>
>

Custom Toggle Icon

Has anyone found a way to change the default +/- toggle icon displayed for drilldown to another graphic? My client would like to use a right arrow/down arrow insted of the +/-.

No, this is currently not supported.

-- Robert

Tuesday, March 20, 2012

Custom Security Extension

Hi,

My company has an application in the standard client-server architecture; The client is written in VB 6 and uses reports from the old VB 6 report designer. I am currently undertaking a project which involves transferring these reports to Reporting Services in order to allow access via the internet (a new reporting web front-end is also being designed to work in tandem with the old client). The current client has data restriction features which restrict data and report access depending on a users group - these features can be managed via the client by users with the correct privileges. In order to prevent creation and maintenance of accounts on the both the Report Server and the database for the old client (and to allows non-windows authentication) I have implemented a custom security extension which authenticates users by checking their credentials against the client's database; I also need to authorize users requests against this database however I don't seem to be able to retrieve the identity of the catalogue item that Reporting Services is requesting authorization for.

for example a report is requested; Reporting Services calls the following method:

public bool CheckAccess(string userName, IntPtr userToken, byte[] secDesc, Microsoft.ReportingServices.Interfaces.ReportOperation requiredOperation)

I can't find a way of obtaining the reports name or identity from within this method so I can use it to query the external database to ascertain authorization.

Can anybody help? Am I missing something glaringly obvious?

Your time is very much appreciated.

Adam

I have the same problem.

In RS 2000 Version, I found this information at HttpContext.Request.QueryString[0]

But in 2005 I can't find it in HttpContext..... and I need it urgently.|||I have the solution. Call this Method from IAuthorizationExtension Constructor or from your CheckAccess Method:
<code>
public string GetReportName()
{
HttpContext.Current.Request.InputStream.Position = 0;

StreamReader rd = new StreamReader(HttpContext.Current.Request.InputStream);

XmlDocument SOAPDocument = new XmlDocument();

SOAPDocument.LoadXml(rd.ReadToEnd());

HttpContext.Current.Request.InputStream.Position = 0;

XmlNamespaceManager ns = new XmlNamespaceManager(SOAPDocument.NameTable);
ns.AddNamespace("def","http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices");
ns.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");

XmlNode result = null;
result = SOAPDocument.SelectSingleNode("//def:Item",ns);

if (result == null)
{
result = SOAPDocument.SelectSingleNode("//def:Report",ns);
}
if (result == null)
{
return HttpContext.Current.Cache["ReportName"].ToString();
}

String ReportPath = result.InnerText;

string[] ReportDescription = ReportPath.Split(new char[] { '/' });

HttpContext.Current.Cache.Insert("ReportName",ReportDescription[ReportDescription.Length-1],null,DateTime.Now.AddMinutes(5),TimeSpan.Zero);

return ReportDescription[ReportDescription.Length - 1];
}
</code>|||I don't think this method will work reliably. Can you elaborate on why you need the path in the security extension - why isn't the ACL that's passed in enough to make access check decisions?|||The ACL passed in check decisions method, is based in roles configured in Report Manager.

The security of my client has his own roles. I need know de report name to ask to my client security framework which type of access has the user to this report name.

PD: Sorry for my bad english.|||

Tudor Trufinescu - MSFT wrote:

I don't think this method will work reliably. Can you elaborate on why you need the path in the security extension - why isn't the ACL that's passed in enough to make access check decisions?

I have posted exactly the same question. The ACL doesn't tell me anything about what the actual object is that the user is trying to get to. It would be helpful to know that User X is trying to execute Report Y in order to do custom authorization....

Custom Security Extension

Hi,

My company has an application in the standard client-server architecture; The client is written in VB 6 and uses reports from the old VB 6 report designer. I am currently undertaking a project which involves transferring these reports to Reporting Services in order to allow access via the internet (a new reporting web front-end is also being designed to work in tandem with the old client). The current client has data restriction features which restrict data and report access depending on a users group - these features can be managed via the client by users with the correct privileges. In order to prevent creation and maintenance of accounts on the both the Report Server and the database for the old client (and to allows non-windows authentication) I have implemented a custom security extension which authenticates users by checking their credentials against the client's database; I also need to authorize users requests against this database however I don't seem to be able to retrieve the identity of the catalogue item that Reporting Services is requesting authorization for.

for example a report is requested; Reporting Services calls the following method:

public bool CheckAccess(string userName, IntPtr userToken, byte[] secDesc, Microsoft.ReportingServices.Interfaces.ReportOperation requiredOperation)

I can't find a way of obtaining the reports name or identity from within this method so I can use it to query the external database to ascertain authorization.

Can anybody help? Am I missing something glaringly obvious?

Your time is very much appreciated.

Adam

I have the same problem.

In RS 2000 Version, I found this information at HttpContext.Request.QueryString[0]

But in 2005 I can't find it in HttpContext..... and I need it urgently.|||I have the solution. Call this Method from IAuthorizationExtension Constructor or from your CheckAccess Method:
<code>
public string GetReportName()
{
HttpContext.Current.Request.InputStream.Position = 0;

StreamReader rd = new StreamReader(HttpContext.Current.Request.InputStream);

XmlDocument SOAPDocument = new XmlDocument();

SOAPDocument.LoadXml(rd.ReadToEnd());

HttpContext.Current.Request.InputStream.Position = 0;

XmlNamespaceManager ns = new XmlNamespaceManager(SOAPDocument.NameTable);
ns.AddNamespace("def","http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices");
ns.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");

XmlNode result = null;
result = SOAPDocument.SelectSingleNode("//def:Item",ns);

if (result == null)
{
result = SOAPDocument.SelectSingleNode("//def:Report",ns);
}
if (result == null)
{
return HttpContext.Current.Cache["ReportName"].ToString();
}

String ReportPath = result.InnerText;

string[] ReportDescription = ReportPath.Split(new char[] { '/' });

HttpContext.Current.Cache.Insert("ReportName",ReportDescription[ReportDescription.Length-1],null,DateTime.Now.AddMinutes(5),TimeSpan.Zero);

return ReportDescription[ReportDescription.Length - 1];
}
</code>|||I don't think this method will work reliably. Can you elaborate on why you need the path in the security extension - why isn't the ACL that's passed in enough to make access check decisions?|||The ACL passed in check decisions method, is based in roles configured in Report Manager.

The security of my client has his own roles. I need know de report name to ask to my client security framework which type of access has the user to this report name.

PD: Sorry for my bad english.|||

Tudor Trufinescu - MSFT wrote:

I don't think this method will work reliably. Can you elaborate on why you need the path in the security extension - why isn't the ACL that's passed in enough to make access check decisions?

I have posted exactly the same question. The ACL doesn't tell me anything about what the actual object is that the user is trying to get to. It would be helpful to know that User X is trying to execute Report Y in order to do custom authorization....|||I have tried using the suggestion in this thread. Unfortunately, it does not work. Report Server will make many calls to the CheckAccess methods to fill one user request. At some point one of those calls will throw an XML related exception using the GetReportName method. The exception will say "no root node". I don't want to handle this exception by catching it and returning true in the CheckAccess method. So I catch the exception and send back false. Just one false return value will cause the Report Server to send back a failed authorization message to the user if if all of the previous calls to CheckAccess returned true.

Any thoughts on a way to enhance this approach without compromising security?

Monday, March 19, 2012

Custom Security Extension

Hi,

My company has an application in the standard client-server architecture; The client is written in VB 6 and uses reports from the old VB 6 report designer. I am currently undertaking a project which involves transferring these reports to Reporting Services in order to allow access via the internet (a new reporting web front-end is also being designed to work in tandem with the old client). The current client has data restriction features which restrict data and report access depending on a users group - these features can be managed via the client by users with the correct privileges. In order to prevent creation and maintenance of accounts on the both the Report Server and the database for the old client (and to allows non-windows authentication) I have implemented a custom security extension which authenticates users by checking their credentials against the client's database; I also need to authorize users requests against this database however I don't seem to be able to retrieve the identity of the catalogue item that Reporting Services is requesting authorization for.

for example a report is requested; Reporting Services calls the following method:

public bool CheckAccess(string userName, IntPtr userToken, byte[] secDesc, Microsoft.ReportingServices.Interfaces.ReportOperation requiredOperation)

I can't find a way of obtaining the reports name or identity from within this method so I can use it to query the external database to ascertain authorization.

Can anybody help? Am I missing something glaringly obvious?

Your time is very much appreciated.

Adam

I have the same problem.

In RS 2000 Version, I found this information at HttpContext.Request.QueryString[0]

But in 2005 I can't find it in HttpContext..... and I need it urgently.|||I have the solution. Call this Method from IAuthorizationExtension Constructor or from your CheckAccess Method:
<code>
public string GetReportName()
{
HttpContext.Current.Request.InputStream.Position = 0;

StreamReader rd = new StreamReader(HttpContext.Current.Request.InputStream);

XmlDocument SOAPDocument = new XmlDocument();

SOAPDocument.LoadXml(rd.ReadToEnd());

HttpContext.Current.Request.InputStream.Position = 0;

XmlNamespaceManager ns = new XmlNamespaceManager(SOAPDocument.NameTable);
ns.AddNamespace("def","http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices");
ns.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");

XmlNode result = null;
result = SOAPDocument.SelectSingleNode("//def:Item",ns);

if (result == null)
{
result = SOAPDocument.SelectSingleNode("//def:Report",ns);
}
if (result == null)
{
return HttpContext.Current.Cache["ReportName"].ToString();
}

String ReportPath = result.InnerText;

string[] ReportDescription = ReportPath.Split(new char[] { '/' });

HttpContext.Current.Cache.Insert("ReportName",ReportDescription[ReportDescription.Length-1],null,DateTime.Now.AddMinutes(5),TimeSpan.Zero);

return ReportDescription[ReportDescription.Length - 1];
}
</code>|||I don't think this method will work reliably. Can you elaborate on why you need the path in the security extension - why isn't the ACL that's passed in enough to make access check decisions?|||The ACL passed in check decisions method, is based in roles configured in Report Manager.

The security of my client has his own roles. I need know de report name to ask to my client security framework which type of access has the user to this report name.

PD: Sorry for my bad english.|||

Tudor Trufinescu - MSFT wrote:

I don't think this method will work reliably. Can you elaborate on why you need the path in the security extension - why isn't the ACL that's passed in enough to make access check decisions?

I have posted exactly the same question. The ACL doesn't tell me anything about what the actual object is that the user is trying to get to. It would be helpful to know that User X is trying to execute Report Y in order to do custom authorization....

Custom Report Items

Hi,
I want change reports' style after the deployment, so each client can have his style.
Nobody know I can do?

(change the color of table/matrix, insert a image...)Hi,

this can′t be done by a normal predefined report, you have to use the report builder for that. By creating a report model you wil lhave the avaibility to let the user create his own reports from scratch.

HTH, Jens Suessmeyer.

http://www.sqlserver2005.de

Thursday, March 8, 2012

Custom function with multiple variables

Hello,
I must say I am not too experienced in writing custom functions in
TSQL. Perhaps I am asking impossible
I have run into problems that the client platform is not able to
transmit the unicode characters properly, so I need a solution that
woul allow to call insert/update queries with ASCII charset only. The
current solution is that every unicode string literal is replaced with
a long sum of NCHAR(n) and string literals containing only ASCII chars.
That made me run into some wierd 'query optimisation' error.
I am now thinking maybe I could create a function where I could pass
all the unicode code values and string literals and what would
concatenate all them into one string. So, the question is -
1) Is it possible to create a function with variable number of
arguments
2) Can these arguments be of different types - mixed integer and string
3) Is TSQL strong enough to provide means of creating program that
loops over all the arguments and concatenates all of them into one
string, converting the int arguments uzing NCHAR() function.
Example:
MyFn(256,1000,'ABC',300,400,'1234')
returns ''ABC?' (The funny unicode chars replaced with ? for the
sake of example)
Thank you for any hints,
Pavils> 1) Is it possible to create a function with variable number of arguments ?
No. The number of arguments is defined when you create the function.
Even if you specify default values for some arguments, when you call
the UDF you must specify the DEFAULT keyword in the place of the values
for those arguments.

> 2) Can these arguments be of different types - mixed integer and string ?
No, but in SQL Server 2000 (or later) you can use the sql_variant
datatype, which can represent any other scalar datatype (except text,
ntext, image and timestamp).

> 3) Is TSQL strong enough to [...] ?
Maybe, but I don't think that would be a good idea.
You should think about another way of dealing with this issue.
Razvan

Saturday, February 25, 2012

Custom Connection Manager or SSIS Provided one?

Hi,

I have been working with a client on a legacy application migration to SSIS and I found SSIS to be very helpful, as this is my first project using integration services I found myself in a situation where multiple solutions can work but I cannot assess the risk of using one or the other and the effort required for the implementation.

The situation is as following, we cannot touch the input files that come from the other legacy systems so I need to get information that is packaged following the next multipart schema:

&Header with context information from the source
&BatchHeader with context information from the batch (including format N)
- Data in format N
&BatchHeader with context information from the batch (including format K)
+Data in format K
&BatchHeader with context information from the batch (including format P)
=Data in format P

Etc... Needless to say that they can come in whatever order and they need different processing depending on the format. I have been tempted to use the techniq shown in "Handling Different Row Types In The Same File" from http://www.sqlis.com/default.aspx?54.

However, there are multiple issues that I have to resolve to do that: First is how to feed the pipeline with the Data in format N and then reparse them in an easy way cause the data that comes from the other system is very wide (aprox 120 columns), so using a parsing script is by no means a viable solution (I have multiple formats to handle). So I do not see a way to treat the data without using a Custom Connection Manager. Here comes my first question: Is there anyway someone can use the already provided managers to handle an scenario like this one?

Next comes the separation, which one is the wisest thing to do: Write again that to disk in as easier format or pass along that information to the next task in memory? The volume of data is in the order of hundreds of megabytes (100 to 200), maybe half a Gigabyte in the extreme cases. How about uploading that to SQL Server and work from there?

BTW, the production servers will have 6 to 8 Gb of memory and 4 to 8 processors (more or less).

Thanks in advance.

Federico


Hi, I am not sure I understand your questions.

>>>> First is how to feed the pipeline with the Data in format N and then reparse them

The concept show in the article loads the whole row as 1 column to get the data into the pipeline and then you make decissions and parse from there. The article shows using script components to parse but you could also just use a derived column transform and the expression syntax, it all depends on the complexity of splitting your file. My guess is the trick in your case is identification of the rows. Is there something that can identify each row?

File header (multiple rows?)
K_BatchHeader (multiple rows?)
K_rows
P_BatchHeader (Multiple Rows?)
P_rows
...
...

Or is the only way you know K rows for sure is they follow the KBatchHEader and precede some other header?
Could be a multi step approach is best. One to "Split" parse to the source files to individual file formats (k,p,N) and another to read those files and do the actual data processing. This way, the 2nd process can likely use the built in parsing features.

|||

What I can suggest is an approach.

Creating a custom connection manager won't do any good here because connection managers are agnostic to the Dataflow task. What you need is a custom source adapter...

Or, in certain cases you can use the flat file adapter to read in the file row by row and use a script transform to do the parsing.

The best thing to do is to create a custom source adapter. You'll have much more control and the solution will ultimately be more robust.

K

|||although a custom source component will do the trick, a script component may suffice.|||

Thanks Craig, you understood correctly :)

In fact the solution you propose is what I am going to implement because I could be able to get a sample of the format (what I had until this point was the functional extraction of the legacy Cobol programs) and the rows format is not even normalized. So the problem now reduces to Normalize the file format (where I can split it with a custom task) and then do the Staging on the database and further processing.

So in fact I am moving toward your solution ;)

Again, thanks for the help.

Greetings
Federico Andrs Lois

|||

Yeah I used the wrong name, I meant a source adapter :)

As I wrote to Craig, I am moving toward a prenormalization and splitting in a task just because I found the data wasnt as clean as I though (regarding the format) so it will be required a normalization step before that.

Thanks too for the response.

Greetings
Federico Andrs Lois

Custom configuration settings?

We are an ISV and our OLAP solution will be deployed to many customers. Needless to say, various values needs to be customized to meet the client needs, e.g. KPI goal values. What will the recommended way to implement custom configuration settings in the cube that are accessable to MDX calculations?An example would be helpful. I have vague understanding of what you are asking, perhaps more explanation will make it more clear.