使用 Notify.js 添加 link 到新创建的实体记录 - CRM
Add link to the newly created entity record using Notify.js - CRM
我有一个自定义工作流程 activity,它从我的自定义工作流程 activity 中创造了新机会。
我将 activity 作为行动步骤。我正在使用动作,因为它有一个输出。我需要获取我创建的机会的 ID。
我使用 Process.js 从 JS 网络资源调用该操作。之后,我使用 Notify.js 通知用户机会已创建。在该通知上,我需要有一个按钮,该按钮将 link 用于新创建的机会。
以下是与输出参数相关的部分 C# 代码。只需注意用于创建机会的代码部分,并执行更多任务即可正常工作:
//define variable
[Output("Opportunity")]
[ReferenceTarget("opportunity")]
public OutArgument<EntityReference> NewOpportunity { get; set; }
//create opportunity and entity reference(i am not sure do ineed entity reference, or something else for that link)
Guid opportunityId = service.Create(opportunity);
EntityReference OppId = new EntityReference(opportunity.LogicalName, opportunityId);
//assign value to the output variable
NewOpportunity.Set(Econtext, OppId);
以下是我在动作定义中创建动作参数的方式:
这里是调用 action 的 JS 代码:
function toOpportunity(){
Process.callAction("ad_opportunity",
[{
key: "Target",
type: Process.Type.EntityReference,
value: { id: Xrm.Page.data.entity.getId(), entityType: "ad_productsamplerequest" }
}],
function (param) {
//Success
Notify.add("New Opportunity was created:", "INFO", "opportunity",
[{
type: "button",
text: "Go to opportunity",
callback: function () {
}
}]);
},
function () {
// Error
alert("Opportunity was not created");
}
);
只是说,它起作用了,调用了动作,创造了机会,之后有通知。只是不知道如何使用操作输出参数将 link 设置为机会。
您似乎正在尝试处理 CodeActivity
class 中的操作。这是行不通的。 OutArgument
属性只能在工作流中访问,不能返回给调用进程。
而是创建一个具有所需输入和输出参数的操作。然后创建一个插件并在此操作上注册同步 post 更新步骤。插件 class 实现必须将机会 ID 添加到 OutputParameters
集合,如下所示:
public void Execute(IServiceProvider serviceProvider)
{
var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
var factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
var service = factory.CreateOrganizationService(context.UserId);
Entity opportunity;
// TODO: add code here to build the opportunity.
Guid opportunityId = service.Create(opportunity);
context.OutputParameters.Add("NewOpportunity", new EntityReference("opportunity", opportunityId));
}
另请参阅 MSDN 上的解释。
Henk 很伤心,无法传递实体引用,因此我在 CodeActivity
:
中将 Guid 作为字符串传递
[Output("Opportunity")]
public OutArgument<string> NewOpportunity { get; set; }
...
Guid opportunityId = service.Create(opportunity);
string guidSend = opportunityId.ToString();
NewOpportunity.Set(Econtext, guidSend);
之后我在 JS 中使用了那个输出:
var OGuid = param["NewOpportunity"];
Opport = OGuid.replace(/ /g,'');
并像这样设置与新机会的关系:
Xrm.Utility.openEntityForm("opportunity",""+Opport);
JavaScript
的第一部分在Action调用中,但不在通知中,最后一行在通知中,所以它们在代码的不同部分。因此,我将 Opport
定义为全局变量,然后我可以在一个函数中设置值,并在通知中从另一个函数调用它。
还有一个选项,没有C#
部分。可以在通知回调函数和 return 上次创建的机会 ID 中创建提取。这更容易,但不是更好:
var contactFetchXML = "<fetch mapping='logical' version='1.0' distinct='true' count='1' >"+
"<entity name='opportunity' >"+
"<attribute name='opportunityid' />"+
"<order attribute='createdon' descending='true' />"+
"</entity>"+
"</fetch>";
var Guid = XrmServiceToolkit.Soap.Fetch(contactFetchXML);
Xrm.Utility.openEntityForm("opportunity",""+Guid[0].id);
我有一个自定义工作流程 activity,它从我的自定义工作流程 activity 中创造了新机会。 我将 activity 作为行动步骤。我正在使用动作,因为它有一个输出。我需要获取我创建的机会的 ID。 我使用 Process.js 从 JS 网络资源调用该操作。之后,我使用 Notify.js 通知用户机会已创建。在该通知上,我需要有一个按钮,该按钮将 link 用于新创建的机会。
以下是与输出参数相关的部分 C# 代码。只需注意用于创建机会的代码部分,并执行更多任务即可正常工作:
//define variable
[Output("Opportunity")]
[ReferenceTarget("opportunity")]
public OutArgument<EntityReference> NewOpportunity { get; set; }
//create opportunity and entity reference(i am not sure do ineed entity reference, or something else for that link)
Guid opportunityId = service.Create(opportunity);
EntityReference OppId = new EntityReference(opportunity.LogicalName, opportunityId);
//assign value to the output variable
NewOpportunity.Set(Econtext, OppId);
以下是我在动作定义中创建动作参数的方式:
这里是调用 action 的 JS 代码:
function toOpportunity(){
Process.callAction("ad_opportunity",
[{
key: "Target",
type: Process.Type.EntityReference,
value: { id: Xrm.Page.data.entity.getId(), entityType: "ad_productsamplerequest" }
}],
function (param) {
//Success
Notify.add("New Opportunity was created:", "INFO", "opportunity",
[{
type: "button",
text: "Go to opportunity",
callback: function () {
}
}]);
},
function () {
// Error
alert("Opportunity was not created");
}
);
只是说,它起作用了,调用了动作,创造了机会,之后有通知。只是不知道如何使用操作输出参数将 link 设置为机会。
您似乎正在尝试处理 CodeActivity
class 中的操作。这是行不通的。 OutArgument
属性只能在工作流中访问,不能返回给调用进程。
而是创建一个具有所需输入和输出参数的操作。然后创建一个插件并在此操作上注册同步 post 更新步骤。插件 class 实现必须将机会 ID 添加到 OutputParameters
集合,如下所示:
public void Execute(IServiceProvider serviceProvider)
{
var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
var factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
var service = factory.CreateOrganizationService(context.UserId);
Entity opportunity;
// TODO: add code here to build the opportunity.
Guid opportunityId = service.Create(opportunity);
context.OutputParameters.Add("NewOpportunity", new EntityReference("opportunity", opportunityId));
}
另请参阅 MSDN 上的解释。
Henk 很伤心,无法传递实体引用,因此我在 CodeActivity
:
[Output("Opportunity")]
public OutArgument<string> NewOpportunity { get; set; }
...
Guid opportunityId = service.Create(opportunity);
string guidSend = opportunityId.ToString();
NewOpportunity.Set(Econtext, guidSend);
之后我在 JS 中使用了那个输出:
var OGuid = param["NewOpportunity"];
Opport = OGuid.replace(/ /g,'');
并像这样设置与新机会的关系:
Xrm.Utility.openEntityForm("opportunity",""+Opport);
JavaScript
的第一部分在Action调用中,但不在通知中,最后一行在通知中,所以它们在代码的不同部分。因此,我将 Opport
定义为全局变量,然后我可以在一个函数中设置值,并在通知中从另一个函数调用它。
还有一个选项,没有C#
部分。可以在通知回调函数和 return 上次创建的机会 ID 中创建提取。这更容易,但不是更好:
var contactFetchXML = "<fetch mapping='logical' version='1.0' distinct='true' count='1' >"+
"<entity name='opportunity' >"+
"<attribute name='opportunityid' />"+
"<order attribute='createdon' descending='true' />"+
"</entity>"+
"</fetch>";
var Guid = XrmServiceToolkit.Soap.Fetch(contactFetchXML);
Xrm.Utility.openEntityForm("opportunity",""+Guid[0].id);