Page 5123 Opportunity List
- App
- Base Application
- Namespace
- Microsoft.CRM.Opportunity
- Versions
- 17-28
- Source table
- 5092
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/CRM/Opportunity/OpportunityList.Page.al634 lines, Copyright (c) Microsoft Corporation. MIT
// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace Microsoft.CRM.Opportunity;
using Microsoft.CRM.Campaign;
using Microsoft.CRM.Comment;
using Microsoft.CRM.Contact;
using Microsoft.CRM.Interaction;
using Microsoft.CRM.Reports;
using Microsoft.CRM.Segment;
using Microsoft.CRM.Task;
using Microsoft.CRM.Team;
using Microsoft.Foundation.Attachment;
using Microsoft.Integration.Dataverse;
page 5123 "Opportunity List"
{
AdditionalSearchTerms = 'prospects';
ApplicationArea = RelationshipMgmt;
Caption = 'Opportunities';
CardPageID = "Opportunity Card";
DataCaptionExpression = Caption();
Editable = false;
PageType = List;
AboutTitle = 'About Opportunities';
AboutText = 'Track, create, and manage sales opportunities by linking them to contacts, salespeople, campaigns, and sales documents, updating their progress through sales cycle stages, and recording outcomes such as won or lost with associated values and reasons.';
SourceTable = Opportunity;
UsageCategory = Lists;
layout
{
area(content)
{
repeater(Control1)
{
Editable = false;
ShowCaption = false;
field("No."; Rec."No.")
{
ApplicationArea = All;
}
field(Closed; Rec.Closed)
{
ApplicationArea = All;
}
field("Creation Date"; Rec."Creation Date")
{
ApplicationArea = All;
}
field(Description; Rec.Description)
{
ApplicationArea = All;
}
field("Contact No."; Rec."Contact No.")
{
ApplicationArea = RelationshipMgmt;
}
field("Contact Company No."; Rec."Contact Company No.")
{
ApplicationArea = RelationshipMgmt;
Visible = false;
}
field("Salesperson Code"; Rec."Salesperson Code")
{
ApplicationArea = Suite;
}
field(Status; Rec.Status)
{
ApplicationArea = RelationshipMgmt;
}
field("Sales Cycle Code"; Rec."Sales Cycle Code")
{
ApplicationArea = RelationshipMgmt;
Visible = false;
}
field(CurrSalesCycleStage; CurrSalesCycleStage)
{
ApplicationArea = RelationshipMgmt;
Caption = 'Current Sales Cycle Stage';
ToolTip = 'Specifies the current sales cycle stage of the opportunity.';
}
field("Campaign No."; Rec."Campaign No.")
{
ApplicationArea = RelationshipMgmt;
}
field("Campaign Description"; Rec."Campaign Description")
{
ApplicationArea = RelationshipMgmt;
DrillDown = false;
}
field("Sales Document Type"; Rec."Sales Document Type")
{
ApplicationArea = Basic, Suite;
}
field("Sales Document No."; Rec."Sales Document No.")
{
ApplicationArea = Basic, Suite;
}
field("Estimated Closing Date"; Rec."Estimated Closing Date")
{
ApplicationArea = RelationshipMgmt;
}
field("Estimated Value (LCY)"; Rec."Estimated Value (LCY)")
{
ApplicationArea = RelationshipMgmt;
ToolTip = 'Specifies the estimated value of the opportunity.';
}
field("Calcd. Current Value (LCY)"; Rec."Calcd. Current Value (LCY)")
{
ApplicationArea = RelationshipMgmt;
ToolTip = 'Specifies the current calculated value of the opportunity.';
}
field("Coupled to Dataverse"; Rec."Coupled to Dataverse")
{
ApplicationArea = All;
Visible = CRMIntegrationEnabled;
}
}
group(Control45)
{
ShowCaption = false;
field("Contact Name"; Rec."Contact Name")
{
ApplicationArea = RelationshipMgmt;
Caption = 'Contact Name';
DrillDown = false;
}
field("Contact Company Name"; Rec."Contact Company Name")
{
ApplicationArea = RelationshipMgmt;
DrillDown = false;
}
}
}
area(factboxes)
{
part(Control5; "Opportunity Statistics FactBox")
{
ApplicationArea = RelationshipMgmt;
SubPageLink = "No." = field("No.");
}
part("Attached Documents List"; "Doc. Attachment List Factbox")
{
ApplicationArea = All;
Caption = 'Documents';
UpdatePropagation = Both;
SubPageLink = "Table ID" = const(Database::Opportunity),
"No." = field("No.");
}
systempart(Control1900383207; Links)
{
ApplicationArea = RecordLinks;
Visible = false;
}
systempart(Control1905767507; Notes)
{
ApplicationArea = Notes;
Visible = false;
}
}
}
actions
{
area(navigation)
{
group(Opportunity)
{
Caption = 'Oppo&rtunity';
Image = Opportunity;
action(Statistics)
{
ApplicationArea = RelationshipMgmt;
Caption = 'Statistics';
Image = Statistics;
RunObject = Page "Opportunity Statistics";
RunPageLink = "No." = field("No.");
ShortCutKey = 'F7';
ToolTip = 'View statistical information, such as the value of posted entries, for the record.';
}
action("Interaction Log E&ntries")
{
ApplicationArea = RelationshipMgmt;
Caption = 'Interaction Log E&ntries';
Image = InteractionLog;
RunObject = Page "Interaction Log Entries";
RunPageLink = "Opportunity No." = field("No.");
RunPageView = sorting("Opportunity No.", Date);
ShortCutKey = 'Ctrl+F7';
ToolTip = 'View a list of the interactions that you have logged, for example, when you create an interaction, print a cover sheet, a sales order, and so on.';
}
action("Postponed &Interactions")
{
ApplicationArea = RelationshipMgmt;
Caption = 'Postponed &Interactions';
Image = PostponedInteractions;
RunObject = Page "Postponed Interactions";
RunPageLink = "Opportunity No." = field("No.");
RunPageView = sorting("Opportunity No.", Date);
Scope = Repeater;
ToolTip = 'View postponed interactions for opportunities.';
}
action("T&asks")
{
ApplicationArea = RelationshipMgmt;
Caption = 'T&asks';
Image = TaskList;
RunObject = Page "Task List";
RunPageLink = "Opportunity No." = field("No."),
"System To-do Type" = filter(Organizer);
RunPageView = sorting("Opportunity No.");
ToolTip = 'View all marketing tasks that involve the opportunity. ';
}
action("Co&mments")
{
ApplicationArea = RelationshipMgmt;
Caption = 'Co&mments';
Image = ViewComments;
RunObject = Page "Rlshp. Mgt. Comment Sheet";
RunPageLink = "Table Name" = const(Opportunity),
"No." = field("No.");
ToolTip = 'View or add comments for the record.';
}
action("Show Sales Quote")
{
ApplicationArea = RelationshipMgmt;
Caption = 'Show Sales Quote';
Image = Quote;
Scope = Repeater;
ToolTip = 'Show the assigned sales quote.';
trigger OnAction()
begin
Rec.ShowSalesQuoteWithCheck();
end;
}
}
group(ActionGroupCRM)
{
Caption = 'Dynamics 365 Sales';
Visible = CRMIntegrationEnabled;
action(CRMGotoOpportunity)
{
ApplicationArea = Suite;
Caption = 'Opportunity';
Image = CoupledContactPerson;
ToolTip = 'Open the coupled Dynamics 365 Sales opportunity.';
trigger OnAction()
var
CRMIntegrationManagement: Codeunit "CRM Integration Management";
begin
CRMIntegrationManagement.ShowCRMEntityFromRecordID(Rec.RecordId);
end;
}
action(CRMSynchronizeNow)
{
AccessByPermission = TableData "CRM Integration Record" = IM;
ApplicationArea = Suite;
Caption = 'Synchronize';
Image = Refresh;
ToolTip = 'Send or get updated data to or from Dynamics 365 Sales.';
trigger OnAction()
var
Opportunity: Record Opportunity;
CRMIntegrationManagement: Codeunit "CRM Integration Management";
OpportunityRecordRef: RecordRef;
begin
CurrPage.SetSelectionFilter(Opportunity);
Opportunity.Next();
if Opportunity.Count = 1 then
CRMIntegrationManagement.UpdateOneNow(Opportunity.RecordId)
else begin
OpportunityRecordRef.GetTable(Opportunity);
CRMIntegrationManagement.UpdateMultipleNow(OpportunityRecordRef);
end
end;
}
group(Coupling)
{
Caption = 'Coupling', Comment = 'Coupling is a noun';
Image = LinkAccount;
ToolTip = 'Create, change, or delete a coupling between the Business Central record and a Dynamics 365 Sales record.';
action(ManageCRMCoupling)
{
AccessByPermission = TableData "CRM Integration Record" = IM;
ApplicationArea = Suite;
Caption = 'Set Up Coupling';
Image = LinkAccount;
ToolTip = 'Create or modify the coupling to a Dynamics 365 Sales opportunity.';
trigger OnAction()
var
CRMIntegrationManagement: Codeunit "CRM Integration Management";
begin
CRMIntegrationManagement.DefineCoupling(Rec.RecordId);
end;
}
action(MatchBasedCoupling)
{
AccessByPermission = TableData "CRM Integration Record" = IM;
ApplicationArea = Suite;
Caption = 'Match-Based Coupling';
Image = CoupledOpportunity;
ToolTip = 'Couple opportunities to opportunities in Dynamics 365 Sales based on criteria.';
trigger OnAction()
var
Opportunity: Record Opportunity;
CRMIntegrationManagement: Codeunit "CRM Integration Management";
RecRef: RecordRef;
begin
CurrPage.SetSelectionFilter(Opportunity);
RecRef.GetTable(Opportunity);
CRMIntegrationManagement.MatchBasedCoupling(RecRef);
end;
}
action(DeleteCRMCoupling)
{
AccessByPermission = TableData "CRM Integration Record" = D;
ApplicationArea = Suite;
Caption = 'Delete Coupling';
Enabled = CRMIsCoupledToRecord;
Image = UnLinkAccount;
ToolTip = 'Delete the coupling to a Dynamics 365 Sales opportunity.';
trigger OnAction()
var
Opportunity: Record Opportunity;
CRMCouplingManagement: Codeunit "CRM Coupling Management";
RecRef: RecordRef;
begin
CurrPage.SetSelectionFilter(Opportunity);
RecRef.GetTable(Opportunity);
CRMCouplingManagement.RemoveCoupling(RecRef);
end;
}
}
action(ShowLog)
{
ApplicationArea = Suite;
Caption = 'Synchronization Log';
Image = Log;
ToolTip = 'View integration synchronization jobs for the opportunity table.';
trigger OnAction()
var
CRMIntegrationManagement: Codeunit "CRM Integration Management";
begin
CRMIntegrationManagement.ShowLog(Rec.RecordId);
end;
}
}
}
area(processing)
{
group(Functions)
{
Caption = 'F&unctions';
Image = "Action";
action(Update)
{
ApplicationArea = RelationshipMgmt;
Caption = 'Update';
Enabled = OppInProgress;
Image = Refresh;
Scope = Repeater;
ToolTip = 'Update all the actions that are related to your opportunities.';
trigger OnAction()
begin
Rec.UpdateOpportunity();
end;
}
action(Close)
{
ApplicationArea = RelationshipMgmt;
Caption = 'Close';
Enabled = OppNotStarted or OppInProgress;
Image = Close;
Scope = Repeater;
ToolTip = 'Close all the actions that are related to your opportunities.';
trigger OnAction()
begin
Rec.CloseOpportunity();
end;
}
action("Activate First Stage")
{
ApplicationArea = RelationshipMgmt;
Caption = 'Activate First Stage';
Enabled = OppNotStarted;
Image = "Action";
Scope = Repeater;
ToolTip = 'Specify if the opportunity is to be activated. The status is set to In Progress.';
trigger OnAction()
begin
Rec.StartActivateFirstStage();
end;
}
action(CreateSalesQuote)
{
ApplicationArea = RelationshipMgmt;
Caption = 'Create Sales &Quote';
Enabled = OppInProgress;
Image = Allocate;
Scope = Repeater;
ToolTip = 'Create a new sales quote with the opportunity inserted as the customer.';
trigger OnAction()
begin
Rec.CreateQuote();
end;
}
action("Print Details")
{
ApplicationArea = RelationshipMgmt;
Caption = 'Print Details';
Image = Print;
ToolTip = 'View information about your sales stages, activities and planned tasks for an opportunity.';
trigger OnAction()
var
Opp: Record Opportunity;
begin
Opp := Rec;
Opp.SetRecFilter();
REPORT.Run(REPORT::"Opportunity - Details", true, false, Opp);
end;
}
action("Create &Interaction")
{
ApplicationArea = RelationshipMgmt;
Caption = 'Create &Interaction';
Image = CreateInteraction;
Scope = Repeater;
ToolTip = 'Create an interaction with a specified opportunity.';
trigger OnAction()
var
TempSegmentLine: Record "Segment Line" temporary;
begin
TempSegmentLine.CreateInteractionFromOpp(Rec);
end;
}
}
}
area(Promoted)
{
group(Category_Process)
{
Caption = 'Process', Comment = 'Generated from the PromotedActionCategories property index 1.';
actionref("Activate First Stage_Promoted"; "Activate First Stage")
{
}
actionref(Close_Promoted; Close)
{
}
actionref(Update_Promoted; Update)
{
}
actionref("Show Sales Quote_Promoted"; "Show Sales Quote")
{
}
actionref(CreateSalesQuote_Promoted; CreateSalesQuote)
{
}
actionref("Create &Interaction_Promoted"; "Create &Interaction")
{
}
group(Category_Synchronize)
{
Caption = 'Synchronize';
Visible = CRMIntegrationEnabled;
actionref(CRMGotoOpportunity_Promoted; CRMGotoOpportunity)
{
}
actionref(CRMSynchronizeNow_Promoted; CRMSynchronizeNow)
{
}
actionref(ShowLog_Promoted; ShowLog)
{
}
group(Category_Coupling)
{
Caption = 'Coupling';
ShowAs = SplitButton;
actionref(ManageCRMCoupling_Promoted; ManageCRMCoupling)
{
}
actionref(DeleteCRMCoupling_Promoted; DeleteCRMCoupling)
{
}
actionref(MatchBasedCoupling_Promoted; MatchBasedCoupling)
{
}
}
}
}
}
}
trigger OnAfterGetCurrRecord()
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeOnAfterGetCurrRecord(Rec, OppNotStarted, OppInProgress, IsHandled);
if IsHandled then
exit;
Rec.CalcFields("Contact Name", "Contact Company Name");
OppNotStarted := Rec.Status = Rec.Status::"Not Started";
OppInProgress := Rec.Status = Rec.Status::"In Progress";
end;
trigger OnAfterGetRecord()
var
SalesCycleStage: Record "Sales Cycle Stage";
CRMCouplingManagement: Codeunit "CRM Coupling Management";
begin
Rec.CalcFields("Current Sales Cycle Stage");
CurrSalesCycleStage := '';
if SalesCycleStage.Get(Rec."Sales Cycle Code", Rec."Current Sales Cycle Stage") then
CurrSalesCycleStage := SalesCycleStage.Description;
if CRMIntegrationEnabled then
CRMIsCoupledToRecord := CRMCouplingManagement.IsRecordCoupledToCRM(Rec.RecordId);
end;
trigger OnFindRecord(Which: Text): Boolean
var
RecordsFound: Boolean;
begin
RecordsFound := Rec.Find(Which);
exit(RecordsFound);
end;
trigger OnOpenPage()
var
CRMIntegrationManagement: Codeunit "CRM Integration Management";
begin
CurrPage.Editable := true;
CRMIntegrationEnabled := CRMIntegrationManagement.IsCRMIntegrationEnabled();
end;
var
OpportunitiesTxt: Label 'Opportunities';
OppNotStarted: Boolean;
OppInProgress: Boolean;
CRMIntegrationEnabled: Boolean;
CRMIsCoupledToRecord: Boolean;
CurrSalesCycleStage: Text;
procedure Caption(): Text
var
CaptionStr: Text;
begin
case true of
BuildCaptionContact(CaptionStr, Rec.GetFilter("Contact Company No.")),
BuildCaptionContact(CaptionStr, Rec.GetFilter("Contact No.")),
BuildCaptionSalespersonPurchaser(CaptionStr, Rec.GetFilter("Salesperson Code")),
BuildCaptionCampaign(CaptionStr, Rec.GetFilter("Campaign No.")),
BuildCaptionSegmentHeader(CaptionStr, Rec.GetFilter("Segment No.")):
exit(CaptionStr);
end;
exit(OpportunitiesTxt);
end;
local procedure BuildCaptionContact(var CaptionText: Text[260]; "Filter": Text): Boolean
var
Contact: Record Contact;
begin
exit(BuildCaption(CaptionText, Contact, Filter, Contact.FieldNo(Contact."No."), Contact.FieldNo(Name)));
end;
local procedure BuildCaptionSalespersonPurchaser(var CaptionText: Text[260]; "Filter": Text): Boolean
var
SalespersonPurchaser: Record "Salesperson/Purchaser";
begin
exit(BuildCaption(CaptionText, SalespersonPurchaser, Filter, SalespersonPurchaser.FieldNo(Code), SalespersonPurchaser.FieldNo(Name)));
end;
local procedure BuildCaptionCampaign(var CaptionText: Text[260]; "Filter": Text): Boolean
var
Campaign: Record Campaign;
begin
exit(BuildCaption(CaptionText, Campaign, Filter, Campaign.FieldNo("No."), Campaign.FieldNo(Description)));
end;
local procedure BuildCaptionSegmentHeader(var CaptionText: Text[260]; "Filter": Text): Boolean
var
SegmentHeader: Record "Segment Header";
begin
exit(BuildCaption(CaptionText, SegmentHeader, Filter, SegmentHeader.FieldNo("No."), SegmentHeader.FieldNo(Description)));
end;
local procedure BuildCaption(var CaptionText: Text[260]; RecVar: Variant; "Filter": Text; IndexFieldNo: Integer; TextFieldNo: Integer): Boolean
var
RecRef: RecordRef;
IndexFieldRef: FieldRef;
TextFieldRef: FieldRef;
begin
Filter := DelChr(Filter, '<>', '''');
if Filter <> '' then begin
RecRef.GetTable(RecVar);
IndexFieldRef := RecRef.Field(IndexFieldNo);
IndexFieldRef.SetFilter(Filter);
if RecRef.FindFirst() then begin
TextFieldRef := RecRef.Field(TextFieldNo);
CaptionText := CopyStr(Format(IndexFieldRef.Value) + ' ' + Format(TextFieldRef.Value), 1, MaxStrLen(CaptionText));
end;
end;
exit(Filter <> '');
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeOnAfterGetCurrRecord(var Opportunity: Record Opportunity; var OppNotStarted: Boolean; var OppInProgress: Boolean; var IsHandled: Boolean)
begin
end;
}