-
Notifications
You must be signed in to change notification settings - Fork 8
/
codegenapi.htm
65 lines (64 loc) · 6.69 KB
/
codegenapi.htm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<!DOCTYPE HTML>
<html id="hs-topic-p">
<!-- saved from url=(0025)http://www.helpsmith.com/ -->
<head>
<title>The CodeGen API</title>
<meta charset="windows-1252" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="generator" content="HelpSmith 9.8 (Build 23.1026)" />
<link type="text/css" rel="stylesheet" href="../css/topics/style.css" />
<script type="text/javascript" src="../js/jquery-3.7.1.min.js"></script>
<style type="text/css" media="screen">
html {
height: 100%;
}
body {
margin: 0;
}
</style>
<script type="text/javascript" src="../js/settings.js?d3532453"></script>
<script type="text/javascript" src="../js/core.min.js?adb9c364"></script>
<script type="text/javascript" src="../js/topic.min.js?adb9c364"></script>
<script type="text/javascript">
var topicContext = 2160;
</script>
<!-- Web Help Topic -->
<!-- HTML Help (CHM) Topic -->
</head>
<body class="nsa-wrapper">
<div id="nsa-box" class="nsa-content0">
<h1 class="hd0"><span class="ts0">The CodeGen API</span></h1>
</div>
<div id="sa-box">
<div id="content-box" class="sa-content0">
<p> </p>
<p class="ps1"><span class="ts2">As an alternative to using the </span><a href="commandlinereference.htm" class="hs0">command-line interface</a><span class="ts2"> a developer could integrate CodeGen more tightly into their development environment by writing custom tools or utilities to generate code, using the core CodeGen environment.</span></p>
<p class="ps1"><span class="ts2">To make this possible CodeGen provides a .NET API that developers can code directly against in order to generate code. The main classes in the CodeGen API are:</span></p>
<p class="ps0"><span style="font-size: 14pt; line-height: 0; vertical-align: middle; color: Black">•</span><span style="display: inline-block; width: 18px"></span><a href="codegentaskset.htm" class="hs0">CodeGen.Engine.CodeGenTaskSet</a></p>
<p class="ps0"><span style="font-size: 14pt; line-height: 0; vertical-align: middle; color: Black">•</span><span style="display: inline-block; width: 18px"></span><a href="codegentask.htm" class="hs0">CodeGen.Engine.CodeGenTask</a></p>
<p class="ps0"><span style="font-size: 14pt; line-height: 0; vertical-align: middle; color: Black">•</span><span style="display: inline-block; width: 18px"></span><a href="codegenerator.htm" class="hs0">CodeGen.Engine.CodeGenerator</a></p>
<h2 class="hd1"><a id="CodeExample"></a><span class="ts1">CodeGen API Example</span></h2>
<p class="ps1"><span class="ts2">This is a very simple example of using the CodeGen API. This code segment is essentially the same as using the command line:</span></p>
<p class="ps9"><span class="ts3">codegen -s CUSTOMER -t DataClass -r -v</span></p>
<p class="ps1"><span class="ts2">Here's the sample code:</span></p>
<p class="ps9"><span class="ts11">;;Create a new task set</span><br /><span class="ts3">data taskset = new CodeGenTaskSet()</span><br /><span class="ts3">taskset.LoggingLevel = LoggingLevel.Verbose</span></p>
<p class="ps9"><span class="ts11">;;Create a task and define what it shold do</span><br /><span class="ts3">data task = new CodeGenTask()</span><br /><span class="ts3">task.Structures.Add("CUSTOMER")</span><br /><span class="ts3">task.Templates.Add("DataClass")</span><br /><span class="ts3">task.ReplaceFiles = true</span><br /><br /><span class="ts11">;;Add the task to the task set</span><br /><span class="ts3">taskset.Tasks.Add(task)</span></p>
<p class="ps9"><span class="ts11">;;Create a code generator and tell it about the task set</span><br /><span class="ts3">data generator = new CodeGenerator(taskset)</span></p>
<p class="ps9"><span class="ts11">;;Generate the code</span><br /><span class="ts3">generator.GenerateCode()</span></p>
<p class="ps9"><span class="ts11">;;Did it work?</span><br /><span class="ts3">if (taskset.Complete) then</span><br /> <span class="ts11">;;Good to go</span><br /><span class="ts3">else</span><br /> <span class="ts11">;;Something failed!</span></p>
<p class="ps1"><span class="ts2">You won't see anything happening when you execute this code because the CodeGen API doesn't implement any UI. But if you wanted to see the messages that are generated as the task set it processed you could register an event handler method against either taskset.Messages.CollectionChanged or task.Messages.CollectionChanged and monitor / report on the messages as they are generated. For example if you were in a console application you could log messages to standard out like this:</span></p>
<p class="ps9"><span class="ts3">lambda messageFromTaskSet(sender, e)</span><br /><span class="ts3">begin</span><br /> <span class="ts3">if (e.Action==NotifyCollectionChangedAction.Add)</span><br /> <span class="ts3">begin</span><br /> <span class="ts3">data message, String</span><br /> <span class="ts3">foreach message in e.NewItems</span><br /> <span class="ts3">if (message!=^null)</span><br /> <span class="ts3">Console.WriteLine(message)</span></p>
<p class="ps9"> <span class="ts3">end</span><br /><span class="ts3">end</span> </p>
<p class="ps9"><span class="ts45">;;Listen for messages from the taskset as it processes</span><br /><span class="ts3">taskset.Messages.CollectionChanged += messageFromTaskSet </span></p>
<p class="ps1"><span class="ts2"> </span></p>
<p><span class="ts2"> </span></p>
<p><span class="ts2"> </span></p>
<div class="hr-wrapper">
<hr class="hline1" />
</div>
<p class="ps8"><span class="ts10">Copyright © 2021 Synergex International, Inc.</span></p>
</div>
</div>
</body>
</html>