Task - 4
Call the Plugin using JavaScript and set the Approved Status
Call the plugin using JavaScript and set the approved status.
User Story: -
When we click on the Approve button in the student Entity record then the status field value in the student record should become Approved.
Sudo code: -
- Create an Approve button for custom entity using Ribbon work bench in XRM Toolbox.
- Create a solution for custom entity ribbon work bench.
- Add the required entity meta data to the solution.
- Use this solution in Ribbon workbench to create buttons and publish it in the entity.
- Create an Action to use it as a Message in Plugin.
- Create a plugin.
- In the plugin retrieve the EntityReference to a variable.
- Define Entity variable by getting values of Entity Id and Logical name from EntityReference.
- null check the entity.
- Set the OptionSet Attribute value to the Approved value.
- Use the service.Update(Entity) to update in the server.
- Register the Plugin using the Plugin registration tool and set the Message name as the Action name.
- Now we have to create a JavaScript file for calling the Action, this will automatically call the plugin.
- We can use a Web API execute method to call the Action using Javascript, you can get this by using the CRM REST Builder.
- Create a web resource using this JavaScript code.
- Use the Ribbon work bench in XRM Toolbox to add this JavaScript code to the Approve button as Action code.
JavaScript code: -
function CallActionToTriggerPlugin(primaryControl) {
var formContext = primaryControl;
var id = formContext.data.entity.getId().replace("{", "").replace("}", "");
var parameters = {};
var entity = {};
entity.id = id;
entity.entityType = "naree_student";
parameters.entity = entity;
var new_EffiCallActiontotriggerPluginRequest = {
entity: parameters.entity,
getMetadata: function () {
return {
boundParameter: "entity",
parameterTypes: {
"entity": {
"typeName": "mscrm.naree_student",
"structuralProperty": 5
}
},
operationType: 0,
operationName: "new_EffiCallActiontotriggerPlugin"
};
}
};
Xrm.WebApi.online.execute(new_EffiCallActiontotriggerPluginRequest).then(
function success(result) {
if (result.ok) {
//Success - No Return Data - Do Something
console.log("Success");
}
},
function (error) {
Xrm.Utility.alertDialog(error.message);
}
);
}
Plug-in code: -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk;
namespace Plugin1
{
public class CallPluginFromActionAndJavaScript: IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = factory.CreateOrganizationService(context.UserId);
ITracingService tracer = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is EntityReference)
{
EntityReference StudentRef = (EntityReference)context.InputParameters["Target"];
Entity Student = service.Retrieve(entityName: StudentRef.LogicalName,
id: StudentRef.Id,
columnSet: new ColumnSet("naree_status___"));
if (Student != null)
{
Student.Attributes["naree_status___"] = new OptionSetValue(737110000);
service.Update(Student);
}
}
}
}
}
Comments
Post a Comment