Creating a JD Edwards Enterprise. One Workflow Process. Below are definitions of various terms relevant to Teamcenter and Product Lifecycle Management (PLM). This document is very much an ongoing work-in-progres. Access the workflow process in JD Edwards Enterprise. One Workflow Modeler. Right- click the Action task, select Escalation, and then select Add and Attach. On Escalation Rules, complete these fields: Escalation Rule. Type a unique name for the escalation rule. Description. At this time, do not complete any of the fields in the grid and click OK to continue. The system returns you to the workflow diagram in JD Edwards Enterprise. One Workflow Modeler. Right- click the Action task, select Escalation, and then select Event Rules. On the System Functions form, select an object from the Available Objects area for the To Recipient. Highlight the Cc Recipient row. Select an object from the Available Objects area for the Cc Recipient. If you do not want to specify a Cc Recipient, select < None>. Highlight the Bcc Recipient row.
Select an object from the Available Objects area for the Bcc Recipient.If you do not want to specify a Bcc Recipient, select < None>.Specify the mailbox to which you want the escalated message delivered in the Work Center.For example, you might select the Credit Management queue for a credit limit approval message.Highlight the Mailbox row. Microsoft Outlook Shared Mailbox Rules Not Working . In the Available Objects area, select a mailbox (or queue). Note. You can use one of the existing queues in the system or create a new queue. here. See Setting Up Work Center Queues. To include a subject line in the escalated message, highlight the Subject row and then select the corresponding data item that contains the subject text, if applicable. You can also enter a subject as a literal value. If the message does not require a subject, select < Blank>. You would most likely select < Blank> when using a message template (a data dictionary message), which would already contain a subject line. To add static text to the escalated message, highlight the Text row and select the corresponding data item that contains the text for the body of the message. You can also enter the text as a literal value. If you do not need to use the Text data item, select < Blank>. Note. You can use the Text parameter to add supplemental text to a message template. This text will appear above the message template text when the user opens the message. To attach a shortcut to a JD Edwards Enterprise. One workflow message, highlight the Active row, and then perform the following steps. If you are not attaching a shortcut, select < None> from the Available Objects area. In the Available Objects area, double- click < Define Active Message>. On Work With Applications, in the Query by Example row, enter the application that you want the shortcut to launch, and then click Find. For example, if you want to use the Generic JD Edwards Enterprise. One Workflow Approval Form, enter P9. Find. On Work With Forms, double- click the row containing the form that you want to use. On Form Interconnections, map the data structures to the appropriate available objects. See "Creating a Modal Form Interconnection" in the JD Edwards Enterprise. One Tools Development Tools: Form Design Aid Guide. Click OK. The system returns to the System Functions form. To attach a message template, highlight the Message row, and then perform the following steps. If you are not using a message template, select < None> from the Available Objects area. In the Available Objects area, double- click < Define Message>. On Text Substitution, enter the name of the message that you want to use in the Dictionary Item field and click Find. For example, you might enter LM1. Credit Limit Approval message. See Setting Up Message Templates. From the Available Objects list, select each data item that contains the value that you want to substitute into the message and click OK. For the Media Object Name, select an object from the Available Objects area. If you are not using a media object, select < None>. For the Media Object Key parameter, select an object from the Available Objects area. If you are not using a media object, select < None>. After you have finished mapping all of the parameters for the escalated message, click OK. Amd Radeon Hd 6520G Software Companies here. Using WF4 as a Business Rule Engine. Introduction. A project at work forced me to get up to speed on Windows Workflow Foundation (WF) quickly. My boss wanted to use it as a business rule engine where the end user could edit the rules themselves. They didn't necessarily need full flexibility on the editing, but the core parameters of the rules had to be editable. Now there's probably hundred ways to approach this, and many ways to do it without using Workflow Foundation, but I decided do a proof of concept doing so. I then came over Christophe Geers' Blog and the article Using Rules outside of a Workflow. This was the kind of kick- start I needed - or so I thought, until I noticed it targets WF3 (Workflow for . NET 3. 5). Now I could go on and use WF3, but some Googling and reading lead me to believe i would be better prepared for the future using WF4 instead*. In this article I will implement the same application as Christophe Geers did, but in Workflow 4. You may argue against this in the comment field if you like - I'm still not sure this is an obvious choice. Workflow 3 vs 4. So what has changed? A lot. Microsoft has rewritten the Workflow framework quite extensively from WF3 to WF4, and the way you work with Rules is fundamentally changed. Long story short, I feel they've tried to generalize the concept of an element in a workflow to the point where "everything is an apple". Maybe they've succeeded - I really haven't worked long enough with the framework to comment on this. Anyway, a Rule is now a basically an Activity configured accordingly. The Rule class is obsolete. I will not go into detail on the changes - Microsoft have published a 1. Rules in the document WF Guidance: Rules which is a part of the WF4 Migration guide. The Salutation Resolver Solution. Christophe Geers implemented a rule set in WF3 which basically decides the correct salutation in a letter for a person given some basic properties about that person. I'm not going to go into the same level of detail regarding the problem domain as Geers did, instead I'll focus on how to implement it in WF4. For reference, go to his blog entry at any time. This table will describe the expected result though: Gender. Age. Married. Salutation. M> 1. 8Yes/No. Mr. F> 1. 8No. Miss. F> 1. 8Yes. Mrs. F/M< 1. 8Yes/No. To the parents of. The solution will be divided into three projects: A shared library with the business entities. A Forms project which take input and allow you to edit rules. A Workflow Activity project. This is where the juice is. The Forms project contains two forms. The parameter input form looks like this: It will allow you to change the input parameters and see how the result of the workflow execution changes accordingly. The second form is for altering the business rules runtime. I will come back to that later. The shared library contains two important classes - Person. Geers' blog, and Salutation. Assignment. Rule. The Activity project contains logic and data for executing the business rules in one of three ways: From a Workflow diagram designed with the Visual Studio Designer. From a hard- coded workflow where all the logic is written in C# code. From a dynamic workflow where the workflow logic is generated from user input by C# code#1 is cool. The designer produces XAML of the workflow (or "business rules"), which is suited for persitance and to a certain degree modification. I didn't really see my endusers editing XAML or using Visual Studio to change the business rules though, so this option was not for me. Here I prove that the same can be done in code. Articles like Dynamic. Acitivty Creation and Kushal Shah's Adding Variables, Expressions and Bindings Programmatically helped me accomplish this, but the way I implemented it, the rules are pretty static. Now we're getting somewhere. By adding a layer on top of the code in #2, we can expose part of the rules to the end users. In this example I go as far as exposing the Visual Basic- style condition statements and the if- then- else- assignments to the user interface. This may be overkill for my end users, but I'm showing that the flexibility is there. See screenshot below. In this Data. Grid. View you can edit the rules runtime. The implementation. I will focus on solution #3 from last chapter - where dynamic rules are used. For the other methods, download view the solution yourself (link at bottom). First, the "dumb" business classes: Here is the gist of Person. Only syntactically altered from Geers' blog: public class Person. Properties. public string Name { get; set; }. Firstname { get; set; }. Date. Time Birth. Date { get; set; }. Gender { get; set; }. Married { get; set; }. Salutation { get; set; }. Read- only properties. Int. 32 Age { get { return Calculate. Age(); } }. public Boolean Minor { get { return (Age < 1. Methods. private bool Calculate. Age() { /* Implementation */ }. Then there is the class for storing the business rules. I need to wrap the complex structure of activities, sequences and arguments from the framwork in a manner that is easier presented in a user interface. In this solution I bind a list of these objects directly to the datagrid. Salutation. Assignment. Rule. public string Condition { get; set; }. Priority { get; set; }. Then. Value { get; set; }. Else. Value { get; set; }. Target. Parameter { get; set; }. Salutation. Assignment. Rule(int priority, string condition, string then. Value, string else. Value = null). Target. Parameter = "Person. Salutation"; // Could be configurable. Condition = condition. Priority = priority. Then. Value = then. Value. Else. Value = else. Value. The Activity. Library projects is where the magic happens, specifically in Salutation. Rule. Generator. Dynamic. Rule. Converter. cs. The latter converts Rules in the form of Salutation. Assignment. Rule- objects to WF4 activity objects of type If, which are a subclass of the "everything- is- an- apple"- Action class. Rule. Converter. cs. Rule. Converter. internal static Activity To. If. Activity(Salutation. Assignment. Rule in. Rule). var condition = new Visual. Basic. Value(in. Rule. Condition). var if. Activity = new If(new In. Argument(condition)). Activity. Then = new Assign. To = new Out. Argument(new Visual. Basic. Reference(in. Rule. Target. Parameter)). Value = new In. Argument(in. Rule. Then. Value). Rule. Else. Value != null). Activity. Else = new Assign. To = new Out. Argument(new Visual. Basic. Reference(in. Rule. Target. Parameter)). Value = new In. Argument(in. Rule. Else. Value). Activity. Note how the condition, which is a string sounding something like Person. Gender = "Male", is input to the If- class directly. By wrapping it in a Visual. Basic. Value, it will be interpreted runtime. Now there's a caveat here: The root Workflow object needs to have a Workflow- property set, indicating that VB- statements will be present in the Workflow. A method to add such a parameter to an Activity is implemented in Common. Add. Vb. Setting(Activity activity). Visual. Basic. Settings {. Import. References = { new Visual. Basic. Import. Reference {. Assembly = typeof(Person). Assembly. Get. Name(). Name. Import = typeof(Person). Namespace } } }. Visual. Basic. Set. Settings(activity, settings). If you look at the Visual Studio- generated XAML for the Salutation. Rules workflow, you will find the same setting generated there, in the tag < mva: Visual. Basic. Settings>. Going further up the implementation chain, we have the core Workflow generator class in Salutation. Rule. Generator. Dynamic. Activity Create. Salutation. Rules(List rules). Property = new Dynamic. Activity. Property. Name = "Person". Type = typeof(In. Argument). var activity = new Dynamic. Activity() { Properties = { in. Property } }. Common. Add. Vb. Setting(activity). Sequence(). activity. Implementation = () => sequence. Sort descending - those added first are lowest priority. Rules = rules. Order. By. Descending(p => p. Priority). To. List(). Convert to if- activities and add to sequence. Rule in sorted. Rules). Rule = Rule. Converter. To. If. Activity(in. Rule). sequence. Activities. Add(out. Rule). return activity. The key thing to notice here is how I order the rules by priority to emulate the Priority property of the Rule class of WF3. When you emulate Rules by using a flat list of If- activities as I do here, you get implicit priority by the order of which you add the If's to the Sequence object. Finally there is the invocation code. In WF3, you'd instantiate a Rule. Execution class followed by an Execute. In WF4 the equivalent is the static method Workflow.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |