Self introduction:
Hi Myself Saikiran i am having total 4 years of experience and relevant experience in
dynamics 365 is also same
in the span of this 4 years i have worked on all customizations and configurations in crm,
in dynamics 365 I have worked in creation of environments,
I have worked on creation of users
i have worked on creation of entities, fields, forms, relationships
i have good experience in business rules
I have worked on workflows, actions, business process flows
I have worked on JavaScript’s
I have worked on plugins
I have good expirence in power automate
I have worked on canvas apps and model driven apps
I have knowledge on deployments
and I have worked on dashboards and reports
I have worked on security roles
this is quick brief about me and coming to my latest project
my recent project is ......... and it is in sales module
in this project we are team of 5 members and I am one of the developer in that, I used to
handle all the technical related things in this projects
mention description of project
in this project I used to handle all the customizations and I am also responsible for writing
plugins and JavaScript’s
I am responsible for configuring workflows, business rules, business process flows and
actions based on requirements
I have also configured some power automate flows to send an emails and for doing some
CRUD operations in Dataverse.
Self Introction (2)
Hello, my name is Saikiran.
I have 4 years of experience, fully focused on Microsoft Dynamics 365. Over the years, I’ve gained hands-
on expertise across various areas of CRM development, both in terms of customization and
configuration.
My experience covers:
Setting up environments and managing users.
Creating custom entities, fields, forms, and setting up relationships.
Designing and implementing business rules, workflows, actions, and business process flows.
Developing JavaScript customizations for form and field-level logic.
Writing and deploying custom plugins to meet complex business requirements.
Building Power Automate flows for automation like email alerts and data updates.
Working with both canvas apps and model-driven apps.
Setting up dashboards, reports, and configuring security roles.
Managing solution deployments across environments.
Latest Project Experience:
In my most recent project, which is based on the Sales module, I’ve been working as one of the key
developers in a 5-member team. I’m responsible for handling all technical development tasks, including:
Implementing customizations like entities, forms, and validations
Writing plugins and JavaScript for business logic and field-level behaviors
Configuring workflows, BPFs, and business rules as per business needs
Automating routine processes through Power Automate flows
Ensuring smooth deployments and addressing post-deployment fixes
Sales life cycle:
starts with lead, lead is nothing but potential customer
if we qualify the lead, Account contact and opportunity gets created and we
will redirect to opportunity page
in opportunity we add price list and products
then we create quote, initially quote is in draft state, so we need to activate
the quote
if customer satisfy the quote then we create order, and from order we create
the invoice
Debug plugin:
How to debug plugin
1) Install profiler
2) select plugin and plugin step
3) start profiling
4) throw exception
5) open crm and run the trigger point of that plugin, here we get exception download the log file
6) open plugin registration tool select the plugin and click debug
7) add the log file
8) open visual studio click debug, select the plugin registration tool
9) open plugin registration tool click start execution
plugin pipeline stages:
prevalidation: it executes before the main operation and before the security checks and outside
the database, if there is any error occurs in this stage code will not get roll backed
pre-operation: it executes before the main operation and after the security checks and inside
the database, if there is any error occurs in this stage code will get roll backed
post-operation: it executes after the main operation and after the security checks and inside the
database, if there is any error occurs in this stage code will get roll backed
example: prevalidation: If we want to throw some exception and code should not get roll back
then we use prevalidation
pre-operation: if we want to run the plug-in before main operation performs then we use pre-
operation(before creating some record I need to check some condition's if those satisfies then
only create record r else no then we can use pre-operation
post-operation: If we want to run plugin async r after the main operation completes the we use
post-operations(after creation of record assign it to some user we can user post-operation)
Images
images are used to get values from crm to plugin
pre-image: we get before updated values
post-image we get after updated values
for example I am updating value of one field from A to B, in preimage we get A and in post
image we get B.
depth:
We can prevent infinite loops using context. depth, minimum depth 1 , maximum depth 8
Impersonation:
it is used to run the plugin on behalf of another user, As all the users don’t have all the privilege’s
sometimes it is required to run the plugin from admin user, this we can do using impersonation/ calling
user
secure and unsecure
configs are used to pass information from plugin registration tool to plugin code
secure config: it is visible to only user who has added it, if we move solution to another environment,
secure configs will not be moved
unsecure config: it is visible to all the users and it will be moved along with solution
Target: we get only updated values.
filtering attribute:
for update message if you want to run plugin only on update of few fields, we can select those fields in
plugin registration tool.
field level security:
if we enable field level security, only users who have access can see the data, other users can't
see data of that field
to enable the field level security, we have to open the field and click on enable field level
security, then open settings -> security-> field level security-> select the field and give access to
the users
access teams:
if we want to have a unique set of users requires access to a single record without having an
ownership of the record then we use access teams
How to create access teams:
first we need to enable access teams in entity, in security select access teams templates and
create new, then open the entity and select for add subgrid and select entity as user and view as
access team template
owner teams:
is group of users, if we share any record to owner team ownership of the record also changes
access levels in security roles:
user, business unit, parent-child business unit, organization
privilege’s in security roles:
create, read, write, delete, append, append to, assign, share
append and append to:
for example if we want to add account lookup in contact, we should have append permission to
contact and append to permission to account
Solution: Solution is just like A folder which is used to store the components
managed solution
we cannot do any customizations in managed solution
we cannot export managed solution
if we delete managed solution all the components which are present in that solution gets
deleted
unmanaged solution
we can do customizations only in unmanaged solutions
we can export unmanaged solution
if we delete unmanaged solution only solution gets deleted and all the components still exist in default
solution
Publisher: it is used to identify who has created those components, for every component created in
the solution it will append with prefix which is available from publisher
Patch
After the deployment if we want to move any small component instead of moving whole solution again
we can create patch solution and add our changes in it and we can do patch deployment
clone
After creating patch whenever we are doing complete deployment we can clone the solution so that all
the patch solution will merge into main solution
Display Rules :
are used when we want to show/hide the button on the form. Display rule will completely remove
button from form.
Enable Rules :
are used to make the button enabled or disabled. Button will be present but will be in enabled or
disabled state.
Businessprocessflow:
if we enable business process flow, it defines a set of stages and steps that are then displayed in
a control at the top of the form.
bpf stages: we can add max 30 stages
we can add max 5 entities
we can add max 10bpf for one entity
trigger points of workflow:
when record is created, record is updated, record is assigned, record shared, field change
SCOPE OF Business rules
Form: It will run only for the selected form and in client side
All Forms: It will run for all the forms and in client side
Entity: It will run on all forms and server side
Client side means we need to open the form to execute the business rule
Server side means it will execute in the backend and even if we didn’t open the form it will execute
Business rules Actions:
1. Lock / Unlock
2. Set Visibility
3. [Link] error Message
4. [Link] recommendation
5. [Link] Business required
6. 6. Set Field Value
7. [Link] Default Value
scope of workflow:
User: Workflow will run only on the records owned by the same user as the workflow
user.
Business Unit: Workflow will run on the records owned by the users of the
business unit same as the workflow user.
Parent Child Business Units: Workflow will run on the records owned by the users of
the business unit same as the workflow user as well as any child business units.
Organization: Workflow will run on records owned by any user in CRM
types of workflow: real-time workflow (Sync process), background workflow(Async process)
relationships:
1:N one record in A entity can be linked to multiple records in B entity
N:1 multiple records in A entity can be linked to one record in B entity
N:N one record in A entity can be linked to multiple B records and at the same time one B record
can be linked to multiple records in A entity.
relationship behaviours:
Parental: if we give parental relationship then what ever the changes that occur to parent that
will reflect to child records as well, for example if we delete/share/assign the parent records
then child records also delete/share/assign
referential: in referential relationship, whatever the changes that occurs to parent will not
reflect to child records
referential restrict delete: in this type of relationship of there is any child record we can not
delete the parent record.
cascandial: in this type we can give our own configurations
ROLL-UP FIELDS- 1)The rollups are calculated by scheduled system jobs that run asynchronously in the
background.
2)Wide selection of aggregate functions. You can aggregate data by using the following functions: SUM,
COUNT, MIN, MAXand AVG.
3)The roll up fields comprise of Aggregation that use the fields from the current entity or related child
entities.
4)The data types include decimal or whole numbers, currency, and date/time.
CALCULATED FIELDS- 1)Data is calculated as soon as form is loaded
2)ADDHOURS, ADDDAYS, ADDWEEKS, ADDMONTHS, ADDYEARS, SUBTRACTHOURS, SUBTRACTDAYS,
SUBTRACTWEEKS, SUBTRACTMONTHS, SUBTRACTYEARS, DIFFINDAYS, DIFFINHOURS, DIFFINMINUTES,
DIFFINMONTHS, DIFFINWEEKS, DIFFINYEARS, CONCAT, TRIMLEFT, and TRIMRIGHT.
3)The calculated fields comprise of calculations that use the fields from the current entity or related
parent entities.
4)The available data types for the calculated field:
Single line of text,Option Set,Two Options,Whole Number,Decimal Number,Currency,Date and Time
product catalog:
product catalog consists of pricelist, products, discount, product families, unit groups
diff b/n model driven app/ canvas app:
Model-Driven Apps Canvas App
Model-Driven Apps is an AppModule enabling Canvas App is an AppModule enabling users
users to design and develop component-focused to design and develop task-specific apps with
apps to implement an end-to-end business process.
designing flexibility.
To implement and develop Model-Driven Apps To implement and develop Canvas Apps one
one needs, needs,
The license of Dynamics 365 Product The license of Power Platform
( CE : Finance: Operations) Necessary Roles and
Permission in Data Verse
Canvas Apps can connect and interact with
Model-Driven Apps can connect and interact with
over 350+ Connectors, empowering users to
only one data connector that is Data Verse.
have more functionalities.
Logic implementation can be done in multiple
ways including, Logic implementation is app-specific and
Business Rules can be done through,
Workflows Excel-like formula and
Actions conditional checks
Plugins
Design of application is more user friendly
The design and view of App are governed by the
and larger flexibility for the developer to
components been utilized in the application.
cater to look and feel requirement.
Does not support version control, changes once Supports version control and changes once
done have to be rolled back by subsequent done can be reverted at any point through a
deployment. simple click.
global variable vs local variable:
global variable we can use all over the app, local variable is specific to screen
error handling in flows:
we need to add try catch inside the scope, we need to create 2 scopes, 1 st one will be try and 2nd one is
catch, 2nd scope is configured is failed of 1st one.
types of flows:
Instant flow, cloud flow, desktop flow, schedule flow
How you get requriments/ what is your daily routine:
Generally we use Azure Devops to maintain our daily activities, in devops user stories and bugs
will be created and my team lead will assign them to us, I used to pick up based on priority and
work on those tasks.
from ribbon button if we want to pass context to javascript we need to use primary control
Difference between System workflow and plugin
[Link] points of workflow are different from trigger points of plugin
[Link] can not get child records in workflow
[Link] will not have images in workflow
[Link] will not have pipeline stages in workflow
Difference between custom workflow and plugin
[Link] workflow need to be called form system workflow/actions it cannot trigger by its own
[Link] can add input and output parameters for custom workflow
[Link] plugin we can select pipeline stages, images, filtering attribute, execution order these
things are not available in custom workflow
4. plugin will get timeout after 2mins, workflow will not have timeout.
Business rules vs javascript
[Link] can perform only 7 actions in business rules
[Link] rules cannot be triggeres on lookup fileds.
3. javascripts triggers first and then business rules gets triggered
[Link] can not get other record values in business rules.
5. business rules can run both on client and server side, but javascript will run only on client
side
difficultplugin which you have written
[Link] matrix
in one of my project there is approval matrix, Here we are having 4 levels of people, L1,L2,L3,L4, if any
booking is created with any discount percentage
first we need to check the user level and discount percentage is with in his limit or not, and if it is not
with in his limit then we need to create approval records to all the above level people,for example if L4
created booking we need to created approval record to L3,L2,L1 and first we need we make L3 record as
active and other L2,L1 records as draft, if L3 approves then we make L2 as active, if L2 approves then we
make L1 as active, if all approves then only we make booking as approved, else it will be rejected.
here for sending approvals we have used power automate flows, we have used outlook send email with
options, if we use this ,the receiver of this email can directly approve/reject from the email itself no
need to open the crm and that response we get in flow itself and we update the appropriate record as
approved
[Link] integration:
In our project we have used outbound integrations, for example on create of account we need to send
the account details to some external source(SAP/molesoft)
here we have used plugin for doing this, on create of account plugin gets triggered and gathers all the
required information and converts as json body, and we send http request to the given API by adding
the authentication details and request body and sends the request, in response we get account
activation ID and that again we update in the same record in CRM.