gd_bam 0.0.15 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. data/README.md +313 -5
  2. data/bin/bam +126 -48
  3. data/lib/bam/version.rb +1 -1
  4. data/lib/bam.rb +51 -0
  5. data/lib/base/errors.rb +15 -0
  6. data/lib/base/flow.rb +37 -0
  7. data/lib/base/graph.rb +23 -0
  8. data/lib/base/metadata.rb +107 -0
  9. data/lib/base/project.rb +95 -0
  10. data/lib/base/repo.rb +35 -0
  11. data/lib/base/sink.rb +44 -0
  12. data/lib/base/step.rb +47 -0
  13. data/lib/base/tap.rb +167 -0
  14. data/lib/base/taps.rb +19 -0
  15. data/lib/cloud_connect/dsl/cc.rb +42 -0
  16. data/lib/cloud_connect/dsl/es_helpers.rb +49 -0
  17. data/lib/cloud_connect/dsl/helpers.rb +199 -0
  18. data/lib/{nodes → cloud_connect/dsl}/nodes.rb +106 -16
  19. data/lib/cloud_connect/dsl/sf_helpers.rb +39 -0
  20. data/lib/cloud_connect/dsl/structure_helpers.rb +94 -0
  21. data/lib/commands/commands.rb +110 -0
  22. data/lib/commands/deployment.rb +217 -0
  23. data/lib/commands/docs_commands.rb +41 -0
  24. data/lib/commands/gd_commands.rb +95 -0
  25. data/lib/commands/scaffold_commands.rb +103 -0
  26. data/lib/commands/sf_commands.rb +37 -0
  27. data/lib/commands/validators.rb +19 -0
  28. data/lib/compatibility.rb +19 -0
  29. data/lib/compiler/compiler.rb +76 -0
  30. data/lib/compiler/etl_visitor.rb +165 -0
  31. data/lib/dsl/dsl.rb +125 -0
  32. data/lib/generators/downloaders.rb +449 -0
  33. data/lib/generators/etl.rb +261 -0
  34. data/lib/generators/validators.rb +445 -0
  35. data/lib/graphs/docentize.grf +1 -1
  36. data/lib/graphs/dummy.grf +1 -1
  37. data/lib/graphs/goodsales_v2/docentize.grf +47 -0
  38. data/lib/graphs/goodsales_v2/dummy.grf +46 -0
  39. data/lib/graphs/goodsales_v2/load_history.grf +579 -0
  40. data/lib/graphs/goodsales_v2/process_account.grf +47 -0
  41. data/lib/graphs/goodsales_v2/process_activity.grf +222 -0
  42. data/lib/graphs/goodsales_v2/process_activity_dim.grf +88 -0
  43. data/lib/graphs/goodsales_v2/process_activity_owner.grf +48 -0
  44. data/lib/graphs/goodsales_v2/process_forecast.grf +20 -0
  45. data/lib/graphs/goodsales_v2/process_opp_records.grf +84 -0
  46. data/lib/graphs/goodsales_v2/process_opportunity.grf +46 -0
  47. data/lib/graphs/goodsales_v2/process_opportunity_line_item.grf +171 -0
  48. data/lib/graphs/goodsales_v2/process_opportunity_snapshot.grf +94 -0
  49. data/lib/graphs/goodsales_v2/process_owner.grf +48 -0
  50. data/lib/graphs/goodsales_v2/process_stage.grf +51 -0
  51. data/lib/graphs/goodsales_v2/process_stage_history.grf +184 -0
  52. data/lib/graphs/goodsales_v2/process_velocity_duration.grf +140 -0
  53. data/lib/graphs/process_account.grf +1 -1
  54. data/lib/graphs/process_activity.grf +1 -1
  55. data/lib/graphs/process_activity_dim.grf +1 -1
  56. data/lib/graphs/process_activity_owner.grf +1 -1
  57. data/lib/graphs/process_forecast.grf +1 -1
  58. data/lib/graphs/process_opp_records.grf +1 -1
  59. data/lib/graphs/process_opportunity.grf +1 -1
  60. data/lib/graphs/process_opportunity_line_item.grf +1 -1
  61. data/lib/graphs/process_opportunity_snapshot.grf +1 -1
  62. data/lib/graphs/process_owner.grf +1 -1
  63. data/lib/graphs/process_stage.grf +1 -1
  64. data/lib/graphs/process_stage_history.grf +1 -1
  65. data/lib/graphs/process_velocity_duration.grf +1 -1
  66. data/lib/nodes/clover_gen.rb +59 -946
  67. data/lib/nodes/dependency.rb +95 -96
  68. data/lib/runtime.rb +7 -648
  69. data/lib/utils/utils.rb +66 -0
  70. data/templates/flow.rb.erb +7 -6
  71. data/templates/join_template.grf.erb +1 -1
  72. data/templates/reformat_template.grf.erb +1 -1
  73. data/templates/sink.json.erb +28 -0
  74. data/templates/tap.json.erb +3 -5
  75. data/templates/workspace.prm.erb +4 -0
  76. metadata +50 -8
  77. data/lib/contract_checkers/contract_checkers.rb +0 -53
  78. data/lib/dsl/project_dsl.rb +0 -259
  79. data/lib/repo/1_config.json +0 -8
  80. data/templates/dataset.json.erb +0 -13
  81. data/templates/source.json.erb +0 -22
