Quantcast
Channel: Microsoft Dynamics CRM Forum - Recent Threads
Viewing all articles
Browse latest Browse all 82002

Activites list for an Opportunity , its related primary contact and its related account - How to pass the Opportunity Id for a specific opportunity to generate record specific acitivities list ?

$
0
0

Hi,

I am new to creating reports in CRM 2011. I have a requirement to create a report that - list all activties

         a)  related to an opportunity

and  b) related to the primary contact of an opportunity

and c) related to the account of the opportunity

The report should be designed to work for any selected opportunity.

MY APPROACH :

I have create a SQL query that joins the opportunity filtered view with the ActivityPointer filtered view and finds the activities for that opportunity, another SQL query that joins the opportunity and contacts filtered view to the ActivityPointer view, and another SQL query that joins the opportunity and account filtered view to the ActivityPointer view. In the end I do a UNION ALL of these three SQL queries. This resulting SQL query works perfect. I need to create a report in CRM to make the same SQL work for a selected opportunity. I am unable to do this. The steps I follwed are as follows.

Datasource Properties : Name : DataSource1 

                                           Data Source=abc-crm01;Initial Catalog=Company

                                           Credentials: Use Windows Authentication(integrated security)

Datasets: I have created 2 datasets - Dataset1 and Dataset2

Dataset 1 provides the opportunity id to the Dataset2. Then Datset2 uses the same opportunity id to generate a list of all the activities for that opportunity id.

Dataset1 Details -  Query Type: Text

                                  Query: SELECT  opportunityid, name FROM    FilteredOpportunity AS opportunity0

Dataset2 Details - Query Type: Text

                                  Query:

SELECT
 CRMAF_Opp.name as Acc_Contact_Opportunity,
 CRMAF_Opp.name as OpportunityName,
 CRMAF_Main.activitytypecodename AS ActivityType,
    CRMAF_Main.subject AS [subject],
    COALESCE(CRMAF_Task.createdbyname, CRMAF_Email.createdbyname, CRMAF_Appo.createdbyname, CRMAF_Phone.createdbyname, CRMAF_Letter.createdbyname) AS Createdby,
    COALESCE(CRMAF_Task.description, CRMAF_Email.description, CRMAF_Appo.description, CRMAF_Phone.description, CRMAF_Letter.description) as ActivityDescrp,
    COALESCE(CRMAF_Task.statuscodename, CRMAF_Email.statuscodename, CRMAF_Appo.statuscodename, CRMAF_Phone.statuscodename, CRMAF_Letter.statuscodename) as ActivityStatus,
    COALESCE(CRMAF_Task.regardingobjectidname, CRMAF_Email.regardingobjectidname, CRMAF_Appo.regardingobjectidname, CRMAF_Phone.regardingobjectidname, CRMAF_Letter.regardingobjectidname) as ActivityRegarding,
    COALESCE(CRMAF_Task.scheduledstart, CRMAF_Email.scheduledstart, CRMAF_Appo.scheduledstart, CRMAF_Phone.scheduledstart, CRMAF_Letter.scheduledstart) as ScheduledStart,
    COALESCE(CRMAF_Task.scheduledend, CRMAF_Email.scheduledend, CRMAF_Appo.scheduledend, CRMAF_Phone.scheduledend, CRMAF_Letter.scheduledend) as ScheduledEnd,
    COALESCE(CRMAF_Task.actualstart, CRMAF_Email.actualstart, CRMAF_Appo.actualstart, CRMAF_Phone.actualstart, CRMAF_Letter.actualstart) as ActualStart,
    COALESCE(CRMAF_Task.actualend, CRMAF_Email.actualend, CRMAF_Appo.actualend, CRMAF_Phone.actualend, CRMAF_Letter.actualend) as ActualdEnd

FROM FilteredActivityPointer AS CRMAF_Main

 INNER JOIN FilteredOpportunity AS CRMAF_Opp ON CRMAF_Main.regardingobjectid = CRMAF_Opp.opportunityid

    LEFT JOIN FilteredTask AS CRMAF_Task ON CRMAF_Main.activityid = CRMAF_Task.activityid
    LEFT JOIN FilteredEmail AS CRMAF_Email ON CRMAF_Main.activityid = CRMAF_Email.activityid
    LEFT JOIN FilteredAppointment AS CRMAF_Appo ON CRMAF_Main.activityid = CRMAF_Appo.activityid
    LEFT JOIN FilteredPhoneCall AS CRMAF_Phone ON CRMAF_Main.activityid = CRMAF_Phone.activityid
    LEFT JOIN FilteredLetter AS CRMAF_Letter ON CRMAF_Main.activityid = CRMAF_Letter.activityid

