[Gelöst] Berichtsdaten Werte übergabe

7. Juni 2010 16:40

Hallo zusammen,

nun funktionieren meine Berichte endlich bis auf ein kleinen Fehler.
Ich versuche ein Angebotsbericht zu erstellen. Ich hole mir viele verschiedene Datenbankfelder durch ein Query und habe den Bericht dann wie erwünscht aufgebaut.
Nun möchte ich gerne diesen Bericht aber über die QuoteId einschränken.
Übergibt mir das CRM die QuoteId zu dem Bericht? Oder wie bekomme ich den Bericht eingeschränkt.
Im normal Fall kann ich die SQL Statements doch über eine Where Bedingung einschränken.
Auszug aus einem vorhanden Bericht.
Code:
WHERE        (FilteredQuote.QuoteId = @CRM_QuoteId)


Wie kann ich das aber in meinem Fall s.u. tun?

Achtung SQL Statement ist nicht vollständig wurde etwas abgekürzt.
Code:
SELECT        Quote.AccountIdName AS Kundenname, Quote.OwnerIdName AS Vertriebsbeauftragter, Quote.QuoteNumber AS Angebotsnummer, Quote.Description AS Angebotsbeschreibung, QuoteDetailBase.ProductId AS produktid, QuoteDetailBase.Quantity AS AnzahlProdukte......
FROM            QuoteBase INNER JOIN QuoteDetailBase ON QuoteBase.QuoteId = QuoteDetailBase.QuoteId INNER JOIN  Quote ON QuoteBase.QuoteId = Quote.QuoteId INNER JOIN ProductBase ON QuoteDetailBase.ProductId = ProductBase.ProductId INNER JOIN SystemUserBase ON QuoteBase.OwningUser = SystemUserBase.SystemUserId ....


Ich hoffe ihr könnt mir helfen.

Viele Grüße,

Sana
Zuletzt geändert von Sanagarth am 17. Juni 2010 12:04, insgesamt 1-mal geändert.

Re: Berichtsdaten Werte übergabe

7. Juni 2010 18:23

Hallo Sana,

das CRM übergibt dir im Prinzip alle Daten, auch die ID des ausgewählten Datensatzes. Du kannst auch eigene Reports erstellen und mir Filtern aus dem CRM versehen.
Damit aber das CRM mit diesen Filtern arbeiten kann, musst du entsprechende Parameter in deinen Report einbauen, siehe hierzu auch die entsprechenden Bereiche im SDK.

Dein SQL sollte dann in etwa so aussehen:
declare @SQL nvarchar(max)
SET @SQL = '(

SELECT Quote.AccountIdName AS Kundenname, Quote.OwnerIdName AS Vertriebsbeauftragter, Quote.QuoteNumber AS Angebotsnummer, Quote.Description AS Angebotsbeschreibung, QuoteDetailBase.ProductId AS produktid, QuoteDetailBase.Quantity AS AnzahlProdukte......
FROM (' + @CRM_QuoteBase + ') AS QuateBase INNER JOIN QuoteDetailBase ON QuoteBase.QuoteId = QuoteDetailBase.QuoteId INNER JOIN Quote ON QuoteBase.QuoteId = Quote.QuoteId INNER JOIN ProductBase ON QuoteDetailBase.ProductId = ProductBase.ProductId INNER JOIN SystemUserBase ON QuoteBase.OwningUser = SystemUserBase.SystemUserId ....')
EXEC (@SQL)


Ach so, noch ein Hinweis. Best Practice für CRM Reports ist es, nicht direkt mit den Tabellen, sondern mit den Filtered Views zu arbeiten. Zum einen nehmen sie dir eine Menge Arbeit ab, wie Datumsfelder unter Berücksichtigung der Zeitzone ermitteln, zum anderen werden automatisch die CRM Rechte des Benutzers berücksichtigt. Auch würde z.B. dein Inner Join zwischen QuateBase und QuoteDetailBase entfallen, da FilteredViews immer alle Daten beider Tabellen enthalten.

Re: Berichtsdaten Werte übergabe

8. Juni 2010 10:09

Hallo zusammen,
ich habe nun versucht die Änderungen umzusetzen.
Leider hatte ich bis jetzt keinen Erfolg.
Fehlermeldung: Falsche Syntax in der Nähe von ')'.
Die Parameter @QuoteId und CRM_QuoteBase legt er mir automatisch an. Der frägt mich aber bei jedem Aufruf, dass ich den Wert also hier die CRM_QuoteBase bestimmen soll.

