SQL Server FILESTREAM and master key

When dealing with RBS and SharePoint all guides provide the statement:

USE [WSS_Content]
IF NOT EXISTS 
(SELECT * FROM sys.symmetric_keys 
WHERE name = N'##MS_DatabaseMasterKey##')
CREATE master KEY encryption BY password = N'Admin Key Password !2#4'

If you ever asked yourself if its possible to leave that statement… The answer is no!

Funny thing is that the installation of the rbs-client states out a successfull installation. But all mssqlrbs_* tables are missing for the specified content database. And running the PS commands for the content db:

$cdb = Get-SPContentDatabase WSS_Content
$rbss = $cdb.RemoteBlobStorageSettings
$rbss.Installed()

simply returns false.

After comparing a successfull installation and an unsuccessfull installation the logfile of the failed installation is missing the create statements for the tables. A simple

Remote Blob Storage on the database has failed with error message: Remote Blob Storage requires a master key to exist in this database

is written somewhere in that logfile. Very easy to overlook.

The only way to fix the “corrupt” content database and (re-)provision the missing tables is to create the master key via the “master-key sql-statement” followed by the following command:

msiexec /qn /i rbs.msi REMOTEBLOBENABLE=1 FILESTREAMPROVIDERENABLE=1 DBNAME=WSS_Content FILESTREAMSTORENAME=FilestreamProvider_1 ADDLOCAL=EnableRBS,FilestreamRunScript DBINSTANCE=CD

This will provision the missing tables and rbs is up and running …

Fixing “Operation is not valid due to the current state of the object” when using SSRS ReportViewer in ASP.Net MVC

So I’ve included the SSRS ReportView control within my ASP.Net MVC application. So far so good. Just displaying the report works fine after struggeling with the dimensions of the iframe and the ReportViewer control itself.

But after a more complex drill-through report was display and then clicking the actions caused the famous error “Operation is not valid due to the current state of the object” (which in this case has nothing to do with resource limits due to security patches). Switching from asynchronous (AJAX) to classic postback did not help either.

It was a long day and the obvious was not that obvious anymore. I used the following code within the Page_Load event to configure the report:

protected void Page_Load(object sender, EventArgs e)
{
  string reportName = Page.RouteData.Values["reportName"] as String;
  string reportPath = Page.RouteData.Values["reportPath"] as String;
  string sizeType = Page.RouteData.Values["sizeType"] as String;
  bool withToolbar = Boolean.Parse(Page.RouteData.Values["withToolbar"] as String);
 
  theReportViewer.ServerReport.ReportServerUrl = new Uri("http://example.org");
  theReportViewer.ServerReport.ReportPath = String.Format("/{1}/{0}", reportName, reportPath);
}

After analysing logfiles and event logs I was nearly giving up when finally realizing that a click within the report causes a postback. But everytime the page loads I resetted the report. *sigh* The “fix” is simple and straightforward and should have been written in the first place.

protected void Page_Load(object sender, EventArgs e)
{
  if (!this.Page.IsPostBack)
  {
    string reportName = Page.RouteData.Values["reportName"] as String;
    string reportPath = Page.RouteData.Values["reportPath"] as String;
    string sizeType = Page.RouteData.Values["sizeType"] as String;
    bool withToolbar = Boolean.Parse(Page.RouteData.Values["withToolbar"] as String);
 
    theReportViewer.ServerReport.ReportServerUrl = new Uri("http://example.org");
    theReportViewer.ServerReport.ReportPath = String.Format("/{1}/{0}", reportName, reportPath);
  }
}

Now drill-through and navigation inside the reports is no problem at all.

Discoverer 9i unter Windows 7 (32 Bit) installieren

Eine Installation von Oracle Discoverer 9i (End-User) unter Windows 7 (32 Bit) ist wie folgt möglich:

1.) Kopieren der Installationsdateien in einen Lokalen Ordner. (Kein Netzlaufwerk!!!)

2.) Kompatibilitätsmodul (Eigenschaften) der setup.exe (…\install\win32\…) auf “XP – Service Pack 3″ setzten und übernehmen.

3.) setup.exe ausführen und Installation wie gewohnt durchführen.

Bei mir hat die Installation funktioniert. Leider kommt beim starten ein Hinweis das die Registry nicht aktualisiert werden kann. Das ist aber kein Problem.

Notwendige Patchs können nach dem oben beschriebenen Verfahren ebenfalls installiert werden.

Mehrsprachigkeit in Berichten SSRS

Allgemein/Vorgabe

Unsere Kunden wollten, dass deren Belege (Angebot, Lieferschein, …) in unterschiedlichen Sprachen gedruckt werden können. Die Sprache sollte von außen, dem Modul (Angebot, Lieferschein, …), vorgegeben werden. Unser Ziel war, möglichst nur einen Beleg pro Modul zu verwenden.

Lösung

Wir haben die Funktion “lookup” verwendet.  Die Funktion ist als Ausdruck/Expression “=lookup(“invoice.Artikelnummer”, Fields!rep_key.Value, Fields!rep_label.Value, “DS_Localization”)” in einem Textfeld eingebunden. Damit die Funktion den richtigen Wert liefert muss auf der Datenbank eine Übersetzungstabelle vorhanden sein. Diese Tabelle muss anschließend als DataSet im Bericht eingebunden sein. Im DataSet wird anhand der Where-Bedingung die Sprache selektiert. Diese muss demnach als Parameter mit übergeben werden.

In diesem Fall liefert der “lookup” die Übersetzung dür das Feld “invoice.Artikelnummer” zurück. Die Felder “rep_key” und “rep_label” kommen aus der eingebundenen Tabelle (DataSet “DS_Localization”)

Tabelle

rep_key (Schlüssel)
rep_label (Bezeichnung; Text der gedruckt wird)
rep_local (Sprachschlüssel; EN, DE, FR, …)

forms60 OS_ERROR

Bei meiner letzten Installation von Forms6i unter Windows 7 (64-Bit) gab es plötzlich den Fehler forms60 OS_ERROR. Abhilfe schaft hier die Reuzierung des PATH-Eintrages. Dieser war für eine Form6i Installation zu lang. Am besten auf ca. 800 Zeichen kürzen, vorher sichern(!) und dann noch mal die Installation starten. Dann sollte es funktionieren. Anschließend können die evtl. entfernten PATH-Einträge wieder hinzugefügt werden.