Showing posts with label component. Show all posts
Showing posts with label component. Show all posts

Thursday, March 22, 2012

Custom Transformation Component tutorial

Hi all,

Is there any tutorial to learn how custom transformation component works? maybe a blog, pdf or something...

Specifically, i need to learn how to generate an output column composed from 3 input columns. The problem is i dont know how to set the column value... anyone have some sample code?

Thanks!

I don't think there is any one source. Books Online has some very good topics on this. Make sure you have the latest version Feb 2007, not just the one which came with the original media.

The MS downloads site has some good samples too, just search for SSIS on there. The samples cover lots of functions and build on each other, even when non functional as they stand.

There plenty of sites with articles but I'll cheat and point to some on mine as I know them -

The ReverseString Component Explained
(http://www.sqlis.com/25.aspx)

When to use ProcessInput or PrimeOutput in your Component
(http://www.sqlis.com/24.aspx)

You can also buy books.

|||

Thanks Darren,

I need this new calculated output column as well as the same 3 columns that were the input of the component.

I have been trying my self using msdn, the problem is that , either i get the new column or the three ones, not these 4 columns i need...

I'll read this articles you post.

Thank you.

|||

Sorry for my insistence...

How can i link the inputs of the "custom transformation component" to its outputs in order to use this data in next step?

It's possible to mix this kind of outputs with other outputs generated by the objects?

thanks

|||

I do not really understand the question. Link inputs, why? Do you have multiple inputs? Do you mean an input or an input column?

You can "link" the input to the output via the SynchronousInputID property of the output makes a synchronous component.

Synchronous vs asynchronous is explained in Books Online.

If you have a synchronous component (make sure you know what that mean, see BOL), then an input column is always an "output" column, but it does not appear in the columns collection of the output itself. You can change data and it is available to downstream components.

|||

Dear Friend,

See this example:

http://pedrocgd.blogspot.com/2007/05/ssis-populating-dimension_28.html

Helped? :-(

Regards!

Custom transform component, change type or add output column

Would anyone happen to have any pointers or know of any good code examples to either programmatically change the type of an input column when it is passed through the component, or add a new column to the output? I am extracting data from an Oracle database which is in Julian date format (represented within SSIS as a DT_NUMERIC column) and I need to to either transform the input column holding it into a date column, or to dynamically add a new output column holding the transformed data.

Many thanks

You cannot change the type of a buffer column. You will have to add a new column. If you only expect users to select valid columns, and for each one selected you could handle this by overriding SetUSageType on the component class.

Whenever people select a column (UsageType read-only, deny read-write as not required), you could then add a new output column. This would work and would be quite clean.

I would also use a custom property on the output column to store the lineage ID of the "source" inpurt column.

The better way would be to handle adding the column outside of SetUsageType. So with the Advanced UI you would need to select the input column (SetUsageType), then add the output column (InsertOutputColumnAt) and add the custom property (SetOutputColumnProperty) all in three steps. Method names used by the UI are shown in braclets so you know what to do if it was your own UI. With a proper custom UI this of course would become one step for the end user, but more importantly could all be done through the managed wrapper interface, CManagedComponentWrapperClass.SetUsageType, InsertOutputColumnAt, SetOutputColumnProperty methods. This would be good for the user experience it will give around real-time validation and OK/Cancel behaviour of the UI.

Tuesday, March 20, 2012

custom SSIS with ATL dll

Hi All,Is it possible to create SSIS custom component with ATL COM dll with MFC support?I'm not familar with C# & VB# languages :-(Regards,Svilen Varbanov

Yes, it's possible but not supported. To get an idea what interfaces you need to implement, take a look at the DTS.DLL file in OLEVIEW. You need to implement IDTSTask90, IDTSComponentPersist90 for the basic implementation. If you want to do more advanced things like create custom events, custom log events, build breakpoints etc. there are other interfaces to support. Several of the stock tasks are written in native code including the dataflow, execute package and some parts of the MSMQ task.

Kirk Haselden Author "SQL Server Integration Services"|||

Thanks!

It seems C++ is obsolete prorgamming language.... :-( Now I have find out a way to convert DTS package written in C++ 6.0 into managed dll written in C#... I can't believe...

Regards,

Svilen Varbanov

Custom Source Component Problem?

Hi,I have developed a custom source component to get data from a generic odbc connection with some special caracteristics.

The component works fine by getting and mapping the output fields etc...

The only two problems existing are that when i run the task it says that the data flow has no components inside... how is this possible since i have my source mapped to a flat file inside that data flow?

This is the error:

SSIS package "BVEIT000D.dtsx" starting.

Warning: 0x80047034 at BVEIT000D_<EMPRESA> TXT, DTS.Pipeline: The DataFlow task has no components. Add components or remove the task.

Information: 0x4004300C at BVEIT000D_<EMPRESA> TXT, DTS.Pipeline: Execute phase is beginning.

SSIS package "BVEIT000D.dtsx" finished: Success.

The other problem is that if i want to <ignore> a certain source column the component already shows me an error saying that the no column with ID 0 was found...

Any one with experience in creating custom components?

Regards,

Hi Luis,

I might be able to help you but I need some more information. Are you creating the package using the Designer or programatically? Do you get an error when adding the component to the data flow?

It's hard for me to determine what is going on without seeing the package. Could you post more information about how you're adding the component to the package?

Jason
|||

Yes i am creating the package using the designer and no error is ocurring... everything works just fine...

I add the component and the file destination i set my component sql to return the fields i map the fields to the file component and then when i run the task it simply says that my data flow doenst have components? Jesus...

I hope you can help me here!

Regards,

|||Have you tried creating a new empty package and adding a Data Flow and your custom source?

|||

Yes, same thing happens...

This is very very weird...

|||I agree.

Could you post the DtsPipelineComponent attribute settings you are using?

It might help to see your actual package too. If you want, you can send it to me at jason.gerard AT idea.com

|||

Ok this is my attribute settings:

<DtsPipelineComponent(DisplayName:="WV ODBC Generic Source", Description:="Data Flow Task that allows you to freely return data based on a SQL Statement against a Generic ODBC Connection", ComponentType:=ComponentType.SourceAdapter, IconResource:="WorldVision.LuisSimoes.SQLServer2005.DataFlow.Sources.WVODBCSource.ico")> Public Class WVODBCSource

Inherits PipelineComponent

I think is pretty normal...

As for the component i sent it by email to you.

Regards,

Sunday, March 11, 2012

Custom Properties in External Metadata not writeable using the Advanced Editor

Hello,

I'm working on a custom dataflow destination component. It makes use of the External Metadata Collection. I also use Custom Properties with the external metadata collection.

When I open the destination component using the Advanced Editor, and select an External Metadata Collection and change the Custom Property it always changes back to the original value.

Additionally the method SetExternalMetadataColumnProperty never gets called.

Here is a little Test Component that surfaces the problem:

[DtsPipelineComponent(ComponentType=ComponentType.DestinationAdapter, DisplayName="Test Destination")]
public class Class1 : PipelineComponent
{
public override void ProvideComponentProperties()
{
base.ProvideComponentProperties();

ComponentMetaData.InputCollection.RemoveAll();
IDTSInput90 input = ComponentMetaData.InputCollection.New();
input.Name = "Name";
input.ExternalMetadataColumnCollection.IsUsed = true;

IDTSExternalMetadataColumn90 ext = input.ExternalMetadataColumnCollection.New();
ext.Name = "ExtName";
IDTSCustomProperty90 customProp = ext.CustomPropertyCollection.New();
customProp.Name = "Custom Property";
customProp.Value = "Hallo";
}

public override IDTSCustomProperty90 SetExternalMetadataColumnProperty(int iID, int iExternalMetadataColumnID, string strPropertyName, object oValue)
{
return base.SetExternalMetadataColumnProperty(iID, iExternalMetadataColumnID, strPropertyName, oValue);
}
}

Any ideas how to make that work?

Georg

Are you sure that your SetExternalMetadataColumnProperty method is getting called? I believe you must implement the functionality to set the property yourself rather than delegating to the base class.|||

No, actually part of problem is that it never gets called when I change the property.

The method is only implemented for debugging. If you set a breakpoint in it, it never gets called. As far as I understand is, you would override this method just to implement additional functionality when a custom property of an External Metadata Column is changed, eg for validation.

Wednesday, March 7, 2012

Custom Destination Component Logging - wrote 0 rows

I wrote a custom destination component. Everything works fine, except there is a logging message that is displayed that I cannot get rid of or correct. Here is the end of the output of a package containing my component:

Information: 0x40043009 at Data Flow Task, DTS.Pipeline: Cleanup phase is beginning.
Information: 0x0 at Data Flow Task, MyDestination: Inserted 40315 rows into C:\temp\file.txt
Information: 0x4004300B at Data Flow Task, DTS.Pipeline: "component "MyDestination" (9)" wrote 0 rows.
SSIS package "Package.dtsx" finished: Success.

I inserted a custom information message that contains the correct number of rows written by the component. I would like to either get rid of the last message "... wrote 0 rows", or figure out what to set to put the correct number of rows into that message.

This message seems to happen in the Cleanup phase. It appears whether I override the Cleanup method of the Pipeline component and do nothing, or not. Any ideas?

public override void Cleanup()

{

ComponentMetaData.FireInformation(0, ComponentMetaData.Name,

"Inserted " + m_rowCount.ToString() + " rows into " + m_fileName,

"", 0, ref m_cancel);

base.Cleanup(); // or not

}

This message comes from the engine and you can not stop it from occuring. To set it correctly you need to call the IncrementPipelinePerfCounters(counter, difference) method on the IDTSComponentMetaData90 interface.

The counter values are:

RowsRead: 101

RowsWritten: 103

BlobBytesRead: 116

BlobBytesWritten: 118

The difference value is the amount to increment the counter by.

Thanks,

Matt

|||

Thanks. That did the trick.

Apparently there are constants defined for the counter types, but I'm not sure where they are.

Here's the official help page:

http://msdn2.microsoft.com/en-us/library/microsoft.sqlserver.dts.pipeline.wrapper.idtscomponentmetadata90.incrementpipelineperfcounter.aspx

|||

The constants for the counter types are listed in the Remarks section of the BOL page for which you pasted the link. Are those not what you were looking for?

-Doug

|||

Those constants work. I was hoping to be able to access the constants by an actual constant, instead of having to hard-code the number.

I would rather have code that looks like this:

ComponentMetaData.IncrementPipelinePerfCounter(DTS_PIPELINE_ROWS_WRITTEN, m_rowCount);

than this:

ComponentMetaData.IncrementPipelinePerfCounter(103, m_rowCount);

For now I just created a local constant with the above name and that works fine.

private const uint DTS_PIPELINE_ROWS_WRITTEN = 103;

Maybe those constants are exposed somewhere, but I could not figure out where.

|||

Excuse me for missing the point.

I suspect that these counter constants are defined in the native pipeline engine and not exposed in any of the managed classes...that would explain why this managed method expects an integer value and not an enum value. You could create your own enumeration for this purpose.

-Doug

Custom dataflow component: How do you make properties editable?

I have a custom component that takes in unicode stream and converts it to ascii text. However I would like to make my default string length and code page editable in the standard GUI editor. Right now I can set the default to 1000 characters, but when I try to change it, it says "Property value is not valid"

Any ideas?

Thanks!

I assume you define your property in ProvideComponentProperties? Can you post the code just to be clear?

By default this is all you need to do, the property should then be listed in teh Advanced UI and also in the Visual Studio designer property grid. You would have to do some extra special stuff to make it read-only.

I would check the data type of your property and see what value you have entered, it maybe a simple data conversion issue. To be sure of the property type I woudl view the package XML and find your property and look for the dataType. When you define properties in code, there is no way to really specify the type, it is kind of guess work based on the default value, and it does get it wrong sometimes.

Some package XML to illustrate where you should look...

blah...blah...

<component id="174" name="Your Component Name" componentClassID=.......>

<properties>

<property id="175" name="Your Property" dataType="System.Int32 CHECK THIS"....

Saturday, February 25, 2012

Custom Data Flow Components, DllImport, and third party dlls

I've been having an issue with the integration of a third-party DLL into a custom data flow component.

The company sent me a C# project that generates a simple console application. The project includes a class that calls their DLL with DllImport. The console application runs fine.

I created a stand-alone class using the C# class they sent to expose the methods of their DLL. In my custom component, I'm referencing this class to pass data to and from their DLL.

The first method from that stand-alone class that my component encounters simply gets their installation path from the registry and does not use DllImport. That path retrieval works fine. The next method calls a function that is declared with DllImport. Each time the call fails with "System.DllNotFoundException = {"Unable to load DLL AMZip.dll': Exception from HRESULT: 0xE06D7363"}".

I've copied this DLL to countless locations (e.g., the PipelineComponents directory, the project/solution bin directory) and included these paths in all manner of path variables.

What am I missing here? Their DLL is not strong named (does this matter since I'm using DllImport?), my stand-alone class is, and of course, the custom component itself is. I appreciate the help.

No bites, eh? OK, is there a standard directory for C++ dlls used in custom components?|||I think the question on everyone's mind is, what does this have to do with SSIS?|||Strictly speaking, your question might be better served in a C# forum or something. While we do custom development here, this isn't a programming forum.|||

Phil Brammer wrote:

I think the question on everyone's mind is, what does this have to do with SSIS?

Thanks for giving me the opportunity to explain why I posted this question in the SSIS forum!

Like I said, the class in my sample console application hums like a sewing machine. When I try to integrate it into an SSIS component it fails by an error for which I can find no explanation and the finest .NET programmer I know can find no explanation, having not dealt much with SSIS internals. There aren't a whole lot of people on Earth who program SSIS components, but one place they can be sure to be found is on this forum.

I guess the upshot is, I'm hoping to get a suggested nugget from someone who may have been down this road before, as opposed to a cocksure question.

|||If your application is built on the .net 2.0 framework, then this shouldn't be that hard. The 1.1 framework won't work in SSIS, I believe.

Getting your DLLs registered in the GAC might also help.|||

The third-party component in question is a C DLL. It has dependencies to msvcm80.dll, msvcp80.dll, msvcr80.dll, and Microsoft.VC80.CRT.manifest. I have a wrapper class for the DLL with DllIImport statements that makes its functions available for .NET.

The question is... does SSIS look for non-.NET dependencies in the system path? They are obviously not in the GAC since they're not .NET.

I am getting an error that leads me to believe the dependencies are not found; however, they are in one of the directories in the system path. What else can I do to get SSIS to find them?

|||

I would expect SSIS to behave much like any other program. Really the SSIS package will be hosted, but I would expect system32 to be a good location. Similarly your dependencies for the C++ DLL would need to be there. You could look at the SSIS install bin folder, not the project, but is a bit unreliable as may not always use a MS host that is in that bin folder. Getting system32 to work I think would be better in the same way that we say always put .Net dependencies in the GAC to ensure the runtime can find what it needs.

So if you try or have tried system32 and it still fails, what is missing? Use Filemon to look for file not found or access denied events and see where it is really looking. http://www.microsoft.com/technet/sysinternals/default.mspx

|||Are you using Vista? Ever since I brought my applications into Vista, I get that error when I try to link any DLL other than windows API. The same applications worked fine on XP. I copied the file all over the place and used the full path when linking and it still says that. I get this problem with all languages, not just C#.|||

Solution -1

1.Copy DLLS to your application\ bin folder(Virtual Dir)

2. Then do the following in code.........before you do a pInvoke

StringBuilder LocalFolder = new StringBuilder(AppDomain.CurrentDomain.BaseDirectory);

LocalFolder.Append("bin");

Directory.SetCurrentDirectory(LocalFolder.ToString());

3. Then give security permission "modify" for the "bin" folder for the following

a. ASP.Net Machine accounts..

b. Network services

c. youself!!!!!!!!!!(ur login)..

4. Try ur luck..

This happens when u are in a comapany with strict access

DISCLAIMER...

I tested it out..works for me..may not work for u..I am not responsible for the damage caused due to this post

Soultion -2

The Administrator need to grant you access to the ASP.NET temporary directory (somewhere in the WINNT ).

DISCLAIMER...

I didn't test it out...got a clue from net..which lead to my solution..I am posting it bcos it may help other poor souls who has this problem..I am not responsible for the damage caused due to this post.

Pls exuce my weak knowledge of .net tehnologies.. I am a C++ /Windows programmer forced to do .Net deployment

Custom Data Flow Components, DllImport, and third party dlls

I've been having an issue with the integration of a third-party DLL into a custom data flow component.

The company sent me a C# project that generates a simple console application. The project includes a class that calls their DLL with DllImport. The console application runs fine.

I created a stand-alone class using the C# class they sent to expose the methods of their DLL. In my custom component, I'm referencing this class to pass data to and from their DLL.

The first method from that stand-alone class that my component encounters simply gets their installation path from the registry and does not use DllImport. That path retrieval works fine. The next method calls a function that is declared with DllImport. Each time the call fails with "System.DllNotFoundException = {"Unable to load DLL AMZip.dll': Exception from HRESULT: 0xE06D7363"}".

I've copied this DLL to countless locations (e.g., the PipelineComponents directory, the project/solution bin directory) and included these paths in all manner of path variables.

What am I missing here? Their DLL is not strong named (does this matter since I'm using DllImport?), my stand-alone class is, and of course, the custom component itself is. I appreciate the help.

No bites, eh? OK, is there a standard directory for C++ dlls used in custom components?|||I think the question on everyone's mind is, what does this have to do with SSIS?|||Strictly speaking, your question might be better served in a C# forum or something. While we do custom development here, this isn't a programming forum.|||

Phil Brammer wrote:

I think the question on everyone's mind is, what does this have to do with SSIS?

Thanks for giving me the opportunity to explain why I posted this question in the SSIS forum!

Like I said, the class in my sample console application hums like a sewing machine. When I try to integrate it into an SSIS component it fails by an error for which I can find no explanation and the finest .NET programmer I know can find no explanation, having not dealt much with SSIS internals. There aren't a whole lot of people on Earth who program SSIS components, but one place they can be sure to be found is on this forum.

I guess the upshot is, I'm hoping to get a suggested nugget from someone who may have been down this road before, as opposed to a cocksure question.

|||If your application is built on the .net 2.0 framework, then this shouldn't be that hard. The 1.1 framework won't work in SSIS, I believe.

Getting your DLLs registered in the GAC might also help.|||

The third-party component in question is a C DLL. It has dependencies to msvcm80.dll, msvcp80.dll, msvcr80.dll, and Microsoft.VC80.CRT.manifest. I have a wrapper class for the DLL with DllIImport statements that makes its functions available for .NET.

The question is... does SSIS look for non-.NET dependencies in the system path? They are obviously not in the GAC since they're not .NET.

I am getting an error that leads me to believe the dependencies are not found; however, they are in one of the directories in the system path. What else can I do to get SSIS to find them?

|||

I would expect SSIS to behave much like any other program. Really the SSIS package will be hosted, but I would expect system32 to be a good location. Similarly your dependencies for the C++ DLL would need to be there. You could look at the SSIS install bin folder, not the project, but is a bit unreliable as may not always use a MS host that is in that bin folder. Getting system32 to work I think would be better in the same way that we say always put .Net dependencies in the GAC to ensure the runtime can find what it needs.

So if you try or have tried system32 and it still fails, what is missing? Use Filemon to look for file not found or access denied events and see where it is really looking. http://www.microsoft.com/technet/sysinternals/default.mspx

|||Are you using Vista? Ever since I brought my applications into Vista, I get that error when I try to link any DLL other than windows API. The same applications worked fine on XP. I copied the file all over the place and used the full path when linking and it still says that. I get this problem with all languages, not just C#.|||

Solution -1

1.Copy DLLS to your application\ bin folder(Virtual Dir)

2. Then do the following in code.........before you do a pInvoke

StringBuilder LocalFolder = new StringBuilder(AppDomain.CurrentDomain.BaseDirectory);

LocalFolder.Append("bin");

Directory.SetCurrentDirectory(LocalFolder.ToString());

3. Then give security permission "modify" for the "bin" folder for the following

a. ASP.Net Machine accounts..

b. Network services

c. youself!!!!!!!!!!(ur login)..

4. Try ur luck..

This happens when u are in a comapany with strict access

DISCLAIMER...

I tested it out..works for me..may not work for u..I am not responsible for the damage caused due to this post

Soultion -2

The Administrator need to grant you access to the ASP.NET temporary directory (somewhere in the WINNT ).

DISCLAIMER...

I didn't test it out...got a clue from net..which lead to my solution..I am posting it bcos it may help other poor souls who has this problem..I am not responsible for the damage caused due to this post.

Pls exuce my weak knowledge of .net tehnologies.. I am a C++ /Windows programmer forced to do .Net deployment

Custom Data Flow Components, DllImport, and third party dlls

I've been having an issue with the integration of a third-party DLL into a custom data flow component.

The company sent me a C# project that generates a simple console application. The project includes a class that calls their DLL with DllImport. The console application runs fine.

I created a stand-alone class using the C# class they sent to expose the methods of their DLL. In my custom component, I'm referencing this class to pass data to and from their DLL.

The first method from that stand-alone class that my component encounters simply gets their installation path from the registry and does not use DllImport. That path retrieval works fine. The next method calls a function that is declared with DllImport. Each time the call fails with "System.DllNotFoundException = {"Unable to load DLL AMZip.dll': Exception from HRESULT: 0xE06D7363"}".

I've copied this DLL to countless locations (e.g., the PipelineComponents directory, the project/solution bin directory) and included these paths in all manner of path variables.

What am I missing here? Their DLL is not strong named (does this matter since I'm using DllImport?), my stand-alone class is, and of course, the custom component itself is. I appreciate the help.

No bites, eh? OK, is there a standard directory for C++ dlls used in custom components?|||I think the question on everyone's mind is, what does this have to do with SSIS?|||Strictly speaking, your question might be better served in a C# forum or something. While we do custom development here, this isn't a programming forum.|||

Phil Brammer wrote:

I think the question on everyone's mind is, what does this have to do with SSIS?

Thanks for giving me the opportunity to explain why I posted this question in the SSIS forum!

Like I said, the class in my sample console application hums like a sewing machine. When I try to integrate it into an SSIS component it fails by an error for which I can find no explanation and the finest .NET programmer I know can find no explanation, having not dealt much with SSIS internals. There aren't a whole lot of people on Earth who program SSIS components, but one place they can be sure to be found is on this forum.

I guess the upshot is, I'm hoping to get a suggested nugget from someone who may have been down this road before, as opposed to a cocksure question.

|||If your application is built on the .net 2.0 framework, then this shouldn't be that hard. The 1.1 framework won't work in SSIS, I believe.

Getting your DLLs registered in the GAC might also help.|||

The third-party component in question is a C DLL. It has dependencies to msvcm80.dll, msvcp80.dll, msvcr80.dll, and Microsoft.VC80.CRT.manifest. I have a wrapper class for the DLL with DllIImport statements that makes its functions available for .NET.

The question is... does SSIS look for non-.NET dependencies in the system path? They are obviously not in the GAC since they're not .NET.

I am getting an error that leads me to believe the dependencies are not found; however, they are in one of the directories in the system path. What else can I do to get SSIS to find them?

|||

I would expect SSIS to behave much like any other program. Really the SSIS package will be hosted, but I would expect system32 to be a good location. Similarly your dependencies for the C++ DLL would need to be there. You could look at the SSIS install bin folder, not the project, but is a bit unreliable as may not always use a MS host that is in that bin folder. Getting system32 to work I think would be better in the same way that we say always put .Net dependencies in the GAC to ensure the runtime can find what it needs.

So if you try or have tried system32 and it still fails, what is missing? Use Filemon to look for file not found or access denied events and see where it is really looking. http://www.microsoft.com/technet/sysinternals/default.mspx

|||Are you using Vista? Ever since I brought my applications into Vista, I get that error when I try to link any DLL other than windows API. The same applications worked fine on XP. I copied the file all over the place and used the full path when linking and it still says that. I get this problem with all languages, not just C#.|||

Solution -1

1.Copy DLLS to your application\ bin folder(Virtual Dir)

2. Then do the following in code.........before you do a pInvoke

StringBuilder LocalFolder = new StringBuilder(AppDomain.CurrentDomain.BaseDirectory);

LocalFolder.Append("bin");

Directory.SetCurrentDirectory(LocalFolder.ToString());

3. Then give security permission "modify" for the "bin" folder for the following

a. ASP.Net Machine accounts..

b. Network services

c. youself!!!!!!!!!!(ur login)..

4. Try ur luck..

This happens when u are in a comapany with strict access

DISCLAIMER...

I tested it out..works for me..may not work for u..I am not responsible for the damage caused due to this post

Soultion -2

The Administrator need to grant you access to the ASP.NET temporary directory (somewhere in the WINNT ).

DISCLAIMER...

I didn't test it out...got a clue from net..which lead to my solution..I am posting it bcos it may help other poor souls who has this problem..I am not responsible for the damage caused due to this post.

Pls exuce my weak knowledge of .net tehnologies.. I am a C++ /Windows programmer forced to do .Net deployment

Custom Data Flow Component Column Mapping Question

Hi,

I'm having my first go at developing a destination adapter which will send data to an update Web Service.

I've got some rather big gaps in my understanding. I've been following the various samples I've found on the net and have validated my mapping and picked up all the available column names and datatypes which are appearing in the Input and Output Properties tab of the Advanced Editor but I only have a tab for "Input Columns" and not "Column Mappings".

Which method defines the availble columns for the user to map?

Let me know if I haven't given enough information.

cheers

sorry - I had searched already but somehow missed this post which answered my question: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=239126&SiteID=1

I was having the same confusion about input and output, thinking that because i was creating a *destination* adapter, that I should be creating outputs not inputs [if that makes sense].

Custom ControlFlow

I am trying to design a Component which can be configured by a UI. After Configuration from the Design pane the Data should be passed to the back-end of the Component.
When I look at some code samples I only see, that it's possible to pass simple data.
What I want is to put a grid on the UI and connect it to a DataTable. This is used for displaying and changing a configuration as a table.
Well, the question is: Can I pass the DataTable object to the backend-DLL as is? If so then how?
THX
Fridtjof
Can you please clarify whether you are creating a custom Task or a custom Data Flow Component, or another type of run-time object like a connection manager? The APIs are similar but not identical.

-Doug
|||From your subect I assume you mean a Task. Why can you not just create a property of your task, typed as a DataTable?|||Well I don't have any instance of the Backend Class in the Definition of the UI-Class, have I?
If I had one there would be no problem setting the DataSource of the Grid to that DataTable.
|||

You keep referring to the backend-class, do you mean the task itself, the class that inherits from Task?

If so you should have a reference to it in the UI. You need to cache it and pass it through, but otherwise there is not much point to the UI.

Review this code form one of my tasks. This is the UI class, the one that inherits from IDtsTaskUI. My form is ZipFileTaskUIForm, and has a modified constructor to accept the parameters passed through. You can see the TaskHost is cached in Initialize, and then passed to the form. This is how you get a reference to your task into the form.


public System.Windows.Forms.ContainerControl GetView()
{
return new ZipFileTaskUIForm(_taskHost, _dtsConnectionService, _dtsVariableService);
}
public void Initialize(TaskHost taskHost, IServiceProvider serviceProvider)
{
_taskHost = taskHost;

IDtsVariableService dtsVariableService = serviceProvider.GetService(typeof(IDtsVariableService)) as IDtsVariableService;
IDtsConnectionService dtsConnectionService = serviceProvider.GetService(typeof(IDtsConnectionService)) as IDtsConnectionService;
_dtsConnectionService = dtsConnectionService;
_dtsVariableService = dtsVariableService;
}


|||To your question: Yes I mean the class which inherits from Task! That's what I call Backend-Class.
Your code is from the Class which inherits from IDtsTaskUI.
The question is how can you access public members of my Backend-Class in the UI (Form).
Maybe I have to convert and cache then, because the ui is called at design-time and the Backend at runtime?
|||Your form should be invoked from the UI class (IDtsTaskUI). The sample I showed demonstrates grabbing TaskHost, and passing it through to the form. You use the TaskHost to access properies of the task itself. You cannot get direct access to the Task instance, but you should not actually need to as you have TaskHost instead.
If you have code that you wish to share between trasjk and UI classes, then make them public static. Instance members would not work anyway since you cannot get the instance.

|||In addition to the Initialize method in the UI class that comes from the IDtsXxxUI interface, I would be inclined to write an Initialize method of my own in my Windows Forms class and pass along a reference to my task or other object, so I can easily read its current property values to set initial control states and values, then update its properties from the controls when the user closes the form.

So Task passes reference to itself in calling Initialize in Task UI class, and Task UI class passes reference to task in calling custom Initialize method in Task UI Form class.

-Doug
|||

I am also facing same problem. When i explored i came to know that there was two method SaveToXML() and LoadXML() of IDTSPersist90 interface to handle this type of scenerio. But i could not able to raise these methods. you can transfer either string or interger...etc, but if you want to transfer some custom object i think you have to preserve the same in xml and retrieve it when ever needed

...Karun

|||

As I understand the issue, bearing in mind this thread crossed several, none of which matched the title that well, but you are writing a task and have a complex type that you need to persist. All persistance is through XML, and for complex stuff you need to implement IDTSPersist90 yourself. The methods are never called by you, they are called by the designer. You fill in the code to save and load the values to and from the XML document provided, and you can choose how you store the information in the XML.

For objects, I found the easiest way to to serialize them, and actually binary serialization at that. This snippet gives me a string that I can easily store in an xml element for the property.

public static string SerializeObject(object graph) { BinaryFormatter formatter1 = new BinaryFormatter(); MemoryStream stream1 = new MemoryStream(); formatter1.Serialize(stream1, graph); string text1 = Convert.ToBase64String(stream1.GetBuffer()); stream1.Close(); return text1; }

Another alternative is to use reflection to read an object's properties, and then build up an XML node that represents this. Here is an example of creating a new element with sub elements for each property-

public static XmlElement AddXmlObjectProperties(XmlElement parentElement, string propertyName, object propertyObject) { XmlElement element1 = XMLPersistanceHelper.AddXmlElement(parentElement, propertyName); Type type1 = propertyObject.GetType(); foreach (PropertyInfo info1 in type1.GetProperties()) { Type type2 = info1.PropertyType; string text1 = type2.Name; object obj1 = info1.GetValue(propertyObject, null); if (type2.IsEnum) { obj1 = Convert.ToInt32(info1.GetValue(propertyObject, null)); } if (obj1 != null) { XmlElement element2 = XMLPersistanceHelper.AddXmlElement(element1, "Property", obj1.ToString()); XMLPersistanceHelper.AddXmlAttribute(element2, "Name", info1.Name); XMLPersistanceHelper.AddXmlAttribute(element2, "Type", text1); } } return element1; }

Custom ControlFlow

I am trying to design a Component which can be configured by a UI. After Configuration from the Design pane the Data should be passed to the back-end of the Component.
When I look at some code samples I only see, that it's possible to pass simple data.
What I want is to put a grid on the UI and connect it to a DataTable. This is used for displaying and changing a configuration as a table.
Well, the question is: Can I pass the DataTable object to the backend-DLL as is? If so then how?
THX
Fridtjof
Can you please clarify whether you are creating a custom Task or a custom Data Flow Component, or another type of run-time object like a connection manager? The APIs are similar but not identical.

-Doug
|||From your subect I assume you mean a Task. Why can you not just create a property of your task, typed as a DataTable?|||Well I don't have any instance of the Backend Class in the Definition of the UI-Class, have I?
If I had one there would be no problem setting the DataSource of the Grid to that DataTable.
|||

You keep referring to the backend-class, do you mean the task itself, the class that inherits from Task?

If so you should have a reference to it in the UI. You need to cache it and pass it through, but otherwise there is not much point to the UI.

Review this code form one of my tasks. This is the UI class, the one that inherits from IDtsTaskUI. My form is ZipFileTaskUIForm, and has a modified constructor to accept the parameters passed through. You can see the TaskHost is cached in Initialize, and then passed to the form. This is how you get a reference to your task into the form.


public System.Windows.Forms.ContainerControl GetView()
{
return new ZipFileTaskUIForm(_taskHost, _dtsConnectionService, _dtsVariableService);
}
public void Initialize(TaskHost taskHost, IServiceProvider serviceProvider)
{
_taskHost = taskHost;

IDtsVariableService dtsVariableService = serviceProvider.GetService(typeof(IDtsVariableService)) as IDtsVariableService;
IDtsConnectionService dtsConnectionService = serviceProvider.GetService(typeof(IDtsConnectionService)) as IDtsConnectionService;
_dtsConnectionService = dtsConnectionService;
_dtsVariableService = dtsVariableService;
}


|||To your question: Yes I mean the class which inherits from Task! That's what I call Backend-Class.
Your code is from the Class which inherits from IDtsTaskUI.
The question is how can you access public members of my Backend-Class in the UI (Form).
Maybe I have to convert and cache then, because the ui is called at design-time and the Backend at runtime?
|||Your form should be invoked from the UI class (IDtsTaskUI). The sample I showed demonstrates grabbing TaskHost, and passing it through to the form. You use the TaskHost to access properies of the task itself. You cannot get direct access to the Task instance, but you should not actually need to as you have TaskHost instead.
If you have code that you wish to share between trasjk and UI classes, then make them public static. Instance members would not work anyway since you cannot get the instance.

|||In addition to the Initialize method in the UI class that comes from the IDtsXxxUI interface, I would be inclined to write an Initialize method of my own in my Windows Forms class and pass along a reference to my task or other object, so I can easily read its current property values to set initial control states and values, then update its properties from the controls when the user closes the form.

So Task passes reference to itself in calling Initialize in Task UI class, and Task UI class passes reference to task in calling custom Initialize method in Task UI Form class.

-Doug
|||

I am also facing same problem. When i explored i came to know that there was two method SaveToXML() and LoadXML() of IDTSPersist90 interface to handle this type of scenerio. But i could not able to raise these methods. you can transfer either string or interger...etc, but if you want to transfer some custom object i think you have to preserve the same in xml and retrieve it when ever needed

...Karun

|||

As I understand the issue, bearing in mind this thread crossed several, none of which matched the title that well, but you are writing a task and have a complex type that you need to persist. All persistance is through XML, and for complex stuff you need to implement IDTSPersist90 yourself. The methods are never called by you, they are called by the designer. You fill in the code to save and load the values to and from the XML document provided, and you can choose how you store the information in the XML.

For objects, I found the easiest way to to serialize them, and actually binary serialization at that. This snippet gives me a string that I can easily store in an xml element for the property.

public static string SerializeObject(object graph) { BinaryFormatter formatter1 = new BinaryFormatter(); MemoryStream stream1 = new MemoryStream(); formatter1.Serialize(stream1, graph); string text1 = Convert.ToBase64String(stream1.GetBuffer()); stream1.Close(); return text1; }

Another alternative is to use reflection to read an object's properties, and then build up an XML node that represents this. Here is an example of creating a new element with sub elements for each property-

public static XmlElement AddXmlObjectProperties(XmlElement parentElement, string propertyName, object propertyObject) { XmlElement element1 = XMLPersistanceHelper.AddXmlElement(parentElement, propertyName); Type type1 = propertyObject.GetType(); foreach (PropertyInfo info1 in type1.GetProperties()) { Type type2 = info1.PropertyType; string text1 = type2.Name; object obj1 = info1.GetValue(propertyObject, null); if (type2.IsEnum) { obj1 = Convert.ToInt32(info1.GetValue(propertyObject, null)); } if (obj1 != null) { XmlElement element2 = XMLPersistanceHelper.AddXmlElement(element1, "Property", obj1.ToString()); XMLPersistanceHelper.AddXmlAttribute(element2, "Name", info1.Name); XMLPersistanceHelper.AddXmlAttribute(element2, "Type", text1); } } return element1; }

Custom Component development questions

I have looked at everything I could find on custom components, and I'm still confused about what has to be implemented in ReinitializeMetadata. The first custom component I'm trying to build is very similar to the Audit component, a derived column synchronous transformation that should be able to create any non-empty subset of four types of output columns.

I haven't found anything that does much with the inputs, the samples all seem to rely on RemoveInvalidInputColumns. I haven't found any substantial explanation of what this method actually does, or whether there are cases it doesn't handle. If it really handles all problems on the input side I don't need to know the details, but I'd like to hear some confirmation that this is the case.

For outputs, most of the sample projects seem to just call the base method. Some projects throw out all the output columns and create new ones to match the input columns one-to-one. Project Real throws away all the output columns and external metadata columns and creates a standard set of output columns with external metadata. The RegEx sample project uses information in a component custom property to tell it what output columns to expect, then adds missing columns and deletes unwanted columns. All of these approaches are using some reference information to inform it which outputs belong and which don't. What do you do when there is no other reference, just the output column and external metadata column collections?

The description for this method is "fix the errors found in Validate", but these projects just delete everything that wasn't perfect and recreate anything missing. In cases where the number and types of output columns require some user configuration, maybe a few custom properties, it seems a little high-handed to throw it all away and make them start from scratch. Or do you assume that this method isn't called unless the component state is really screwed up? It seems to me that simply adding or deleting input and output columns in the Advanced Editor would trigger ReinitializeMetadata because the external metadata would be out of sync. If it reacted by immediately re-adding an optional default column you deleted, or deleting an unconfigured column you just added, it would be pretty annoying.

Assuming that I wanted ReinitializeMetadata to actually fix things, I have some specific questions:

1 If an output column is not mapped to an external metadata column (or mapped to a nonexistent emc), should the output column be deleted or should a matching external column be created?

2 Same question reversed, if an external column is not mapped to any output column, should it be deleted or a matching output column created?

3 Would it make sense to look for compatible unmapped output and external columns and remap them?

4 If the user adds or deletes an output column in the advanced editor, was that an output column or an external metadata column?

And another thing, is there a definative list of which methods should be marked as not cls-compliant?

If your component is similar to Audit you do not need to worry about external columns, or input columns or ReinitializeMetadata.

All you need to do is to allow inserting output columns (implement InsertOutputColumn) and probably add a custom property to identify them. They can be added using the advanced editor.

You can look at the metadata of Audit transform in the advanced editor to get an idea.

|||

I asked for enlightenment, and a reply of "you do not need to worry about it" doesn't really help. If my next project is a more complicated component I'll need to worry about it, so I'm still trying to get a more fundamental understanding if the design-time behavior. I'm not optimistic enough to expect my first component project to work the first time, and to debug it I think I need to know more about what the base class does, what behavior I need to add to it, and what I should avoid doing to it.

My basic problem is that I don't feel the published documentation or available sample code give me a good general idea of what a fully-featured and robust implementation of a custom component should include.

I have looked at the Audit transform in the advanced editor, and it is very close to what I need (at least for outputs). One question that it answered was that changing the ouput column datatype as a side effect of a custom property change is apparently legal (I assume this is happening in SetOutputColumnProperty). It appears to have a custom editor UI for the custom property, but knowing that one exists doesn't help me build my own.

The Calendar sample project showed me everything I needed to know about creating a TypeConverter for my custom properties. I think a lot of my current questions would be answered if I could get sample code for the design-time behavior of the Audit component. Is there any chance of that happening?

|||

It is good to get feedback on specific gaps in the documentation - the docs team watch this forum very careful to plan their future content. So, while you won't see code for our stock components being shared, you may well see these issues addressed in future samples. Our documentation in 2005 is progressive and is being constantly refreshed.

Meanwhile, let's see if we can get you some answers to those questions - but do bear in mind that Bob was trying to help you with your specific needs to help you over a bump in developing your component, rather than giving a detailed advanced tutorial. Forums are great for the former, not so good for the latter.

Donald

|||

Unless you understand why you would need to use external metadata, and for normal transforms you do not, then these answers may not make sense, and certainly don't apply to an Audit style transform.

1 If an output column is not mapped to an external metadata column (or mapped to a nonexistent emc), should the output column be deleted or should a matching external column be created?

Delete the output column. This is an invalid state, and with correct coding of the component it should never happen. The best defense is to override all the input/output and column methods on the PipelineComponent class. Throw errors if people try and do something silly. Then only way left for someone to mess it up is via code as your UI and the Advanced Ui should both use the managed wrapper when manipulating columns etc.

2 Same question reversed, if an external column is not mapped to any output column, should it be deleted or a matching output column created?

It should be left alone really, although that depends on the component design. Normally you create the output column and map to "select" it. Not all external columns have to be selected, in most components at least, hence component design.

3 Would it make sense to look for compatible unmapped output and external columns and remap them?

You should look for invalid mappings and silly stuff in Validate, and return the needs new metadata status. If you then fix them in RMD, well that is up to you. What is you component supposed to do. Simple fixes I'd say go for it, but think how it may impact the user, and could it give new meaning to what they wanted originally? Saying that see answers for 1 and 2 first.

4 If the user adds or deletes an output column in the advanced editor, was that an output column or an external metadata column?

An output column.

And another thing, is there a definative list of which methods should be marked as not cls-compliant?

The compiler will warn you. Set true at the assembly level, then any methods which are non-compliant and not attributed as such will generate a warning, so easy enough to pick up and fix.

Custom Component - Change Data Type

I am developing a custom pipeline component (my first real one) which will handle input columns in a DT_NUMERIC format and convert them to a DT_DATE format. Sort of like the included Data Conversion component, but with some built in business logic. The Data Conversion component puts the converted data in a new column in the output buffer. I would like to keep the data in the same column. So, in my input buffer the column would be of type DT_NUMERIC, but in the output buffer I want to make it DT_DATE.

What is the best approach to do this?

-DarrellUnless you want you component to have to copy data from the input to the ouput you can not do this. There are 2 types of outputs, synchronous and asynchronous. The synchronous one is simple and requires no data copying or column creation (except of course for the new column you would produce of the DT_DATE type). However, because of this you can't change column types and that is why the derived column doesn't allow this. The asynchronous one is complex. You have to create all the output columns and keep them in sync with the input columns and know how to map the input columns to the output columns so that you can copy the data to the correct place. My advise is use a sync output and live with the additional column unless it is absolutely necessary to use and async output.

HTH,
Matt

Sunday, February 19, 2012

Custom Charting

Hey can I write my own charting component for Reporting Services? Where
could I find information on that?
Thanks,
CJHello CJ,
Generally the answer you'll get to that question is "no" you cannot create
your own charting component for Reporting Services.
What you can't do easily is create a new custom component that you can host
in a Report and in the Report Designer.
However if you are prepared to make some compromises you most certainly can
create a custom component that takes your data and generates an image stream
that is displayed in a Reporting Services Image control.
This is usually best done by creating a custom data processing extension,
and ensuring that one field is an image stream of the data, but if you think
carfully about how to get all the data your component requires parsed into a
DataSet field then you can do this entirely in a function within a custom
assembly. What you do there is pass in the DataSet field containing your
parsed data, and have the Function work with this data and return an image
stream.
ok - so that is indeed only going to return a static image of your
component, but depending on what you are trying to do, you may be able to
programmatically set the Jump to URL Action property of the image control
containing the image of your component to jump to a URL in which you might
have a more fully functional and interactive version of the component.
I think future versions of Reporting Services would be missing a trick if
they don't provide a straightforward mechanism for hosting custom components
within reports, although there are doubtless architechural issues that the
developers will have to work out.
Peter Blackburn
Windows Server Systems - SQL Server MVP
Author: Hitchhiker's Guide to SQL Server Reporting Services
http://www.sqlreportingservices.net
"CJ Taylor" <nono@.nono.com> wrote in message
news:%23rmBRmqyEHA.1452@.TK2MSFTNGP11.phx.gbl...
> Hey can I write my own charting component for Reporting Services? Where
> could I find information on that?
> Thanks,
> CJ
>

Friday, February 17, 2012

custom assemblies problem

I have built a custom assembly, I copied it to the right folders and wrote
some code to call the component.
It works fine in preview mode, but when I deploy the report to another
server I get the error:
"error while loading code module 'x', version='x' ..."
I feel I tried everything, copying the dll myself to the server's
reportserver\bin folder, giving read & execute permissions, creating the xml
nodes in the RSReportServer.config on the server etc.
Always that error.
Is there some description on what to do if you deploy your reports with
custom assemblies to another server?This is a multi-part message in MIME format.
--=_NextPart_000_005C_01C5078D.1745CA00
Content-Type: text/plain;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
might be a code access security problem
to diagnose (do not do this on a production server) please find =rssrvpolicy.config file in ReportServer folder and modify the following:
old:
<CodeGroup class=3D"FirstMatchCodeGroup"
version=3D"1"
PermissionSetName=3D"Nothing">
new:
<CodeGroup class=3D"FirstMatchCodeGroup"
version=3D"1"
PermissionSetName=3D"FullTrust">
Restart iis and see if it runs the report, let me know the results. If =it runs - it's a security problem, I will let you know further steps.
! Please undo the change of rssrvpolicy.config afterwards...!
-- Alex Mineev
Software Design Engineer. Report expressions; Code Access Security; Xml; =SQE.
This posting is provided "AS IS" with no warranties, and confers no =rights
"Serv=E9 La" <blabla@.bestaatniet.nl> wrote in message =news:OP9Oyq6BFHA.1004@.TK2MSFTNGP15.phx.gbl...
> I have built a custom assembly, I copied it to the right folders and =wrote
> some code to call the component.
> It works fine in preview mode, but when I deploy the report to another
> server I get the error:
> "error while loading code module 'x', version=3D'x' ..."
> > I feel I tried everything, copying the dll myself to the server's
> reportserver\bin folder, giving read & execute permissions, creating =the xml
> nodes in the RSReportServer.config on the server etc.
> > Always that error.
> > Is there some description on what to do if you deploy your reports =with
> custom assemblies to another server?
> >
--=_NextPart_000_005C_01C5078D.1745CA00
Content-Type: text/html;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
&

might be a code access security problem
to diagnose (do not do this on a production server) =please find rssrvpolicy.config file in ReportServer folder and modify the following:
old:
&nbs=p; new:
&nbs=p;
Restart iis and see if it runs the report, let me =know the results. If it runs - it's a security problem, I will let you know =further steps.
! Please undo the change of rssrvpolicy.config afterwards...!
-- Alex MineevSoftware Design Engineer. =Report expressions; Code Access Security; Xml; SQE.
This posting is provided "AS IS" with no warranties, =and confers no rights
"Serv=E9 La" wrote in =message news:OP9Oyq6BFHA.1004@.TK2MSFTNGP15.phx.gbl...> I have built a custom =assembly, I copied it to the right folders and wrote> some code to call the component.> It works fine in preview mode, but when I deploy the =report to another> server I get the error:> "error while loading =code module 'x', version=3D'x' ..."> > I feel I tried =everything, copying the dll myself to the server's> reportserver\bin folder, giving =read & execute permissions, creating the xml> nodes in the RSReportServer.config on the server etc.> > Always that error.> > Is there some description on what to do if you =deploy your reports with> custom assemblies to another server?> =>

--=_NextPart_000_005C_01C5078D.1745CA00--|||This is a multi-part message in MIME format.
--=_NextPart_000_0013_01C50905.46797AA0
Content-Type: text/plain;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Thank you for answering. The problem was solved, it was a stupid mistake =of mine.
The good news is that the FullTrust setting did help me later when I =needed to load assemblies from report code :)
"Alexandre Mineev [MSFT]" <almineev@.microsoft.com> schreef in bericht =news:eAOfmA9BFHA.1260@.TK2MSFTNGP12.phx.gbl...
might be a code access security problem
to diagnose (do not do this on a production server) please find =rssrvpolicy.config file in ReportServer folder and modify the following:
old:
<CodeGroup class=3D"FirstMatchCodeGroup"
version=3D"1"
PermissionSetName=3D"Nothing">
new:
<CodeGroup class=3D"FirstMatchCodeGroup"
version=3D"1"
PermissionSetName=3D"FullTrust">
Restart iis and see if it runs the report, let me know the results. If =it runs - it's a security problem, I will let you know further steps.
! Please undo the change of rssrvpolicy.config afterwards...!
-- Alex Mineev
Software Design Engineer. Report expressions; Code Access Security; =Xml; SQE.
This posting is provided "AS IS" with no warranties, and confers no =rights
"Serv=E9 La" <blabla@.bestaatniet.nl> wrote in message =news:OP9Oyq6BFHA.1004@.TK2MSFTNGP15.phx.gbl...
> I have built a custom assembly, I copied it to the right folders and =wrote
> some code to call the component.
> It works fine in preview mode, but when I deploy the report to =another
> server I get the error:
> "error while loading code module 'x', version=3D'x' ..."
> > I feel I tried everything, copying the dll myself to the server's
> reportserver\bin folder, giving read & execute permissions, creating =the xml
> nodes in the RSReportServer.config on the server etc.
> > Always that error.
> > Is there some description on what to do if you deploy your reports =with
> custom assemblies to another server?
> >
--=_NextPart_000_0013_01C50905.46797AA0
Content-Type: text/html;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
&

Thank you for answering. The problem =was solved, it was a stupid mistake of mine.
The good news is that the FullTrust =setting did help me later when I needed to load assemblies from report code :)
"Alexandre Mineev [MSFT]" =schreef in bericht news:eAOfmA9BFHA.1260=@.TK2MSFTNGP12.phx.gbl...
might be a code access security =problem
to diagnose (do not do this on a production =server) please find rssrvpolicy.config file in ReportServer folder and modify the following:
old:
&nbs=p; new:
&nbs=p;
Restart iis and see if it runs the report, let me =know the results. If it runs - it's a security problem, I will let you know =further steps.

! Please undo the change of =rssrvpolicy.config afterwards...!
-- Alex MineevSoftware Design =Engineer. Report expressions; Code Access Security; Xml; SQE.

This posting is provided "AS IS" with no =warranties, and confers no rights
"Serv=E9 La" wrote in =message news:OP9Oyq6BFHA.1004@.TK2MSFTNGP15.phx.gbl...> I have built a custom =assembly, I copied it to the right folders and wrote> some code to call the = component.> It works fine in preview mode, but when I deploy =the report to another> server I get the error:> "error while =loading code module 'x', version=3D'x' ..."> > I feel I tried =everything, copying the dll myself to the server's> reportserver\bin =folder, giving read & execute permissions, creating the xml> nodes in the RSReportServer.config on the server etc.> > Always that error.> > Is there some description on what to do if you =deploy your reports with> custom assemblies to another server?> = >

--=_NextPart_000_0013_01C50905.46797AA0--|||This is a multi-part message in MIME format.
--=_NextPart_000_000F_01C50916.FB775740
Content-Type: text/plain;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Please do not use FullTrust in production environment. It ultimately =opens RS for attacks.
The use of FullTrust was needed for diagnostics only.
This article describe what needs to be done for custom assemblies if =they do not work by default: =http://msdn.microsoft.com/library/default.asp?url=3D/library/en-us/RSPROG=
/htm/rsp_prog_rdl_8mue.asp
-- Alex Mineev
Software Design Engineer. Report expressions; Code Access Security; Xml; =SQE.
This posting is provided "AS IS" with no warranties, and confers no =rights
"Serv=E9 La" <blabla@.bestaatniet.nl> wrote in message =news:uSURmzPCFHA.3492@.TK2MSFTNGP12.phx.gbl...
Thank you for answering. The problem was solved, it was a stupid =mistake of mine.
The good news is that the FullTrust setting did help me later when I =needed to load assemblies from report code :)
"Alexandre Mineev [MSFT]" <almineev@.microsoft.com> schreef in =bericht news:eAOfmA9BFHA.1260@.TK2MSFTNGP12.phx.gbl...
might be a code access security problem
to diagnose (do not do this on a production server) please find =rssrvpolicy.config file in ReportServer folder and modify the following:
old:
<CodeGroup class=3D"FirstMatchCodeGroup"
version=3D"1"
PermissionSetName=3D"Nothing">
new:
<CodeGroup class=3D"FirstMatchCodeGroup"
version=3D"1"
PermissionSetName=3D"FullTrust">
Restart iis and see if it runs the report, let me know the results. =If it runs - it's a security problem, I will let you know further steps.
! Please undo the change of rssrvpolicy.config afterwards...!
-- Alex Mineev
Software Design Engineer. Report expressions; Code Access Security; =Xml; SQE.
This posting is provided "AS IS" with no warranties, and confers no =rights
"Serv=E9 La" <blabla@.bestaatniet.nl> wrote in message =news:OP9Oyq6BFHA.1004@.TK2MSFTNGP15.phx.gbl...
> I have built a custom assembly, I copied it to the right folders =and wrote
> some code to call the component.
> It works fine in preview mode, but when I deploy the report to =another
> server I get the error:
> "error while loading code module 'x', version=3D'x' ..."
> > I feel I tried everything, copying the dll myself to the server's
> reportserver\bin folder, giving read & execute permissions, =creating the xml
> nodes in the RSReportServer.config on the server etc.
> > Always that error.
> > Is there some description on what to do if you deploy your reports =with
> custom assemblies to another server?
> >
--=_NextPart_000_000F_01C50916.FB775740
Content-Type: text/html;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
&

Please do not use FullTrust in production =environment. It ultimately opens RS for attacks.
The use of FullTrust was needed for diagnostics only.
This article describe what needs to be done for =custom assemblies if they do not work by default: http://msdn.microsoft.com/library/def=ault.asp?url=3D/library/en-us/RSPROG/htm/rsp_prog_rdl_8mue.asp=-- Alex MineevSoftware Design =Engineer. Report expressions; Code Access Security; Xml; SQE.
This posting is provided "AS IS" with no warranties, and confers no =rights
"Serv=E9 La" =wrote in message news:uSURmzPCFHA.3492=@.TK2MSFTNGP12.phx.gbl...
Thank you for answering. The problem =was solved, it was a stupid mistake of mine.
The good news is that the FullTrust =setting did help me later when I needed to load assemblies from report code :)


"Alexandre Mineev [MSFT]" =schreef in bericht news:eAOfmA9BFHA.1260=@.TK2MSFTNGP12.phx.gbl...
might be a code access security =problem
to diagnose (do not do this on a production =server) please find rssrvpolicy.config file in ReportServer folder and modify the following:
old:
&nbs=p; new:
&nbs=p;
Restart iis and see if it runs the report, let =me know the results. If it runs - it's a security problem, I will let you know =further steps.

! Please undo the change of =rssrvpolicy.config afterwards...!
-- Alex MineevSoftware Design =Engineer. Report expressions; Code Access Security; Xml; SQE.

This posting is provided "AS IS" with no =warranties, and confers no rights
"Serv=E9 La" wrote =in message news:OP9Oyq6BFHA.1004@.TK2MSFTNGP15.phx.gbl...> I have built a custom =assembly, I copied it to the right folders and wrote> some code to call =the component.> It works fine in preview mode, but when I deploy =the report to another> server I get the error:> "error =while loading code module 'x', version=3D'x' ..."> > I feel =I tried everything, copying the dll myself to the server's> =reportserver\bin folder, giving read & execute permissions, creating the =xml> nodes in the RSReportServer.config on the server etc.> => Always that error.> > Is there some description on =what to do if you deploy your reports with> custom assemblies to another = server?> > =

--=_NextPart_000_000F_01C50916.FB775740--