WHERE CRMAF_Opp.opportunityid = (@CRM_SelectedOpportunity)   


union all
 

SELECT
 CRMAF_Con.fullname as Acc_Contact_Opportunity,
 CRMAF_ConOpp.name as OpportunityName,
 CRMAF_Main.activitytypecodename AS ActivityType,
    CRMAF_Main.subject AS [subject],
    COALESCE(CRMAF_Task.createdbyname, CRMAF_Email.createdbyname, CRMAF_Appo.createdbyname, CRMAF_Phone.createdbyname, CRMAF_Letter.createdbyname) AS Createdby,
    COALESCE(CRMAF_Task.description, CRMAF_Email.description, CRMAF_Appo.description, CRMAF_Phone.description, CRMAF_Letter.description) as ActivityDescrp,
    COALESCE(CRMAF_Task.statuscodename, CRMAF_Email.statuscodename, CRMAF_Appo.statuscodename, CRMAF_Phone.statuscodename, CRMAF_Letter.statuscodename) as ActivityStatus,
    COALESCE(CRMAF_Task.regardingobjectidname, CRMAF_Email.regardingobjectidname, CRMAF_Appo.regardingobjectidname, CRMAF_Phone.regardingobjectidname, CRMAF_Letter.regardingobjectidname) as ActivityRegarding,
    COALESCE(CRMAF_Task.scheduledstart, CRMAF_Email.scheduledstart, CRMAF_Appo.scheduledstart, CRMAF_Phone.scheduledstart, CRMAF_Letter.scheduledstart) as ScheduledStart,
    COALESCE(CRMAF_Task.scheduledend, CRMAF_Email.scheduledend, CRMAF_Appo.scheduledend, CRMAF_Phone.scheduledend, CRMAF_Letter.scheduledend) as ScheduledEnd,
    COALESCE(CRMAF_Task.actualstart, CRMAF_Email.actualstart, CRMAF_Appo.actualstart, CRMAF_Phone.actualstart, CRMAF_Letter.actualstart) as ActualStart,
    COALESCE(CRMAF_Task.actualend, CRMAF_Email.actualend, CRMAF_Appo.actualend, CRMAF_Phone.actualend, CRMAF_Letter.actualend) as ActualdEnd

FROM FilteredActivityPointer AS CRMAF_Main

 INNER JOIN FilteredContact AS CRMAF_Con ON CRMAF_Main.regardingobjectid = CRMAF_Con.contactid
 INNER JOIN FilteredOpportunity as CRMAF_ConOpp ON CRMAF_ConOpp.cw_primarycontactid = CRMAF_Con.contactid
 

    LEFT JOIN FilteredTask AS CRMAF_Task ON CRMAF_Main.activityid = CRMAF_Task.activityid
    LEFT JOIN FilteredEmail AS CRMAF_Email ON CRMAF_Main.activityid = CRMAF_Email.activityid
    LEFT JOIN FilteredAppointment AS CRMAF_Appo ON CRMAF_Main.activityid = CRMAF_Appo.activityid
    LEFT JOIN FilteredPhoneCall AS CRMAF_Phone ON CRMAF_Main.activityid = CRMAF_Phone.activityid
    LEFT JOIN FilteredLetter AS CRMAF_Letter ON CRMAF_Main.activityid = CRMAF_Letter.activityid

WHERE CRMAF_ConOpp.opportunityid = (@CRM_SelectedOpportunity)   

union all


