如何在Dynamic CRM 2011中使用自定义Workflow

如何在Dynamic CRM 2011中使用自定义Workflow,第1张

实现步骤:
创建自定义workflow activity ,实现对CRM数据更新。
创建自定义workflow,实现整个流程。
集成自定义workflow到CRM

创建自定义workflow activity
启动 Microsoft Visual Studio 2010。
在"文件"菜单上,单击"新建",然后单击"项目"。
在"新建项目"对话框的"已安装的模板"窗格中,选择"Visual C#"下的"工作流",然后选择"活动库"。
指定解决方案的名称和位置,然后单击"确定"。
导航到"项目"菜单并选择"属性"。在"应用程序"选项卡上,指定"NET Framework 4"作为目标框架。
添加对 MicrosoftXrmSdkdll 和 MicrosoftXrmWorkflowdll 程序集的引用。
删除项目中的 Activity1xaml 文件。
将类文件 (cs) 添加到项目中。在解决方案资源管理器中,右键单击项目,选择"添加",然后单击"类"。在"添加新项"对话框中,键入类的名称,然后单击"添加"。
打开类文件,然后添加以下 using 指令:
using SystemActivities;
using MicrosoftXrmSdk;
using MicrosoftXrmSdkWorkflow;
使该类继承自 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($settingAllowDeclarativeWorkflows="True")
创建工作流项目
在 Microsoft Visual Studio 中的"文件"菜单上,选择"新建",然后单击"项目"。
在"已安装模板"下展开"Visual C#",然后单击"工作流"。
单击"活动库",选择"NET Framework 4",为项目指定名称和位置,然后单击"确定"。
在"解决方案资源管理器"中,右键单击"活动库",然后单击"添加引用"。
单击"浏览",并找到 MicrosoftXrmSdkdll 和 MicrosoftXrmSdkWorkflowdll文件。选择这些文件并将其添加到项目。
进行工作流的定制。
集成自定义workflow到CRM
使用插件注册工具来注册自定义工作流活动程序集到CRM。
构建 Plug-in Registration 工具。您可在SDK\Tools\PluginRegistration 文件夹中找到该工具的源代码。若要构建和使用插件注册工具,您必须首先安装 Windows Identity Foundation。
用户帐户必须具有系统定制员或系统管理员角色。
导入自定义的workflow
%TrainingKit%\Labs\WorkflowVS2010\Sources\Assets\WorkflowXamlTool
打开 WorkflowXamlToolsln, 修改workflow name and primaryentity ,执行solution

var newWF = new Entity("workflow");
newWFAttributesAdd("name", "On test 10311");
newWFAttributesAdd("type", new OptionSetValue(1));
newWFAttributesAdd("scope", new OptionSetValue(4));
newWFAttributesAdd("category", new OptionSetValue(0));
newWFAttributesAdd("primaryentity", "abc_dummy");
newWFAttributesAdd("xaml", content2);
newWFAttributesAdd("ondemand", true);

try
{
_serviceProxyCreate(newWF);

MessageBoxShow("Workflow successfully imported", "Import",MessageBoxButtonsOK, MessageBoxIconInformation);
}
catch (FaultException ex)
{
}
选择自定义xaml 文件,导入。

我认为Alfred最成功的地方,是为繁琐的命令执行 *** 作,提供了一种无比优美简洁的使用方式,而且还提供了门槛很低的扩展框架,让用户充分发挥自己的想象力。
回到问题本身,分享下我自己的经历。
我学习的方式主要通过参考别人已有的workflow。workflow具体做的事情可能千差万别,但是有很多workflow的实现逻辑是相似的,比如我之前想写一个workflow用于切换mac的全局proxy:Proxy Toggle ,就很大程度参考了另一个用于切换Wi-Fi开发的workflow:Wi-Fi toggle。
Alfred有个很好的地方,就是你都能在alfred中看到你所使用workflow的具体实现,也就是它们对你都是开源的,至少我用过的workflow都可以。大部分workflow直接在alfred的workflows选项卡下都能看到,有部分workflow可能调用一些脚本文件,你也可以进入对应workflow文件夹下打开具体的脚本文件(可以通过右键workflow -> Show in Finder 打开workflow的文件夹)
我认为理解Afred workflow的几个组成部分是入门的关键,包括Triggers、Inputs、Actions、Outputs。
Triggers不是必备的,常用来设置快捷键开启某个Workflow。
Inputs定义了你在Alfred输入框中输入对应的keyword相应的显示内容。
以我常用的 @icyleaf 的有道翻译workflow为例,输入“yd workflow”下面所显示的结果都是Inputs中定义的。Inputs中以一个约定的xml格式输出文本就能被Alfred正确显示,上图的显示对应的xml代码为:
<xml version="10">
<items>
<item uid="11392438279" arg="工作流 ['wə:k,fləu]" valid="yes" autocomplete="">
<title>工作流 ['wə:k,fləu]</title>
<subtitle>翻译结果</subtitle>
<icon>iconpng</icon>
</item>
<item uid="11392438279" arg="n 工作流,工作流程" valid="yes" autocomplete="">
<title>n 工作流,工作流程</title>
<subtitle>简明释义</subtitle>
<icon>iconpng</icon>
</item>
<item uid="21392438279" arg="工作流, 工作流技术, 工作流程" valid="yes" autocomplete="">
<title>工作流, 工作流技术, 工作流程</title>
<subtitle>网络释义:Workflow</subtitle>
<icon>iconpng</icon>
</item>
<item uid="31392438279" arg="工作流管理, 流程管理, 工作流程管理" valid="yes" autocomplete="">
<title>工作流管理, 流程管理, 工作流程管理</title>
<subtitle>网络释义:workflow management</subtitle>
<icon>iconpng</icon>
</item>
<item uid="41392438279" arg="工作流程动作, 工作流程 *** 作, 工作流 *** 作" valid="yes" autocomplete="">
<title>工作流程动作, 工作流程 *** 作, 工作流 *** 作</title>
<subtitle>网络释义:workflow action</subtitle>
<icon>iconpng</icon>
</item>
</items>
因为中文字符有转码,所以看起来有点像乱码:( ,这里跟微信公众帐号的工作方式很想吧。
Actions对应选中项后执行的 *** 作,比如在我的Proxy Toggle中,用户执行全局代理切换的工作脚本就写在actions中。
Outputs一般用于显示 *** 作的结果,提示 *** 作成功与否,以Post Notification较为常见,通过Mac的notification center提示。
以有道翻译为例,workflow中各部分示意图如下:
至于调试,貌似也用不到什么技巧,我都是测过脚本语法没问题后直接在本机上执行。
希望以上能对想入门的同学有帮助,这里有我自己写或修改过的几个workflow 尝试给自己写AlfredWork,都是比较简单的。我觉得workflow实现复杂与否不重要,关键在于使用频繁,是否能提高效率。
关键还是多实践,了解workflow工作方式之后,写workflow也就跟开发其他脚本一样了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12840536.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存