
正文
dynamics邮件工作流,邮件的工作原理
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
如何在Dynamic CRM 2011中使用自定义Workflow
实现步骤:
创建自定义workflow activity ,实现对CRM数据更新。
创建自定义workflow,实现整个流程。
集成自定义workflow到CRM.
?
创建自定义workflow activity
启动 Microsoft Visual Studio 2010。
在"文件"菜单上,单击"新建",然后单击"项目"。
在"新建项目"对话框的"已安装的模板"窗格中,选择"Visual C#"下的"工作流",然后选择"活动库"。
指定解决方案的名称和位置,然后单击"确定"。
导航到"项目"菜单并选择"属性"。在"应用程序"选项卡上,指定".NET Framework 4"作为目标框架。
添加对 Microsoft.Xrm.Sdk.dll 和 Microsoft.Xrm.Workflow.dll 程序集的引用。
删除项目中的 Activity1.xaml 文件。
将类文件 (.cs) 添加到项目中。在解决方案资源管理器中,右键单击项目,选择"添加",然后单击"类"。在"添加新项"对话框中,键入类的名称,然后单击"添加"。
打开类文件,然后添加以下 using 指令:
using System.Activities;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Workflow;
使该类继承自 CodeActivity 类:
public class SampleCustomActivity : CodeActivity
通过添加Execute方法为类添加功能:
protected override void Execute(CodeActivityContext context)
{
//Activity code
Update Data here
}
编译项目以创建程序集 (.dll)。
?
?
创建自定义workflow
若要使用在 Microsoft Dynamics CRM 之外创建或修改的 XAML 工作流,请确保:
您的用户帐户在 Microsoft Dynamics CRM 中具有 Deployment Administrator权限。
在 Microsoft Dynamics CRM 服务器上启用了声明性工作流。 PowerShell($setting.AllowDeclarativeWorkflows="True")
创建工作流项目
在 Microsoft Visual Studio 中的"文件"菜单上,选择"新建",然后单击"项目"。
在"已安装模板"下展开"Visual C#",然后单击"工作流"。
单击"活动库",选择".NET Framework 4",为项目指定名称和位置,然后单击"确定"。
在"解决方案资源管理器"中,右键单击"活动库",然后单击"添加引用"。
单击"浏览",并找到 Microsoft.Xrm.Sdk.dll 和 Microsoft.Xrm.Sdk.Workflow.dll文件。选择这些文件并将其添加到项目。
进行工作流的定制。
集成自定义workflow到CRM.
使用插件注册工具来注册自定义工作流活动程序集到CRM。
构建 Plug-in Registration 工具。您可在SDK\Tools\PluginRegistration 文件夹中找到该工具的源代码。若要构建和使用插件注册工具,您必须首先安装 Windows Identity Foundation。
用户帐户必须具有系统定制员或系统管理员角色。
导入自定义的workflow
%TrainingKit%\Labs\WorkflowVS2010\Sources\Assets\WorkflowXamlTool.
打开 WorkflowXamlTool.sln, 修改workflow name and primaryentity ,执行solution.
?
var newWF = new Entity("workflow");
newWF.Attributes.Add("name", "On test 10311");
newWF.Attributes.Add("type", new OptionSetValue(1));
newWF.Attributes.Add("scope", new OptionSetValue(4));
newWF.Attributes.Add("category", new OptionSetValue(0));
newWF.Attributes.Add("primaryentity", "abc_dummy");
newWF.Attributes.Add("xaml", content2);
newWF.Attributes.Add("ondemand", true);
?
try
{
_serviceProxy.Create(newWF);
?
MessageBox.Show("Workflow successfully imported.", "Import",MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (FaultException ex)
{
}
选择自定义xaml 文件,导入。
相关问答
Q1: 微软Dynamics 365 是什么?
微软 Dynamics 365 是微软新一代云端智能商业应用,通过对 CRMERP 的完美整合,助力企业成长及数字化转型。
Dynamics 365 通过交付无缝协作且针对特定用途的全新云端应用,帮助企业重塑生产力及业务流程,并通过与Azure、Office 365、Power BI 等微软重磅产品的无缝集成,为企业带来全业务流程的数字化转型升级,进而让企业增强市场适应能力和业务创新能力,突破成长瓶颈,顺利实现数字化转型!
扩展资料:
Microsoft Dynamics 365 四大价值
1、按需起步
与现有IT资源整合,定制化的流程;在信息孤岛之间打通业务流程,更快将线索转化为营收;根据自己的发展节奏按需购买, 适应企业和市场的变化。
2、随时高效
与微软其他产品,如Office 365,Outlook无缝集成;用户界面袭承“一个微软”的风格,利用熟悉的操作方法快速上手、产出;跨设备统一体验,适配于iOS,安卓,Windows和网页版。
3、智能内置
在所有的功能点和业务环节都有内置的智能系统支持;开箱即用的可视化数据与商业智能,轻松获得深度的商业洞察;变革性的高级分析平台,提供准确的预测和实用的信息。
4、灵活扩展
全应用共享数据模型,可实现多应用的功能组合;利用PowerApps和Microsoft Flow无代码编写业务程序,任务流程自动化;可随时在现有业务上添加新功能,也可以快速、平缓地调整运营模式。
Q2: Power automate怎么看批到哪里了?
微软Dynamics 365 Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics365erLuoYong ,回复395或者20200224可方便获取本文,同时可以在第一间得到发布的最新信息,follow me!
Dynamics 365 Customer Engagement已经强烈推荐使用Power Automate代替Workflow,主要收集常见的问题做解答。
1. Power Automate如何调用Dynamics 365 Customer Engagement中的操作(Action)?
可以登录 或者 ,打开左边的Solutions ,新建或者打开已有Solution。
然后新建Flow。
Power automate怎么看批到哪里了
调用操作时候,注意Connector 要选择 Common Data Service (current environment ).
然后可以选择 Perfrom a bound action 或者 Perform an unbound action 进行调用即可。如果选不到,确认action已经激活,然后看看 https://***.crm.dynamics.com/api/flow/openapi 这个url访问是否报错。
2. 如何获取选项集字段的显示文本。
我开始以为直接查询的时候获取不到,以为只能获取到存储值,后来经高人指点是可以的。
之前我的方法很笨,就是再查询一次stringmap实体,比如 https://***.crm.dynamics.com/api/data/v9.1/stringmaps?$filter=objecttypecode eq 'ly_demo' and attributename eq 'statuscode' and langid eq 1033 and attributevalue eq 1 。
更好的办法是直接从trigger返回的body中获取值,注意选项集字段若为statuscode,需要写成 _statuscode_label。
需要使用表达式输入,例如: triggerOutputs()?['body/_lvo_addresschangetype_label'] ,当然不要全部手写,可以选一个字段值,然后选择 Peek Code,查看使用的表达式,然后自己用表达式来输入,修改自动生成的表达式为自己想要的字段值即可。
如果是通过 Get a record等查询方式,请通过类似 outputs('Your_Action_Name')?['body/ly_optionsetfieldname@OData.Community.Display.V1.FormattedValue'] 的表达式来获取。
3.如何获取当前环境的base url。
这个url很重要,我们在邮件或者别的地方插入链接让用户可以点击打开Dynamics 365的记录就需要这个。
参考文章 Quick Tip: CDS Base URL in Flow 可以知道从前面的查询中获取body中的@odata.id元素的值,然后分割下获取第一元素值即可,表达式类似:
first(split(outputs('Get_Creators_primary_emailaddress')?['body']['@odata.id'],'/api/')) 。
或者
first(split(outputs('Get_Creators_primary_emailaddress')?['body']['@odata.context'], '/api/'))
我一般用一个变量将这个值保存起来,假设变量名是CurrentEnvBaseUrl ,那么插入url使用的表达式就类似:
concat(variables('CurrentEnvBaseUrl'),'/main.aspx?pagetype=entityrecordetn=ly_demoid=',triggerOutputs()?['body/ly_demoid'])
Power Automate中可以用到的函数参考文档:Reference guide to using functions in expressions for Azure Logic Apps and Power Automate
Dynamics 365 Customer Engagement通过URL打开记录,窗体,视图等请参考官方文档: Open forms, views, dialogs, and reports with a URL
4.如何查询的时候同时获取查找字段的其他信息(含主属性信息)。
使用Common Data Service (current environment) 这个connector中的Get a record或者List records查询记录的时候,默认情况下对于查询字段只返回类似如下的三个属性:
"_modifiedby_value@Microsoft.Dynamics.CRM.lookuplogicalname": "systemuser",
"_modifiedby_value@odata.type": "#Guid",
"_modifiedby_value": "21c43fb9-f446-ea11-a816-000d3a3788d7",
如果我要获取查找字段的主属性值甚至其他值呢?如果我要获取modifiedby这个人主属性fullname的值甚至其邮箱呢?当然,通过再一次查询肯定可以。
我这里介绍的是另外一种方法,原理可以参考我的文章 Dynamics 365 We API ODATA语法根据父记录查询子记录,根据子记录查询父记录(附上根据团队,队列名称查成员) 。
具体设置类似如下:
然后你可能会问如何获取这个值?对于使用Get a record,类似的表达式是 outputs('Get_a_record')?['body/modifiedby']['internalemailaddress']
对于使用List records,类似的表达式是 items('Apply_to_each')?['modifiedby']['internalemailaddress'] 。
也不用特别记忆,看自动生成的语法是什么样的,自己修改下即可。
5.能调用自定义工作流活动吗?
我认为当前不能,不代表后续不能。 对比可以参考官方文档, ,Power Automate的功能在不断增强。
6.能发送邮件并显示在D365中的Timeline吗?
在Power Automate中可以通过Outlook这个Connector来发送邮件,但是这种邮件与Dynamics 365的关系不大。有些时候我们希望能调用Dynamics 365中Workflow那种发送邮件的能力,发送的邮件能和D365的记录关联,并展示在关联记录的Timeline中。答案是可以的,详情可以参考 Send Dynamics 365 Emails from Power Automate 或者 Creating and Sending an Email from Dynamics 365 using Power Automate。我总结下重点,也是创建 Email Messages 这个实体记录,收件人可以通过 Activity Party Attribute Name 设置为To,然后在其对应的 Activity Party Attribute Value中设置值来设置,可以设置为类似 /contacts(@{triggerOutputs()?['body/contactlid']}) 这种。邮件的主题当然是Subject字段,内容是Description字段,关于字段会出现很多类似 Regarding (Opportunities) 的字段,找到你要管理的实体类型,设置为类似 /contacts(@{triggerOutputs()?['body/contactlid']}) 这种格式。发送邮件是通过 Common Data Service (current environment ) 这个Connector通过 Perform an bound action来做的,调用的Action Name是SendEmail,参考下图。如果要将收件人设置为文本字段的值,可以参考我这个博文 Dynamics 365中使用工作流发邮件让其可以发往文本字段指定的邮箱 注册一个插件来实现。
7.有类似child flow的功能吗?
答案是有,2019年10月份GA的,可以参考官方文档 Call Child Flows ,博文可以参考 October Updates for Microsoft Flow 。
一般对于child flow我选择Power Apps作为触发器,如果child flow有输出参数,那么它的最后一个action一般是Respond to a Power App or flow 或者 Response。
parent flow调用child flow的时候选择Flows连接器下面的 Run a Child Flow 这个action来调用。
8.异常处理一般如何做?
可以参考 Advanced Error Handling With Power Automate , Microsoft Flow Error Handling ,Try-Catch pattern in Microsoft Flow 。
主要使用result函数,函数参考见 Reference guide to using functions in expressions for Azure Logic Apps and Power Automate 。
参考官方文档:Handle errors and exceptions in Azure Logic Apps 。
还需要考虑一些limit,官方文档请参考:Limits and configuration information for Azure Logic Apps
我的如下可以供参考:
用到的表达式分别是:
result('Main_Scope')
createArray('Failed', 'TimedOut')
item()['status'])
body('Filter_array')
items('Apply_to_each_result')['name']
items('Apply_to_each_result')['status']
items('Apply_to_each_result')['code']
items('Apply_to_each_result')['outputs']['body']['error']['message']
dynamics邮件工作流的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于邮件的工作原理、dynamics邮件工作流的信息别忘了在本站进行查找喔。