Soweit ich das bis jetzt verstanden habe, initialisert das CRM beim Berichtsaufruf diese Parameter und setzt somit die Variablen, die dann wiederrum im Berichtverwendet werden können. Stimmt das soweit?

Das CRM_QuoteBase ist, aber doch eine komplette Tabelle oder nicht? Das heißt ich kann den Report gar nicht mehr im SBIDS testen oder?
Ein Upload ins CRM wurde mit einem Fehler beendet.
Ich hoffe ihre könnt mir nochmals weiterhelfen.

Vollständiges SQL Syntax mit Fehlern (Achtung nicht nach Best Practice ):
Code:
declare @SQL nvarchar(max)
SET @SQL = ('

SELECT        Quote.AccountIdName AS Kundenname, Quote.OwnerIdName AS Vertriebsbeauftragter, Quote.QuoteNumber AS Angebotsnummer,
 Quote.Description AS Angebotsbeschreibung, QuoteDetailBase.ProductId AS produktid, QuoteDetailBase.Quantity AS AnzahlProdukte, QuoteBase.Name AS Angebotsthema, Quote.TotalAmount_Base AS Gesamtpreis, QuoteDetailBase.PricePerUnit_Base AS produktpreis,  ProductBase.Name AS produktname, ProductBase.Description AS produktbeschreibung, ProductBase.ProductNumber AS produktnummer,   QuoteBase.EffectiveTo AS gueltigbis, SystemUser.Address1_Telephone1 AS tele, SystemUser.Address1_Fax AS fax, SystemUser.InternalEMailAddress AS email, SystemUser.Title AS Titel, SystemUser.MobilePhone AS mobile, ProductExtensionBase.New_TTOKurzbeschreibung AS kurzBeschreibung, QuoteBase.QuoteId

FROM          (' + @CRM_QuoteBase + ') INNER JOIN
                         QuoteDetailBase ON QuoteBase.QuoteId = QuoteDetailBase.QuoteId INNER JOIN
                         Quote ON QuoteBase.QuoteId = Quote.QuoteId INNER JOIN
                         ProductBase ON QuoteDetailBase.ProductId = ProductBase.ProductId INNER JOIN
                         SystemUserBase ON QuoteBase.OwningUser = SystemUserBase.SystemUserId AND QuoteDetailBase.SalesRepId = SystemUserBase.SystemUserId INNER JOIN SystemUser ON SystemUserBase.SystemUserId = SystemUser.SystemUserId INNER JOIN ProductExtensionBase ON QuoteDetailBase.ProductId = ProductExtensionBase.ProductId ')
EXEC (@SQL)

Re: Berichtsdaten Werte übergabe

8. Juni 2010 10:19

Hallo Sana,

es fehlt ein kleines Stück, hatte ich nicht rot markiert (habe ich jetzt nachgeholt).

Der Befehl:
FROM (' + @CRM_QuoteBase + ') INNER JOIN
muss so aussehen:
FROM (' + @CRM_QuoteBase + ') AS QuoteBase INNER JOIN

Re: Berichtsdaten Werte übergabe

8. Juni 2010 10:30

Hallo Michael,

der gleiche Fehler erneut.
Ich habe QuatBase zu QuoteBase geändert.
FROM ('+ @CRM_QuoteBase +') AS QuoteBase INNER JOIN
QuoteDetailBase ON QuoteBase.QuoteId = QuoteDetailBase.QuoteId INNER JOIN

Upload und Ausführung des Berichts nicht möglich.

Viele Grüße,

Sana

Re: Berichtsdaten Werte übergabe

14. Juni 2010 11:44

Hallo zusammen,

also ich bin wieder ein Schritt weitergekommen im BDS funktioniert der Bericht nun. Er wird ausgeführt und die Felder erfolgreich gefüllt wenn ich die QuoteId mit angebe.
Wenn ich den Bericht jedoch ins CRM hochlade werden die Felder beim ausfüllen den Berichts nicht mehr gefüllt.
Weiß jemand woran das liegt?

Der Paramter CRM_QuoteId hat folgende Eigenschaften:
General: Allow blank value, und Internal.
Available Values: None
Default Values: Specify Values (Eine QuoteId ist hinterlegt )

Er gibt mir folgenden Error aus.
MissingParameterException: Im CRM_QuoteId-Parameter fehlt ein Wert.]
bei Microsoft.Reporting.WebForms.ParametersArea.ValidateAllReportInputsSatisfied()
bei Microsoft.Reporting.WebForms.ReportViewer.OnPreRender(EventArgs e)