@@ -0,0 +1,579 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Graph author="radektomasek" created="Tue Mar 12 17:22:22 CET 2013" guiVersion="3.3.2" id="1363132448535" licenseType="Commercial" modified="Thu Mar 21 16:26:58 PDT 2013" modifiedBy="?" name="test" revision="1.255" showComponentDetails="true">
3
+ <Global>
4
+ <Metadata id="Metadata13" previewAttachmentCharset="ISO-8859-1">
5
+ <Record fieldDelimiter="," name="I_OpportunityCreatedDate" previewAttachmentCharset="ISO-8859-1" recordDelimiter="\n" recordSize="-1" type="delimited">
6
+ <Field eofAsDelimiter="false" name="Id" nullable="true" shift="0" size="0" type="string"/>
7
+ <Field eofAsDelimiter="false" name="CreatedDate" nullable="true" shift="0" size="0" type="string"/>
8
+ </Record>
9
+ </Metadata>
10
+ <Metadata id="Metadata9" previewAttachmentCharset="ISO-8859-1">
11
+ <Record fieldDelimiter="," name="I_SFDC_Amount" previewAttachmentCharset="ISO-8859-1" recordDelimiter="\n" recordSize="-1" type="delimited">
12
+ <Field eofAsDelimiter="false" name="Amount" nullable="true" shift="0" size="0" type="decimal"/>
13
+ <Field eofAsDelimiter="false" name="SystemModstamp" nullable="true" shift="0" size="0" type="string"/>
14
+ <Field eofAsDelimiter="false" name="Id" nullable="true" shift="0" size="0" type="string"/>
15
+ </Record>
16
+ </Metadata>
17
+ <Metadata id="Metadata8" previewAttachmentCharset="ISO-8859-1">
18
+ <Record fieldDelimiter="," name="I_SFDC_CloseDare" previewAttachmentCharset="ISO-8859-1" recordDelimiter="\n" recordSize="-1" type="delimited">
19
+ <Field eofAsDelimiter="false" name="CloseDate" nullable="true" shift="0" size="0" type="string"/>
20
+ <Field eofAsDelimiter="false" name="SystemModstamp" nullable="true" shift="0" size="0" type="string"/>
21
+ <Field eofAsDelimiter="false" name="Id" nullable="true" shift="0" size="0" type="string"/>
22
+ </Record>
23
+ </Metadata>
24
+ <Metadata id="Metadata10" previewAttachmentCharset="ISO-8859-1">
25
+ <Record fieldDelimiter="," name="I_SFDC_Probability" previewAttachmentCharset="ISO-8859-1" recordDelimiter="\n" recordSize="-1" type="delimited">
26
+ <Field eofAsDelimiter="false" name="Probability" nullable="true" shift="0" size="0" type="decimal"/>
27
+ <Field eofAsDelimiter="false" name="SystemModstamp" nullable="true" shift="0" size="0" type="string"/>
28
+ <Field eofAsDelimiter="false" name="Id" nullable="true" shift="0" size="0" type="string"/>
29
+ </Record>
30
+ </Metadata>
31
+ <Metadata id="Metadata7" previewAttachmentCharset="ISO-8859-1">
32
+ <Record fieldDelimiter="," name="I_SFDC_StageName" previewAttachmentCharset="ISO-8859-1" recordDelimiter="\n" recordSize="-1" type="delimited">
33
+ <Field eofAsDelimiter="false" name="StageName" nullable="true" shift="0" size="0" type="string"/>
34
+ <Field eofAsDelimiter="false" format="joda:yyyy-MM-dd'T'HH:mm:ss.SSSZ" name="SystemModstamp" nullable="true" shift="0" size="0" type="string"/>
35
+ <Field name="Id" type="string"/>
36
+ </Record>
37
+ </Metadata>
38
+ <Metadata id="Metadata11">
39
+ <Record fieldDelimiter="," name="IO_Metadata" recordDelimiter="\n" recordSize="-1" type="delimited">
40
+ <Field eofAsDelimiter="false" name="Field" nullable="true" shift="0" size="0" type="string"/>
41
+ <Field eofAsDelimiter="false" name="NewValue" nullable="true" shift="0" size="0" type="string"/>
42
+ <Field eofAsDelimiter="false" format="joda:yyyy-MM-dd'T'HH:mm:ss.SSSZ" name="CreatedDate" nullable="true" shift="0" size="0" type="date"/>
43
+ <Field eofAsDelimiter="false" name="OpportunityId" nullable="true" shift="0" size="0" type="string"/>
44
+ </Record>
45
+ </Metadata>
46
+ <Metadata id="Metadata5" previewAttachmentCharset="ISO-8859-1">
47
+ <Record fieldDelimiter="," name="IO_OpportunityStage" previewAttachmentCharset="ISO-8859-1" recordDelimiter="\n" recordSize="-1" type="delimited">
48
+ <Field eofAsDelimiter="false" name="MasterLabel" nullable="true" shift="0" size="0" type="string"/>
49
+ <Field eofAsDelimiter="false" name="IsWon" nullable="true" shift="0" size="0" type="string"/>
50
+ <Field eofAsDelimiter="false" name="IsClosed" nullable="true" shift="0" size="0" type="string"/>
51
+ </Record>
52
+ </Metadata>
53
+ <Metadata id="Metadata3" previewAttachmentCharset="ISO-8859-1">
54
+ <Record fieldDelimiter="," name="O_Amount" previewAttachmentCharset="ISO-8859-1" recordDelimiter="\n" recordSize="-1" type="delimited">
55
+ <Field eofAsDelimiter="false" format="joda:yyyy-MM-dd HH:mm:ss" name="Timestamp" nullable="true" shift="0" size="0" type="date"/>
56
+ <Field eofAsDelimiter="false" name="Id" nullable="true" shift="0" size="0" type="string"/>
57
+ <Field eofAsDelimiter="false" length="12" name="Amount" nullable="true" scale="2" shift="0" size="0" type="decimal"/>
58
+ </Record>
59
+ </Metadata>
60
+ <Metadata id="Metadata2" previewAttachmentCharset="ISO-8859-1">
61
+ <Record fieldDelimiter="," name="O_CloseDate" previewAttachmentCharset="ISO-8859-1" recordDelimiter="\n" recordSize="-1" type="delimited">
62
+ <Field eofAsDelimiter="false" format="joda:yyyy-MM-dd HH:mm:ss" name="Timestamp" nullable="true" shift="0" size="0" type="date"/>
63
+ <Field eofAsDelimiter="false" name="Id" nullable="true" shift="0" size="0" type="string"/>
64
+ <Field eofAsDelimiter="false" name="CloseDate" nullable="true" shift="0" size="0" type="string"/>
65
+ </Record>
66
+ </Metadata>
67
+ <Metadata id="Metadata14" previewAttachmentCharset="ISO-8859-1">
68
+ <Record fieldDelimiter="," name="O_CreatedDate" previewAttachmentCharset="ISO-8859-1" recordDelimiter="\n" recordSize="-1" type="delimited">
69
+ <Field eofAsDelimiter="false" format="yyyy-MM-dd HH:mm:ss" name="Timestamp" nullable="true" shift="0" size="0" type="date"/>
70
+ <Field eofAsDelimiter="false" name="OpportunityId" nullable="true" shift="0" size="0" type="string"/>
71
+ <Field eofAsDelimiter="false" name="CreatedDate" nullable="true" shift="0" size="0" type="string"/>
72
+ </Record>
73
+ </Metadata>
74
+ <Metadata id="Metadata12" previewAttachmentCharset="ISO-8859-1">
75
+ <Record fieldDelimiter="," name="O_CreatedDate" previewAttachmentCharset="ISO-8859-1" recordDelimiter="\n" recordSize="-1" type="delimited">
76
+ <Field eofAsDelimiter="false" format="joda:yyyy-MM-dd HH:mm:ss" name="Timestamp" nullable="true" shift="0" size="0" type="date"/>
77
+ <Field eofAsDelimiter="false" name="Id" nullable="true" shift="0" size="0" type="string"/>
78
+ <Field eofAsDelimiter="false" name="CreatedDate" nullable="true" shift="0" size="0" type="string"/>
79
+ <Field name="OpportunityId" type="string"/>
80
+ </Record>
81
+ </Metadata>
82
+ <Metadata id="Metadata4" previewAttachmentCharset="ISO-8859-1">
83
+ <Record fieldDelimiter="," name="O_Probability" previewAttachmentCharset="ISO-8859-1" recordDelimiter="\n" recordSize="-1" type="delimited">
84
+ <Field eofAsDelimiter="false" format="joda:yyyy-MM-dd HH:mm:ss" name="Timestamp" nullable="true" shift="0" size="0" type="date"/>
85
+ <Field eofAsDelimiter="false" name="Id" nullable="true" shift="0" size="0" type="string"/>
86
+ <Field eofAsDelimiter="false" name="Probability" nullable="true" shift="0" size="0" type="decimal"/>
87
+ </Record>
88
+ </Metadata>
89
+ <Metadata id="Metadata1" previewAttachmentCharset="ISO-8859-1">
90
+ <Record fieldDelimiter="," name="O_StageName" previewAttachmentCharset="ISO-8859-1" recordDelimiter="\n" recordSize="-1" type="delimited">
91
+ <Field eofAsDelimiter="false" format="joda:yyyy-MM-dd HH:mm:ss" name="Timestamp" nullable="true" shift="0" size="0" type="date"/>
92
+ <Field eofAsDelimiter="false" name="Id" nullable="true" shift="0" size="0" type="string"/>
93
+ <Field eofAsDelimiter="false" name="StageName" nullable="true" shift="0" size="0" type="string"/>
94
+ <Field eofAsDelimiter="false" name="IsWon" nullable="true" shift="0" size="0" type="string"/>
95
+ <Field eofAsDelimiter="false" name="IsClosed" nullable="true" shift="0" size="0" type="string"/>
96
+ <Field name="field6" type="string"/>
97
+ </Record>
98
+ </Metadata>
99
+ <Metadata id="Metadata15" previewAttachmentCharset="ISO-8859-1">
100
+ <Record fieldDelimiter="|" name="recordName1" previewAttachmentCharset="ISO-8859-1" recordDelimiter="\n" type="delimited">
101
+ <Field name="Id" type="string"/>
102
+ <Field name="Timestamp" type="date"/>
103
+ <Field name="IsDeleted" type="string"/>
104
+ </Record>
105
+ </Metadata>
106
+ <Metadata id="Metadata0" previewAttachmentCharset="ISO-8859-1">
107
+ <Record fieldDelimiter="," name="sfdc_metadata" previewAttachmentCharset="ISO-8859-1" recordDelimiter="\n" recordSize="-1" type="delimited">
108
+ <Field eofAsDelimiter="false" name="Id" nullable="true" shift="0" size="0" type="string"/>
109
+ <Field eofAsDelimiter="false" name="CreatedDate" nullable="true" shift="0" size="0" type="string"/>
110
+ <Field eofAsDelimiter="false" name="StageName" nullable="true" shift="0" size="0" type="string"/>
111
+ <Field eofAsDelimiter="false" name="CloseDate" nullable="true" shift="0" size="0" type="string"/>
112
+ <Field eofAsDelimiter="false" length="12" name="Amount" nullable="true" scale="2" shift="0" size="0" type="decimal"/>
113
+ <Field eofAsDelimiter="false" name="Probability" nullable="true" shift="0" size="0" type="string"/>
114
+ </Record>
115
+ </Metadata>
116
+ <Metadata id="Metadata6" previewAttachmentCharset="ISO-8859-1">
117
+ <Record fieldDelimiter="," name="X_metadata" previewAttachmentCharset="ISO-8859-1" recordDelimiter="\n" recordSize="-1" type="delimited">
118
+ <Field eofAsDelimiter="false" name="Id" nullable="true" shift="0" size="0" type="string"/>
119
+ <Field eofAsDelimiter="false" format="joda:yyyy-MM-dd'T'HH:mm:ss.SSSZ" name="CreatedDate" nullable="true" shift="0" size="0" type="string"/>
120
+ <Field eofAsDelimiter="false" name="StageName" nullable="true" shift="0" size="0" type="string"/>
121
+ <Field eofAsDelimiter="false" name="CloseDate" nullable="true" shift="0" size="0" type="string"/>
122
+ <Field eofAsDelimiter="false" length="12" name="Amount" nullable="true" scale="2" shift="0" size="0" type="decimal"/>
123
+ <Field eofAsDelimiter="false" name="Probability" nullable="true" shift="0" size="0" type="string"/>
124
+ <Field name="IsWon" type="string"/>
125
+ <Field name="IsClosed" type="string"/>
126
+ </Record>
127
+ </Metadata>
128
+ <Connection clientId="${SFDC_CLIENT_ID}" id="SFDC" loginHostname="${SFDC_LOGIN_HOSTNAME}" name="${SFDC_NAME}" password="${SFDC_PASSWORD}" passwordEncrypted="true" token="${SFDC_TOKEN}" type="SFDC" username="${SFDC_USERNAME}"/>
129
+ <Property id="GraphParameter0" name="SFDC_CLIENT_ID" value="gooddata/gooddata/"/>
130
+ <Property id="GraphParameter1" name="SFDC_LOGIN_HOSTNAME" value="test.salesforce.com"/>
131
+ <Property id="GraphParameter2" name="SFDC_NAME" value="Test"/>
132
+ <Property id="GraphParameter3" name="SFDC_PASSWORD" value="IJKC+Up9aa0WVg4u51L3Cg=="/>
133
+ <Property id="GraphParameter4" name="SFDC_TOKEN" value="n3xnliHf2Vvd4n2ekEDusAos"/>
134
+ <Property id="GraphParameter5" name="SFDC_USERNAME" value="r1293350@ge.com.gd.test"/>
135
+ <Property fileURL="workspace.prm" id="GraphParameter6"/>
136
+ <LookupTable id="LookupTable0" initialSize="512" key="MasterLabel" metadata="Metadata5" name="L_OpportunityStage" type="simpleLookup"/>
137
+ <Dictionary/>
138
+ </Global>
139
+ <Phase number="0">
140
+ <Node enabled="enabled" guiHeight="65" guiName="LookupTableReaderWriter" guiWidth="177" guiX="1872" guiY="122" id="LOOKUP_TABLE_READER_WRITER0" lookupTable="LookupTable0" type="LOOKUP_TABLE_READER_WRITER"/>
141
+ <Node enabled="enabled" fieldsMapping="{&quot;xmlFieldsMapping&quot;:{&quot;xmlFields&quot;:[{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;MasterLabel&quot;,&quot;label&quot;:&quot;Master Label&quot;,&quot;xmlPath&quot;:&quot;MasterLabel&quot;,&quot;metadataField&quot;:&quot;MasterLabel&quot;}},{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;IsWon&quot;,&quot;label&quot;:&quot;Won&quot;,&quot;xmlPath&quot;:&quot;IsWon&quot;,&quot;metadataField&quot;:&quot;IsWon&quot;}},{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;IsClosed&quot;,&quot;label&quot;:&quot;Closed&quot;,&quot;xmlPath&quot;:&quot;IsClosed&quot;,&quot;metadataField&quot;:&quot;IsClosed&quot;}}]}}" guiHeight="65" guiName="SF Reader" guiWidth="128" guiX="188" guiY="122" id="SF_READER1" sfdcConnection="SFDC" soql="Select MasterLabel, IsWon, IsClosed From OpportunityStage" type="SF_READER"/>
142
+ <Edge debugMode="true" fromNode="SF_READER1:0" guiBendpoints="" guiRouter="Manhattan" id="Edge2" inPort="Port 0 (in)" metadata="Metadata5" outPort="Port 0 (output)" toNode="LOOKUP_TABLE_READER_WRITER0:0"/>
143
+ </Phase>
144
+ <Phase number="1">
145
+ <Node enabled="enabled" guiHeight="77" guiName="ExtSort" guiWidth="128" guiX="1656" guiY="280" id="EXT_SORT0" sortKey="Timestamp(a)" type="EXT_SORT"/>
146
+ <Node enabled="enabled" entityFieldsMapping="{&quot;entityName&quot;:&quot;Opportunity&quot;,&quot;fieldsMapping&quot;:{&quot;IsClosed&quot;:{&quot;name&quot;:&quot;IsClosed&quot;,&quot;type&quot;:&quot;attribute&quot;},&quot;IsWon&quot;:{&quot;name&quot;:&quot;IsWon&quot;,&quot;type&quot;:&quot;attribute&quot;},&quot;StageName&quot;:{&quot;name&quot;:&quot;StageName&quot;,&quot;type&quot;:&quot;attribute&quot;},&quot;Id&quot;:{&quot;name&quot;:&quot;Id&quot;,&quot;type&quot;:&quot;recordid&quot;},&quot;Timestamp&quot;:{&quot;name&quot;:&quot;Timestamp&quot;,&quot;type&quot;:&quot;timestamp&quot;}}}" guiHeight="65" guiName="GD Eventstore Writer" guiWidth="150" guiX="1872" guiY="280" id="GD_ESTORE_WRITER0" store="${GDC_EVENTSTORE}" timezone="UTC" type="GD_ESTORE_WRITER"/>
147
+ <Node enabled="enabled" guiHeight="77" guiName="LookupJoin" guiWidth="128" guiX="535" guiY="280" id="LOOKUP_JOIN0" joinKey="StageName" leftOuterJoin="true" lookupTable="LookupTable0" type="LOOKUP_JOIN">
148
+ <attr name="transform"><![CDATA[//#CTL2
149
+
150
+ // Transforms input record into output record.
151
+ function integer transform() {
152
+ $out.0.Id = $in.0.Id;
153
+ $out.0.CreatedDate = $in.0.CreatedDate;
154
+ $out.0.StageName = $in.0.StageName;
155
+ $out.0.CloseDate = $in.0.CloseDate;
156
+ $out.0.Amount = $in.0.Amount;
157
+ $out.0.Probability = $in.0.Probability;
158
+ $out.0.IsWon = $in.1.IsWon;
159
+ $out.0.IsClosed = $in.1.IsClosed;
160
+
161
+ return OK;
162
+ }
163
+
164
+ // Called during component initialization.
165
+ // function boolean init() {}
166
+
167
+ // Called during each graph run before the transform is executed. May be used to allocate and initialize resources
168
+ // required by the transform. All resources allocated within this method should be released
169
+ // by the postExecute() method.
170
+ // function void preExecute() {}
171
+
172
+ // Called only if transform() throws an exception.
173
+ // function integer transformOnError(string errorMessage, string stackTrace) {}
174
+
175
+ // Called during each graph run after the entire transform was executed. Should be used to free any resources
176
+ // allocated within the preExecute() method.
177
+ // function void postExecute() {}
178
+
179
+ // Called to return a user-defined error message when an error occurs.
180
+ // function string getMessage() {}
181
+ ]]></attr>
182
+ </Node>
183
+ <Node enabled="enabled" guiHeight="77" guiName="LookupJoin" guiWidth="128" guiX="1289" guiY="383" id="LOOKUP_JOIN1" joinKey="StageName" leftOuterJoin="true" lookupTable="LookupTable0" type="LOOKUP_JOIN">
184
+ <attr name="transform"><![CDATA[//#CTL2
185
+ import 'trans/DateFunctions.ctl';
186
+
187
+ // Transforms input record into output record.
188
+ function integer transform() {
189
+ $out.0.StageName = $in.0.StageName;
190
+ $out.0.IsWon = $in.1.IsWon;
191
+ $out.0.IsClosed = $in.1.IsClosed;
192
+ $out.0.Timestamp = $out.0.Timestamp = timestampParsing($in.0.SystemModstamp, "UTC"):null;
193
+ $out.0.Id = $in.0.Id;
194
+
195
+ return OK;
196
+ }
197
+
198
+ // Called during component initialization.
199
+ // function boolean init() {}
200
+
201
+ // Called during each graph run before the transform is executed. May be used to allocate and initialize resources
202
+ // required by the transform. All resources allocated within this method should be released
203
+ // by the postExecute() method.
204
+ // function void preExecute() {}
205
+
206
+ // Called only if transform() throws an exception.
207
+ // function integer transformOnError(string errorMessage, string stackTrace) {}
208
+
209
+ // Called during each graph run after the entire transform was executed. Should be used to free any resources
210
+ // allocated within the preExecute() method.
211
+ // function void postExecute() {}
212
+
213
+ // Called to return a user-defined error message when an error occurs.
214
+ // function string getMessage() {}
215
+ ]]></attr>
216
+ </Node>
217
+ <Node enabled="enabled" guiHeight="65" guiName="Reformat" guiWidth="128" guiX="974" guiY="280" id="REFORMAT0" type="REFORMAT">
218
+ <attr name="transform"><![CDATA[//#CTL2
219
+ import 'trans/DateFunctions.ctl';
220
+
221
+ // Transforms input record into output record.
222
+ function integer transform()
223
+ {
224
+ $out.0.Id = $in.0.Id;
225
+ $out.0.StageName = $in.0.StageName;
226
+ $out.0.IsWon = $in.0.IsWon;
227
+ $out.0.IsClosed = $in.0.IsClosed;
228
+ $out.0.Timestamp = timestampParsing($in.0.CreatedDate, "UTC"):null;
229
+
230
+ return OK;
231
+ }
232
+
233
+ // Called during component initialization.
234
+ // function boolean init() {}
235
+
236
+ // Called during each graph run before the transform is executed. May be used to allocate and initialize resources
237
+ // required by the transform. All resources allocated within this method should be released
238
+ // by the postExecute() method.
239
+ // function void preExecute() {}
240
+
241
+ // Called only if transform() throws an exception.
242
+ // function integer transformOnError(string errorMessage, string stackTrace) {}
243
+
244
+ // Called during each graph run after the entire transform was executed. Should be used to free any resources
245
+ // allocated within the preExecute() method.
246
+ // function void postExecute() {}
247
+
248
+ // Called to return a user-defined error message when an error occurs.
249
+ // function string getMessage() {}
250
+ ]]></attr>
251
+ </Node>
252
+ <Node enabled="enabled" fieldsMapping="{&quot;xmlFieldsMapping&quot;:{&quot;xmlFields&quot;:[{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;OpportunityId&quot;,&quot;label&quot;:&quot;Opportunity ID&quot;,&quot;xmlPath&quot;:&quot;OpportunityId&quot;,&quot;metadataField&quot;:&quot;Id&quot;}},{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;CreatedDate&quot;,&quot;label&quot;:&quot;Created Date&quot;,&quot;xmlPath&quot;:&quot;CreatedDate&quot;,&quot;metadataField&quot;:&quot;CreatedDate&quot;}},{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;StageName&quot;,&quot;label&quot;:&quot;Stage Name&quot;,&quot;xmlPath&quot;:&quot;StageName&quot;,&quot;metadataField&quot;:&quot;StageName&quot;}},{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;CloseDate&quot;,&quot;label&quot;:&quot;Close Date&quot;,&quot;xmlPath&quot;:&quot;CloseDate&quot;,&quot;metadataField&quot;:&quot;CloseDate&quot;}},{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;Amount&quot;,&quot;label&quot;:&quot;Amount&quot;,&quot;xmlPath&quot;:&quot;Amount&quot;,&quot;metadataField&quot;:&quot;Amount&quot;}},{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;Probability&quot;,&quot;label&quot;:&quot;Probability&quot;,&quot;xmlPath&quot;:&quot;Probability&quot;,&quot;metadataField&quot;:&quot;Probability&quot;}}]}}" guiHeight="65" guiName="SF Reader" guiWidth="128" guiX="188" guiY="280" id="SF_READER0" sfdcConnection="SFDC" soql="Select CreatedDate, OpportunityId, StageName, CloseDate, convertCurrency(Amount), Probability From OpportunityHistory" type="SF_READER"/>
253
+ <Node enabled="enabled" fieldsMapping="{&quot;xmlFieldsMapping&quot;:{&quot;xmlFields&quot;:[{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;StageName&quot;,&quot;label&quot;:&quot;Stage&quot;,&quot;xmlPath&quot;:&quot;StageName&quot;,&quot;metadataField&quot;:&quot;StageName&quot;}},{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;SystemModstamp&quot;,&quot;label&quot;:&quot;System Modstamp&quot;,&quot;xmlPath&quot;:&quot;SystemModstamp&quot;,&quot;metadataField&quot;:&quot;SystemModstamp&quot;}},{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;Id&quot;,&quot;label&quot;:&quot;Opportunity ID&quot;,&quot;xmlPath&quot;:&quot;Id&quot;,&quot;metadataField&quot;:&quot;Id&quot;}}]}}" guiHeight="65" guiName="SF Reader" guiWidth="128" guiX="1114" guiY="383" id="SF_READER2" sfdcConnection="SFDC" soql="Select StageName, SystemModstamp, Id From Opportunity" type="SF_READER"/>
254
+ <Node enabled="enabled" guiHeight="84" guiName="SimpleCopy" guiWidth="128" guiX="781" guiY="286" id="SIMPLE_COPY0" type="SIMPLE_COPY"/>
255
+ <Node enabled="enabled" guiHeight="72" guiName="SimpleGather" guiWidth="128" guiX="1468" guiY="283" id="SIMPLE_GATHER0" type="SIMPLE_GATHER"/>
256
+ <Edge debugMode="true" fromNode="EXT_SORT0:0" guiBendpoints="" guiRouter="Manhattan" id="Edge16" inPort="Port 0 (in)" metadata="Metadata1" outPort="Port 0 (out)" toNode="GD_ESTORE_WRITER0:0"/>
257
+ <Edge debugMode="true" fromNode="LOOKUP_JOIN0:0" guiBendpoints="" guiRouter="Manhattan" id="Edge4" inPort="Port 0 (in)" metadata="Metadata6" outPort="Port 0 (joined records)" toNode="SIMPLE_COPY0:0"/>
258
+ <Edge debugMode="true" fromNode="LOOKUP_JOIN1:0" guiBendpoints="" guiRouter="Manhattan" id="Edge14" inPort="Port 1 (in)" metadata="Metadata1" outPort="Port 0 (joined records)" toNode="SIMPLE_GATHER0:1"/>
259
+ <Edge debugMode="true" fromNode="REFORMAT0:0" guiBendpoints="" guiRouter="Manhattan" id="Edge9" inPort="Port 0 (in)" metadata="Metadata1" outPort="Port 0 (out)" toNode="SIMPLE_GATHER0:0"/>
260
+ <Edge debugMode="true" fromNode="SF_READER0:0" guiBendpoints="" guiRouter="Manhattan" id="Edge0" inPort="Port 0 (in)" metadata="Metadata0" outPort="Port 0 (output)" toNode="LOOKUP_JOIN0:0"/>
261
+ <Edge fromNode="SF_READER2:0" guiBendpoints="" guiRouter="Manhattan" id="Edge13" inPort="Port 0 (in)" metadata="Metadata7" outPort="Port 0 (output)" toNode="LOOKUP_JOIN1:0"/>
262
+ <Edge fromNode="SIMPLE_COPY0:0" guiBendpoints="" guiRouter="Manhattan" id="Edge5" inPort="Port 0 (in)" metadata="Metadata6" outPort="Port 0 (out)" toNode="REFORMAT0:0"/>
263
+ <Edge fromNode="SIMPLE_COPY0:1" guiBendpoints="" guiRouter="Manhattan" id="Edge6" inPort="Port 0 (in)" metadata="Metadata6" outPort="Port 1 (out)" toNode="REFORMAT1:0"/>
264
+ <Edge fromNode="SIMPLE_COPY0:2" guiBendpoints="" guiRouter="Manhattan" id="Edge7" inPort="Port 0 (in)" metadata="Metadata6" outPort="Port 2 (out)" toNode="REFORMAT2:0"/>
265
+ <Edge fromNode="SIMPLE_COPY0:3" guiBendpoints="" guiRouter="Manhattan" id="Edge8" inPort="Port 0 (in)" metadata="Metadata6" outPort="Port 3 (out)" toNode="REFORMAT3:0"/>
266
+ <Edge debugMode="true" fromNode="SIMPLE_GATHER0:0" guiBendpoints="" guiRouter="Manhattan" id="Edge15" inPort="Port 0 (in)" metadata="Metadata1" outPort="Port 0 (out)" toNode="EXT_SORT0:0"/>
267
+ </Phase>
268
+ <Phase number="2">
269
+ <Node enabled="enabled" guiHeight="77" guiName="ExtSort" guiWidth="128" guiX="1656" guiY="560" id="EXT_SORT1" sortKey="Timestamp(a)" type="EXT_SORT"/>
270
+ <Node enabled="enabled" entityFieldsMapping="{&quot;entityName&quot;:&quot;Opportunity&quot;,&quot;fieldsMapping&quot;:{&quot;Id&quot;:{&quot;name&quot;:&quot;Id&quot;,&quot;type&quot;:&quot;recordid&quot;},&quot;CloseDate&quot;:{&quot;name&quot;:&quot;CloseDate&quot;,&quot;type&quot;:&quot;attribute&quot;},&quot;Timestamp&quot;:{&quot;name&quot;:&quot;Timestamp&quot;,&quot;type&quot;:&quot;timestamp&quot;}}}" guiHeight="65" guiName="GD Eventstore Writer" guiWidth="150" guiX="1872" guiY="560" id="GD_ESTORE_WRITER1" store="${GDC_EVENTSTORE}" timezone="UTC" type="GD_ESTORE_WRITER"/>
271
+ <Node enabled="enabled" guiHeight="65" guiName="Reformat" guiWidth="128" guiX="974" guiY="550" id="REFORMAT1" type="REFORMAT">
272
+ <attr name="transform"><![CDATA[//#CTL2
273
+ import 'trans/DateFunctions.ctl';
274
+
275
+ // Transforms input record into output record.
276
+ function integer transform()
277
+ {
278
+ $out.0.Id = $in.0.Id;
279
+ $out.0.CloseDate = $in.0.CloseDate;
280
+ $out.0.Timestamp = timestampParsing($in.0.CreatedDate, "UTC"):null;
281
+
282
+ return OK;
283
+ }
284
+
285
+ // Called during component initialization.
286
+ // function boolean init() {}
287
+
288
+ // Called during each graph run before the transform is executed. May be used to allocate and initialize resources
289
+ // required by the transform. All resources allocated within this method should be released
290
+ // by the postExecute() method.
291
+ // function void preExecute() {}
292
+
293
+ // Called only if transform() throws an exception.
294
+ // function integer transformOnError(string errorMessage, string stackTrace) {}
295
+
296
+ // Called during each graph run after the entire transform was executed. Should be used to free any resources
297
+ // allocated within the preExecute() method.
298
+ // function void postExecute() {}
299
+
300
+ // Called to return a user-defined error message when an error occurs.
301
+ // function string getMessage() {}
302
+ ]]></attr>
303
+ </Node>
304
+ <Node enabled="enabled" guiHeight="65" guiName="Reformat" guiWidth="128" guiX="1300" guiY="642" id="REFORMAT4" type="REFORMAT">
305
+ <attr name="transform"><![CDATA[//#CTL2
306
+ import 'trans/DateFunctions.ctl';
307
+
308
+ // Transforms input record into output record.
309
+ function integer transform() {
310
+ $out.0.CloseDate = $in.0.CloseDate;
311
+ $out.0.Id = $in.0.Id;
312
+ $out.0.Timestamp = $out.0.Timestamp = timestampParsing($in.0.SystemModstamp, "UTC"):null;
313
+
314
+ return OK;
315
+ }
316
+
317
+ // Called during component initialization.
318
+ // function boolean init() {}
319
+
320
+ // Called during each graph run before the transform is executed. May be used to allocate and initialize resources
321
+ // required by the transform. All resources allocated within this method should be released
322
+ // by the postExecute() method.
323
+ // function void preExecute() {}
324
+
325
+ // Called only if transform() throws an exception.
326
+ // function integer transformOnError(string errorMessage, string stackTrace) {}
327
+
328
+ // Called during each graph run after the entire transform was executed. Should be used to free any resources
329
+ // allocated within the preExecute() method.
330
+ // function void postExecute() {}
331
+
332
+ // Called to return a user-defined error message when an error occurs.
333
+ // function string getMessage() {}
334
+ ]]></attr>
335
+ </Node>
336
+ <Node enabled="enabled" fieldsMapping="{&quot;xmlFieldsMapping&quot;:{&quot;xmlFields&quot;:[{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;CloseDate&quot;,&quot;label&quot;:&quot;Close Date&quot;,&quot;xmlPath&quot;:&quot;CloseDate&quot;,&quot;metadataField&quot;:&quot;CloseDate&quot;}},{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;SystemModstamp&quot;,&quot;label&quot;:&quot;System Modstamp&quot;,&quot;xmlPath&quot;:&quot;SystemModstamp&quot;,&quot;metadataField&quot;:&quot;SystemModstamp&quot;}},{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;Id&quot;,&quot;label&quot;:&quot;Opportunity ID&quot;,&quot;xmlPath&quot;:&quot;Id&quot;,&quot;metadataField&quot;:&quot;Id&quot;}}]}}" guiHeight="65" guiName="SF Reader" guiWidth="128" guiX="1114" guiY="642" id="SF_READER3" sfdcConnection="SFDC" soql="Select CloseDate, SystemModstamp, Id From Opportunity" type="SF_READER"/>
337
+ <Node enabled="enabled" guiHeight="72" guiName="SimpleGather" guiWidth="128" guiX="1481" guiY="557" id="SIMPLE_GATHER1" type="SIMPLE_GATHER"/>
338
+ <Edge debugMode="true" fromNode="EXT_SORT1:0" guiBendpoints="" guiRouter="Manhattan" id="Edge19" inPort="Port 0 (in)" metadata="Metadata2" outPort="Port 0 (out)" toNode="GD_ESTORE_WRITER1:0"/>
339
+ <Edge fromNode="REFORMAT1:0" guiBendpoints="" guiRouter="Manhattan" id="Edge10" inPort="Port 0 (in)" metadata="Metadata2" outPort="Port 0 (out)" toNode="SIMPLE_GATHER1:0"/>
340
+ <Edge fromNode="REFORMAT4:0" guiBendpoints="" guiRouter="Manhattan" id="Edge24" inPort="Port 1 (in)" metadata="Metadata2" outPort="Port 0 (out)" toNode="SIMPLE_GATHER1:1"/>
341
+ <Edge fromNode="SF_READER3:0" guiBendpoints="" guiRouter="Manhattan" id="Edge17" inPort="Port 0 (in)" metadata="Metadata8" outPort="Port 0 (output)" toNode="REFORMAT4:0"/>
342
+ <Edge fromNode="SIMPLE_GATHER1:0" guiBendpoints="" guiRouter="Manhattan" id="Edge18" inPort="Port 0 (in)" metadata="Metadata2" outPort="Port 0 (out)" toNode="EXT_SORT1:0"/>
343
+ </Phase>
344
+ <Phase number="3">
345
+ <Node enabled="enabled" guiHeight="77" guiName="ExtSort" guiWidth="128" guiX="1656" guiY="781" id="EXT_SORT2" sortKey="Timestamp(a)" type="EXT_SORT"/>
346
+ <Node enabled="enabled" entityFieldsMapping="{&quot;entityName&quot;:&quot;Opportunity&quot;,&quot;fieldsMapping&quot;:{&quot;Amount&quot;:{&quot;name&quot;:&quot;Amount&quot;,&quot;type&quot;:&quot;fact&quot;},&quot;Id&quot;:{&quot;name&quot;:&quot;Id&quot;,&quot;type&quot;:&quot;recordid&quot;},&quot;Timestamp&quot;:{&quot;name&quot;:&quot;Timestamp&quot;,&quot;type&quot;:&quot;timestamp&quot;}}}" guiHeight="65" guiName="GD Eventstore Writer" guiWidth="150" guiX="1872" guiY="781" id="GD_ESTORE_WRITER2" store="${GDC_EVENTSTORE}" timezone="UTC" type="GD_ESTORE_WRITER"/>
347
+ <Node enabled="enabled" guiHeight="65" guiName="Reformat" guiWidth="128" guiX="960" guiY="787" id="REFORMAT2" type="REFORMAT">
348
+ <attr name="transform"><![CDATA[//#CTL2
349
+ import 'trans/DateFunctions.ctl';
350
+
351
+ // Transforms input record into output record.
352
+ function integer transform()
353
+ {
354
+ $out.0.Id = $in.0.Id;
355
+ $out.0.Amount = $in.0.Amount;
356
+ $out.0.Timestamp = timestampParsing($in.0.CreatedDate, "UTC"):null;
357
+
358
+ return OK;
359
+ }
360
+
361
+ // Called during component initialization.
362
+ // function boolean init() {}
363
+
364
+ // Called during each graph run before the transform is executed. May be used to allocate and initialize resources
365
+ // required by the transform. All resources allocated within this method should be released
366
+ // by the postExecute() method.
367
+ // function void preExecute() {}
368
+
369
+ // Called only if transform() throws an exception.
370
+ // function integer transformOnError(string errorMessage, string stackTrace) {}
371
+
372
+ // Called during each graph run after the entire transform was executed. Should be used to free any resources
373
+ // allocated within the preExecute() method.
374
+ // function void postExecute() {}
375
+
376
+ // Called to return a user-defined error message when an error occurs.
377
+ // function string getMessage() {}
378
+ ]]></attr>
379
+ </Node>
380
+ <Node enabled="enabled" guiHeight="65" guiName="Reformat" guiWidth="128" guiX="1300" guiY="881" id="REFORMAT5" type="REFORMAT">
381
+ <attr name="transform"><![CDATA[//#CTL2
382
+ import 'trans/DateFunctions.ctl';
383
+
384
+ // Transforms input record into output record.
385
+ function integer transform()
386
+ {
387
+ $out.0.Amount = $in.0.Amount;
388
+ $out.0.Id = $in.0.Id;
389
+ $out.0.Timestamp = $out.0.Timestamp = timestampParsing($in.0.SystemModstamp, "UTC"):null;
390
+
391
+ return OK;
392
+ }
393
+
394
+ // Called during component initialization.
395
+ // function boolean init() {}
396
+
397
+ // Called during each graph run before the transform is executed. May be used to allocate and initialize resources
398
+ // required by the transform. All resources allocated within this method should be released
399
+ // by the postExecute() method.
400
+ // function void preExecute() {}
401
+
402
+ // Called only if transform() throws an exception.
403
+ // function integer transformOnError(string errorMessage, string stackTrace) {}
404
+
405
+ // Called during each graph run after the entire transform was executed. Should be used to free any resources
406
+ // allocated within the preExecute() method.
407
+ // function void postExecute() {}
408
+
409
+ // Called to return a user-defined error message when an error occurs.
410
+ // function string getMessage() {}
411
+ ]]></attr>
412
+ </Node>
413
+ <Node enabled="enabled" fieldsMapping="{&quot;xmlFieldsMapping&quot;:{&quot;xmlFields&quot;:[{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;Amount&quot;,&quot;label&quot;:&quot;Amount&quot;,&quot;xmlPath&quot;:&quot;Amount&quot;,&quot;metadataField&quot;:&quot;Amount&quot;}},{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;SystemModstamp&quot;,&quot;label&quot;:&quot;System Modstamp&quot;,&quot;xmlPath&quot;:&quot;SystemModstamp&quot;,&quot;metadataField&quot;:&quot;SystemModstamp&quot;}},{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;Id&quot;,&quot;label&quot;:&quot;Opportunity ID&quot;,&quot;xmlPath&quot;:&quot;Id&quot;,&quot;metadataField&quot;:&quot;Id&quot;}}]}}" guiHeight="65" guiName="SF Reader" guiWidth="128" guiX="1114" guiY="881" id="SF_READER4" sfdcConnection="SFDC" soql="Select convertCurrency(Amount), SystemModstamp, Id From Opportunity" type="SF_READER"/>
414
+ <Node enabled="enabled" guiHeight="72" guiName="SimpleGather" guiWidth="128" guiX="1487" guiY="787" id="SIMPLE_GATHER2" type="SIMPLE_GATHER"/>
415
+ <Edge debugMode="true" fromNode="EXT_SORT2:0" guiBendpoints="" guiRouter="Manhattan" id="Edge20" inPort="Port 0 (in)" metadata="Metadata3" outPort="Port 0 (out)" toNode="GD_ESTORE_WRITER2:0"/>
416
+ <Edge fromNode="REFORMAT2:0" guiBendpoints="" guiRouter="Manhattan" id="Edge11" inPort="Port 0 (in)" metadata="Metadata3" outPort="Port 0 (out)" toNode="SIMPLE_GATHER2:0"/>
417
+ <Edge fromNode="REFORMAT5:0" guiBendpoints="" guiRouter="Manhattan" id="Edge25" inPort="Port 1 (in)" metadata="Metadata3" outPort="Port 0 (out)" toNode="SIMPLE_GATHER2:1"/>
418
+ <Edge fromNode="SF_READER4:0" guiBendpoints="" guiRouter="Manhattan" id="Edge1" inPort="Port 0 (in)" metadata="Metadata9" outPort="Port 0 (output)" toNode="REFORMAT5:0"/>
419
+ <Edge fromNode="SIMPLE_GATHER2:0" guiBendpoints="" guiRouter="Manhattan" id="Edge3" inPort="Port 0 (in)" metadata="Metadata3" outPort="Port 0 (out)" toNode="EXT_SORT2:0"/>
420
+ </Phase>
421
+ <Phase number="4">
422
+ <Node enabled="enabled" guiHeight="77" guiName="ExtSort" guiWidth="128" guiX="1656" guiY="1002" id="EXT_SORT3" sortKey="Timestamp(a)" type="EXT_SORT"/>
423
+ <Node enabled="enabled" entityFieldsMapping="{&quot;entityName&quot;:&quot;Opportunity&quot;,&quot;fieldsMapping&quot;:{&quot;Probability&quot;:{&quot;name&quot;:&quot;Probability&quot;,&quot;type&quot;:&quot;fact&quot;},&quot;Id&quot;:{&quot;name&quot;:&quot;Id&quot;,&quot;type&quot;:&quot;recordid&quot;},&quot;Timestamp&quot;:{&quot;name&quot;:&quot;Timestamp&quot;,&quot;type&quot;:&quot;timestamp&quot;}}}" guiHeight="65" guiName="GD Eventstore Writer" guiWidth="150" guiX="1872" guiY="1002" id="GD_ESTORE_WRITER3" store="${GDC_EVENTSTORE}" timezone="UTC" type="GD_ESTORE_WRITER"/>
424
+ <Node enabled="enabled" guiHeight="65" guiName="Reformat" guiWidth="128" guiX="954" guiY="1002" id="REFORMAT3" type="REFORMAT">
425
+ <attr name="transform"><![CDATA[//#CTL2
426
+ import 'trans/DateFunctions.ctl';
427
+
428
+ // Transforms input record into output record.
429
+ function integer transform()
430
+ {
431
+ $out.0.Id = $in.0.Id;
432
+ $out.0.Probability = str2decimal($in.0.Probability):null;
433
+ $out.0.Timestamp = timestampParsing($in.0.CreatedDate, "UTC"):null;
434
+
435
+ return OK;
436
+ }
437
+
438
+ // Called during component initialization.
439
+ // function boolean init() {}
440
+
441
+ // Called during each graph run before the transform is executed. May be used to allocate and initialize resources
442
+ // required by the transform. All resources allocated within this method should be released
443
+ // by the postExecute() method.
444
+ // function void preExecute() {}
445
+
446
+ // Called only if transform() throws an exception.
447
+ // function integer transformOnError(string errorMessage, string stackTrace) {}
448
+
449
+ // Called during each graph run after the entire transform was executed. Should be used to free any resources
450
+ // allocated within the preExecute() method.
451
+ // function void postExecute() {}
452
+
453
+ // Called to return a user-defined error message when an error occurs.
454
+ // function string getMessage() {}
455
+ ]]></attr>
456
+ </Node>
457
+ <Node enabled="enabled" guiHeight="65" guiName="Reformat" guiWidth="128" guiX="1300" guiY="1110" id="REFORMAT6" type="REFORMAT">
458
+ <attr name="transform"><![CDATA[//#CTL2
459
+ import 'trans/DateFunctions.ctl';
460
+
461
+ // Transforms input record into output record.
462
+ function integer transform() {
463
+ $out.0.Probability = $in.0.Probability;
464
+ $out.0.Id = $in.0.Id;
465
+ $out.0.Timestamp = $out.0.Timestamp = timestampParsing($in.0.SystemModstamp, "UTC"):null;
466
+
467
+ return OK;
468
+ }
469
+
470
+ // Called during component initialization.
471
+ // function boolean init() {}
472
+
473
+ // Called during each graph run before the transform is executed. May be used to allocate and initialize resources
474
+ // required by the transform. All resources allocated within this method should be released
475
+ // by the postExecute() method.
476
+ // function void preExecute() {}
477
+
478
+ // Called only if transform() throws an exception.
479
+ // function integer transformOnError(string errorMessage, string stackTrace) {}
480
+
481
+ // Called during each graph run after the entire transform was executed. Should be used to free any resources
482
+ // allocated within the preExecute() method.
483
+ // function void postExecute() {}
484
+
485
+ // Called to return a user-defined error message when an error occurs.
486
+ // function string getMessage() {}
487
+ ]]></attr>
488
+ </Node>
489
+ <Node enabled="enabled" fieldsMapping="{&quot;xmlFieldsMapping&quot;:{&quot;xmlFields&quot;:[{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;Probability&quot;,&quot;label&quot;:&quot;Probability (%)&quot;,&quot;xmlPath&quot;:&quot;Probability&quot;,&quot;metadataField&quot;:&quot;Probability&quot;}},{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;SystemModstamp&quot;,&quot;label&quot;:&quot;System Modstamp&quot;,&quot;xmlPath&quot;:&quot;SystemModstamp&quot;,&quot;metadataField&quot;:&quot;SystemModstamp&quot;}},{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;Id&quot;,&quot;label&quot;:&quot;Opportunity ID&quot;,&quot;xmlPath&quot;:&quot;Id&quot;,&quot;metadataField&quot;:&quot;Id&quot;}}]}}" guiHeight="65" guiName="SF Reader" guiWidth="128" guiX="1114" guiY="1104" id="SF_READER5" sfdcConnection="SFDC" soql="Select Probability, SystemModstamp, Id From Opportunity" type="SF_READER"/>
490
+ <Node enabled="enabled" guiHeight="72" guiName="SimpleGather" guiWidth="128" guiX="1487" guiY="1005" id="SIMPLE_GATHER3" type="SIMPLE_GATHER"/>
491
+ <Edge debugMode="true" fromNode="EXT_SORT3:0" guiBendpoints="" guiRouter="Manhattan" id="Edge23" inPort="Port 0 (in)" metadata="Metadata4" outPort="Port 0 (out)" toNode="GD_ESTORE_WRITER3:0"/>
492
+ <Edge fromNode="REFORMAT3:0" guiBendpoints="" guiRouter="Manhattan" id="Edge12" inPort="Port 0 (in)" metadata="Metadata4" outPort="Port 0 (out)" toNode="SIMPLE_GATHER3:0"/>
493
+ <Edge fromNode="REFORMAT6:0" guiBendpoints="" guiRouter="Manhattan" id="Edge26" inPort="Port 1 (in)" metadata="Metadata4" outPort="Port 0 (out)" toNode="SIMPLE_GATHER3:1"/>
494
+ <Edge fromNode="SF_READER5:0" guiBendpoints="" guiRouter="Manhattan" id="Edge21" inPort="Port 0 (in)" metadata="Metadata10" outPort="Port 0 (output)" toNode="REFORMAT6:0"/>
495
+ <Edge fromNode="SIMPLE_GATHER3:0" guiBendpoints="" guiRouter="Manhattan" id="Edge22" inPort="Port 0 (in)" metadata="Metadata4" outPort="Port 0 (out)" toNode="EXT_SORT3:0"/>
496
+ </Phase>
497
+ <Phase number="5">
498
+ <Node enabled="enabled" guiHeight="77" guiName="ExtSort" guiWidth="128" guiX="1656" guiY="1236" id="EXT_SORT4" sortKey="Timestamp(a)" type="EXT_SORT"/>
499
+ <Node enabled="enabled" guiHeight="77" guiName="ExtSort" guiWidth="128" guiX="1656" guiY="1334" id="EXT_SORT5" sortKey="Timestamp(a)" type="EXT_SORT"/>
500
+ <Node enabled="enabled" entityFieldsMapping="{&quot;entityName&quot;:&quot;Opportunity&quot;,&quot;fieldsMapping&quot;:{&quot;OpportunityId&quot;:{&quot;name&quot;:&quot;OpportunityId&quot;,&quot;type&quot;:&quot;attribute&quot;},&quot;CreatedDate&quot;:{&quot;name&quot;:&quot;CreatedDate&quot;,&quot;type&quot;:&quot;attribute&quot;},&quot;Id&quot;:{&quot;name&quot;:&quot;Id&quot;,&quot;type&quot;:&quot;recordid&quot;},&quot;Timestamp&quot;:{&quot;name&quot;:&quot;Timestamp&quot;,&quot;type&quot;:&quot;timestamp&quot;}}}" guiHeight="65" guiName="GD Eventstore Writer" guiWidth="150" guiX="1872" guiY="1236" id="GD_ESTORE_WRITER4" store="${GDC_EVENTSTORE}" timezone="UTC" type="GD_ESTORE_WRITER"/>
501
+ <Node enabled="enabled" entityFieldsMapping="{&quot;entityName&quot;:&quot;Opportunity&quot;,&quot;fieldsMapping&quot;:{&quot;IsDeleted&quot;:{&quot;name&quot;:&quot;IsDeleted&quot;,&quot;type&quot;:&quot;isDeleted&quot;},&quot;Id&quot;:{&quot;name&quot;:&quot;Id&quot;,&quot;type&quot;:&quot;recordid&quot;},&quot;Timestamp&quot;:{&quot;name&quot;:&quot;Timestamp&quot;,&quot;type&quot;:&quot;timestamp&quot;}}}" guiHeight="65" guiName="GD Eventstore Writer" guiWidth="150" guiX="1917" guiY="1334" id="GD_ESTORE_WRITER5" store="${GDC_EVENTSTORE}" timezone="UTC" type="GD_ESTORE_WRITER"/>
502
+ <Node enabled="enabled" guiHeight="65" guiName="Reformat" guiWidth="128" guiX="1300" guiY="1236" id="REFORMAT7" type="REFORMAT">
503
+ <attr name="transform"><![CDATA[//#CTL2
504
+ import 'trans/DateFunctions.ctl';
505
+
506
+ // Transforms input record into output record.
507
+ function integer transform()
508
+ {
509
+ $out.0.CreatedDate = dateParsing(goodDateParsing($in.0.CreatedDate, "UTC")):null;
510
+ $out.0.Id = $in.0.Id;
511
+ $out.0.OpportunityId = $in.0.Id;
512
+ $out.0.Timestamp = timestampParsing($in.0.CreatedDate, "UTC"):null;
513
+
514
+ return OK;
515
+ }
516
+
517
+ // Called during component initialization.
518
+ // function boolean init() {}
519
+
520
+ // Called during each graph run before the transform is executed. May be used to allocate and initialize resources
521
+ // required by the transform. All resources allocated within this method should be released
522
+ // by the postExecute() method.
523
+ // function void preExecute() {}
524
+
525
+ // Called only if transform() throws an exception.
526
+ // function integer transformOnError(string errorMessage, string stackTrace) {}
527
+
528
+ // Called during each graph run after the entire transform was executed. Should be used to free any resources
529
+ // allocated within the preExecute() method.
530
+ // function void postExecute() {}
531
+
532
+ // Called to return a user-defined error message when an error occurs.
533
+ // function string getMessage() {}
534
+ ]]></attr>
535
+ </Node>
536
+ <Node enabled="enabled" guiHeight="65" guiName="Reformat" guiWidth="128" guiX="1300" guiY="1334" id="REFORMAT8" type="REFORMAT">
537
+ <attr name="transform"><![CDATA[//#CTL2
538
+ import 'trans/DateFunctions.ctl';
539
+
540
+ // Transforms input record into output record.
541
+ date now = today();
542
+
543
+ function integer transform()
544
+ {
545
+ $out.0.Id = $in.0.Id;
546
+ $out.0.Timestamp = now;
547
+ $out.0.IsDeleted = 'true';
548
+ return OK;
549
+ }
550
+
551
+ // Called during component initialization.
552
+ // function boolean init() {}
553
+
554
+ // Called during each graph run before the transform is executed. May be used to allocate and initialize resources
555
+ // required by the transform. All resources allocated within this method should be released
556
+ // by the postExecute() method.
557
+ // function void preExecute() {}
558
+
559
+ // Called only if transform() throws an exception.
560
+ // function integer transformOnError(string errorMessage, string stackTrace) {}
561
+
562
+ // Called during each graph run after the entire transform was executed. Should be used to free any resources
563
+ // allocated within the preExecute() method.
564
+ // function void postExecute() {}
565
+
566
+ // Called to return a user-defined error message when an error occurs.
567
+ // function string getMessage() {}
568
+ ]]></attr>
569
+ </Node>
570
+ <Node enabled="enabled" fieldsMapping="{&quot;xmlFieldsMapping&quot;:{&quot;xmlFields&quot;:[{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;Id&quot;,&quot;label&quot;:&quot;Opportunity ID&quot;,&quot;xmlPath&quot;:&quot;Id&quot;,&quot;metadataField&quot;:&quot;Id&quot;}},{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;CreatedDate&quot;,&quot;label&quot;:&quot;Created Date&quot;,&quot;xmlPath&quot;:&quot;CreatedDate&quot;,&quot;metadataField&quot;:&quot;CreatedDate&quot;}}]}}" guiHeight="65" guiName="SF Reader" guiWidth="128" guiX="1114" guiY="1236" id="SF_READER6" sfdcConnection="SFDC" soql="Select Id, CreatedDate From Opportunity" type="SF_READER"/>
571
+ <Node enabled="enabled" fieldsMapping="{&quot;xmlFieldsMapping&quot;:{&quot;xmlFields&quot;:[{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;Id&quot;,&quot;label&quot;:&quot;Opportunity ID&quot;,&quot;xmlPath&quot;:&quot;Id&quot;,&quot;metadataField&quot;:&quot;Id&quot;}},{&quot;xmlFieldMapping&quot;:{&quot;name&quot;:&quot;CreatedDate&quot;,&quot;label&quot;:&quot;Created Date&quot;,&quot;xmlPath&quot;:&quot;CreatedDate&quot;,&quot;metadataField&quot;:&quot;CreatedDate&quot;}}]}}" guiHeight="65" guiName="SF Reader" guiWidth="128" guiX="1034" guiY="1334" id="SF_READER7" sfdcConnection="SFDC" soql="Select Id From Opportunity WHERE HasOpportunityLineItem = true" type="SF_READER"/>
572
+ <Edge debugMode="true" fromNode="EXT_SORT4:0" guiBendpoints="" guiRouter="Manhattan" id="Edge33" inPort="Port 0 (in)" metadata="Metadata12" outPort="Port 0 (out)" toNode="GD_ESTORE_WRITER4:0"/>
573
+ <Edge debugMode="true" fromNode="EXT_SORT5:0" guiBendpoints="" guiRouter="Manhattan" id="Edge29" inPort="Port 0 (in)" metadata="Metadata15" outPort="Port 0 (out)" toNode="GD_ESTORE_WRITER5:0"/>
574
+ <Edge debugMode="true" fromNode="REFORMAT7:0" guiBendpoints="" guiRouter="Manhattan" id="Edge28" inPort="Port 0 (in)" metadata="Metadata12" outPort="Port 0 (out)" toNode="EXT_SORT4:0"/>
575
+ <Edge debugMode="true" fromNode="REFORMAT8:0" guiBendpoints="" guiRouter="Manhattan" id="Edge30" inPort="Port 0 (in)" metadata="Metadata15" outPort="Port 0 (out)" toNode="EXT_SORT5:0"/>
576
+ <Edge debugMode="true" fromNode="SF_READER6:0" guiBendpoints="" guiRouter="Manhattan" id="Edge31" inPort="Port 0 (in)" metadata="Metadata13" outPort="Port 0 (output)" toNode="REFORMAT7:0"/>
577
+ <Edge debugMode="true" fromNode="SF_READER7:0" guiBendpoints="" guiRouter="Manhattan" id="Edge27" inPort="Port 0 (in)" metadata="Metadata13" outPort="Port 0 (output)" toNode="REFORMAT8:0"/>
578
+ </Phase>
579
+ </Graph>