SELECT
 CRMAF_Acc.name as Acc_Contact_Opportunity,
 CRMAF_AccOpp.name as OpportunityName,
 CRMAF_Main.activitytypecodename AS ActivityType,
    CRMAF_Main.subject AS [subject],
    COALESCE(CRMAF_Task.createdbyname, CRMAF_Email.createdbyname, CRMAF_Appo.createdbyname, CRMAF_Phone.createdbyname, CRMAF_Letter.createdbyname) AS Createdby,
    COALESCE(CRMAF_Task.description, CRMAF_Email.description, CRMAF_Appo.description, CRMAF_Phone.description, CRMAF_Letter.description) as ActivityDescrp,
    COALESCE(CRMAF_Task.statuscodename, CRMAF_Email.statuscodename, CRMAF_Appo.statuscodename, CRMAF_Phone.statuscodename, CRMAF_Letter.statuscodename) as ActivityStatus,
    COALESCE(CRMAF_Task.regardingobjectidname, CRMAF_Email.regardingobjectidname, CRMAF_Appo.regardingobjectidname, CRMAF_Phone.regardingobjectidname, CRMAF_Letter.regardingobjectidname) as ActivityRegarding,
    COALESCE(CRMAF_Task.scheduledstart, CRMAF_Email.scheduledstart, CRMAF_Appo.scheduledstart, CRMAF_Phone.scheduledstart, CRMAF_Letter.scheduledstart) as ScheduledStart,
    COALESCE(CRMAF_Task.scheduledend, CRMAF_Email.scheduledend, CRMAF_Appo.scheduledend, CRMAF_Phone.scheduledend, CRMAF_Letter.scheduledend) as ScheduledEnd,
    COALESCE(CRMAF_Task.actualstart, CRMAF_Email.actualstart, CRMAF_Appo.actualstart, CRMAF_Phone.actualstart, CRMAF_Letter.actualstart) as ActualStart,
    COALESCE(CRMAF_Task.actualend, CRMAF_Email.actualend, CRMAF_Appo.actualend, CRMAF_Phone.actualend, CRMAF_Letter.actualend) as ActualdEnd

FROM FilteredActivityPointer AS CRMAF_Main

 INNER JOIN FilteredAccount AS CRMAF_Acc ON CRMAF_Main.regardingobjectid = CRMAF_Acc.accountid
 INNER JOIN FilteredOpportunity as CRMAF_AccOpp ON CRMAF_AccOpp.accountid = CRMAF_Acc.accountid
 

    LEFT JOIN FilteredTask AS CRMAF_Task ON CRMAF_Main.activityid = CRMAF_Task.activityid
    LEFT JOIN FilteredEmail AS CRMAF_Email ON CRMAF_Main.activityid = CRMAF_Email.activityid
    LEFT JOIN FilteredAppointment AS CRMAF_Appo ON CRMAF_Main.activityid = CRMAF_Appo.activityid
    LEFT JOIN FilteredPhoneCall AS CRMAF_Phone ON CRMAF_Main.activityid = CRMAF_Phone.activityid
    LEFT JOIN FilteredLetter AS CRMAF_Letter ON CRMAF_Main.activityid = CRMAF_Letter.activityid

WHERE CRMAF_AccOpp.opportunityid = (@CRM_SelectedOpportunity)   
ORDER BY Acc_Contact_Opportunity, CRMAF_Main.activitytypecodename

 

                     Parameter details of Dataset2: Parameter name: @CRM_SelectedOpportunity  Parameter Value: [@CRM_SelectedOpportunity]

Report Parameters :    Name: CRM_SelectedOpportunity

Prompt: Selected Opportunity

Data type: text       Tick - Allow blank value     Tick : Allow null value      Select parameter visibility :Visible

Available Values: 'Get value from query'             Dataset : DataSet1(select from dropdown)      Value field: opportunityid(select from dropdown)     Label field : name(select from dropdown)

Default Values:   'Get value from query' Dataset : DataSet1(select from dropdown) Value field: opportunityid(select from dropdown) Label field : name(select from dropdown)

Then I design a table on the Report Layout with the fields from the Dataset2 and preview it in VisualStudio.

I get the 'Selected Opportunity' parameter prompt for a dropdown that lists all the opportunity names correctly. I select one opportunity and click '' View Report'.

The report displays the list of all activities correctly. This proves my SQL query of DataSet2 is perfect.

My big problem is how to customise this report to work in CRM.

Can anyone help me by telling the steps to follow to change this above mentioned report to work for a particular record in CRM ???

Cheers!


Viewing all articles
Browse latest Browse all 82002

Latest Images

Trending Articles





Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>
<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596344.js" async> </script>