[CrmException: An error occurred during report rendering.]
bei Microsoft.Crm.Web.Reporting.SrsReportViewer.ReportErrorHandler(Object sender, ReportErrorEventArgs e)
bei Microsoft.Reporting.WebForms.ReportViewer.OnError(Exception e)
bei Microsoft.Reporting.WebForms.ReportViewer.OnPreRender(EventArgs e)
bei System.Web.UI.Control.PreRenderRecursiveInternal()
bei System.Web.UI.Control.PreRenderRecursiveInternal()
bei System.Web.UI.Control.PreRenderRecursiveInternal()
bei System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)



Kann mir jemand nen Buch empfehlen für das Èrstellen von Berichten über das BDS?
Ich hoffe ihr könnt mir weiterhelfen.

Grüße San

Re: Berichtsdaten Werte übergabe

16. Juni 2010 10:04

Hallo Michael,

hast du mir evtl. ein Beispielbericht an dem ich mich orientieren kann?
Ich bekomm das leider nicht hin.

Viele Grüße,

Sana

Re: [Gelöst] Berichtsdaten Werte übergabe

17. Juni 2010 12:06

Hallo zusammen,

das Problem wurde dadurch gelöst, dass der Angebotsbericht wie im Beispiel Angebotsbericht aufgeteilt wurde.
Im "Hauptbericht" wird folgendes Statement ausgeführt.
Code:
SELECT     TOP (20) quoteid
FROM         FilteredQuote AS CRMAF_FilteredQuote

Dieses enthält die Daten und versorgt den Parameter @CRM_QuoteId für die Unterberichte.

Weiß jemand wieso es jetzt funktioniert? Weil das Statement macht ja nichts anderes als die quoteIds zu holen.

Danke & Grüße Sana

Re: [Gelöst] Berichtsdaten Werte übergabe

17. Juni 2010 15:32

Halla Sana,

anbei ein Auszug aus dem SDK, der deine Frage beantworten sollte.
Code:
Dynamic Drill-through to Microsoft Dynamics CRM
Drill-through in a report is used to navigate to a Microsoft Dynamics CRM Web form.

The steps of drill-through are listed here:

An image or value item (such as a text box) is added to a report. The Value property of this item contains code that builds a URL by using the base address of Microsoft Dynamics CRM plus parameters that refer to a specific instance of an entity.
When the user clicks the report item, a new browser window is opened by using the constructed URL passed as the target Web address.
Microsoft Dynamics CRM loads the information for the specified entity into a Web form that is displayed in the browser window.
To set up drill-through to Microsoft Dynamics CRM:

Create a hidden parameter of type string in the report that has the name CRM_URL. When the report is later run from Microsoft Dynamics CRM, this parameter is automatically set to the Web address of Microsoft Dynamics CRM.
Add a report item, such as a Textbox, that starts the drill-through when you click it.
Right-click the drill-through report item and select Properties from the shortcut menu. The Properties dialog box appears.
Select the Advanced button to display the advanced properties.
In the Navigation tab, check the Jump to URL option and enter an expression in the following format:
= Parameters!CRM_URL.Value & "?ID={"& GUID &"}&OTC=otc"

The entity GUID and entity type code have to be added to the URL to be able to drill through. The entity type code is specified as OTC. For example:

= Parameters!CRM_URL.Value & "?ID={"&Fields!Opportunityid.Value.ToString()&"}&OTC=3"
Click OK to close the dialog box.
In this example code, the value of a dataset field that contains the GUID of an Opportunity object is converted to a string and used as an ID parameter in the URL. A parameter that contains the OTC value (3) for an opportunity entity is also appended.

The GUID of an entity instance can be obtained from the appropriate filtered view, for example, FilteredOpportunity. The OTC value for each entity can be obtained by executing the following SQL code in Query Analyzer:

USE <organization>_MSCRM
SELECT Name,ObjectTypeCode FROM dbo.Entity ORDER BY ObjectTypeCode