source: branches/work_304/core/ARAssignHelper.cpp @ 368

Revision 368, 20.9 KB checked in by jls17, 6 years ago (diff)
  • added support for filterApi calls (input-mapping, output-mapping, creates field-references)
Line 
1//Copyright (C) 2009 Stefan Nerlich | stefan.nerlich@hotmail.com
2//
3//This file is part of ARInside.
4//
5//    ARInside is free software: you can redistribute it and/or modify
6//    it under the terms of the GNU General Public License as published by
7//    the Free Software Foundation, version 2 of the License.
8//
9//    ARInside is distributed in the hope that it will be useful,
10//    but WITHOUT ANY WARRANTY; without even the implied warranty of
11//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12//    GNU General Public License for more details.
13//
14//    You should have received a copy of the GNU General Public License
15//    along with Foobar.  If not, see <http://www.gnu.org/licenses/>.
16
17#include "stdafx.h"
18#include "ARAssignHelper.h"
19
20CARAssignHelper::CARAssignHelper(CARInside& arIn, int rootLevel, const CARServerObject &obj, const CARSchema& schema1, const CARSchema& schema2)
21{
22        this->arIn = &arIn;
23        this->object = obj.Clone();
24        this->schemaInsideId1 = schema1.GetInsideId();
25        this->schemaInsideId2 = schema2.GetInsideId();
26        this->rootLevel = rootLevel;
27        this->pushFieldFlag = false;
28}
29
30CARAssignHelper::CARAssignHelper(CARInside &arIn, int rootLevel, const CARServerObject &obj, int schemaId1, int schemaId2)
31{
32        this->arIn = &arIn;
33        this->object = obj.Clone();
34        this->schemaInsideId1 = schemaId1;
35        this->schemaInsideId2 = schemaId2;
36        this->rootLevel = rootLevel;
37        this->pushFieldFlag = false;
38}
39
40CARAssignHelper::CARAssignHelper(CARInside &arIn, int rootLevel, const CARServerObject &obj, const std::string &schemaName1, const std::string &schemaName2)
41{
42        CARSchema schema1(schemaName1);
43        CARSchema schema2(schemaName2);
44
45        this->arIn = &arIn;
46        this->object = obj.Clone();
47        this->schemaInsideId1 = schema1.GetInsideId();
48        this->schemaInsideId2 = schema2.GetInsideId();
49        this->rootLevel = rootLevel;
50        this->pushFieldFlag = false;
51}
52
53CARAssignHelper::~CARAssignHelper(void)
54{
55        if (this->object != NULL)
56                delete object;
57}
58
59
60string CARAssignHelper::PushFieldsAssignment(const ARPushFieldsActionStruct &action, int nAction, IfElseState ifElse)
61{
62        this->mode = AM_PUSHFIELD;
63
64        stringstream strm;
65        strm.str("");
66        try
67        {
68                CTable tblFieldList("pushFieldsList", "TblObjectList");
69                tblFieldList.AddColumn(30, "Field Name");
70                tblFieldList.AddColumn(70, "Value");
71                this->pushFieldFlag = true;
72
73                for(unsigned int i=0; i< action.pushFieldsList.numItems; i++)
74                {
75                        int nTargetFieldId = action.pushFieldsList.pushFieldsList[i].field.u.fieldId;
76
77                        //Add a reference to the target field
78                        CRefItem refTarget(*this->object, ifElse, nAction, REFM_PUSHFIELD_TARGET);
79                        arIn->AddFieldReference(this->schemaInsideId2, nTargetFieldId, refTarget);
80
81                        CRefItem refValue(*this->object, ifElse, nAction, REFM_PUSHFIELD_VALUE);
82
83                        stringstream assignText;
84                        CheckAssignment(nTargetFieldId, NULL, ifElse, nAction, action.pushFieldsList.pushFieldsList[i].assign, assignText, refValue);
85
86                        CTableRow row("cssStdRow");
87                        row.AddCell(CTableCell(arIn->LinkToField(schemaInsideId2, nTargetFieldId, rootLevel)));
88                        row.AddCell(CTableCell(assignText.str()));
89                        tblFieldList.AddRow(row);       
90                }
91
92                strm << tblFieldList;
93        }
94        catch(exception& e)
95        {
96                cout << "EXCEPTION PushFieldsAssignment of '" << this->object->GetName() << "':" << e.what() << endl;
97        }
98
99        return strm.str();
100}
101
102string CARAssignHelper::SetFieldsAssignment(const ARSetFieldsActionStruct &action, int nAction, IfElseState ifElse)
103{
104        this->mode = AM_SETFIELDS;
105
106        stringstream strm;
107        strm.str("");
108        try
109        {
110                CTable tblFieldList("setFieldsList", "TblObjectList");
111                tblFieldList.AddColumn(30, "Field Name");
112                tblFieldList.AddColumn(70, "Value");
113
114                for(unsigned int i=0; i< action.fieldList.numItems; i++)
115                {
116                        int nTargetFieldId = action.fieldList.fieldAssignList[i].fieldId;
117
118                        //Add a reference to the target field
119                        CRefItem refTarget(*this->object, ifElse, nAction, REFM_SETFIELDS_TARGET);
120                        arIn->AddFieldReference(this->schemaInsideId1, nTargetFieldId, refTarget);
121
122                        CRefItem refValue(*this->object, ifElse, nAction, REFM_SETFIELDS_VALUE);
123
124                        stringstream assignText;               
125                        CheckAssignment(nTargetFieldId, NULL, ifElse, nAction, action.fieldList.fieldAssignList[i].assignment, assignText, refValue);
126
127                        CTableRow row("cssStdRow");
128                        row.AddCell(CTableCell(arIn->LinkToField(schemaInsideId1, nTargetFieldId, rootLevel)));
129                        row.AddCell(CTableCell(assignText.str()));
130                        tblFieldList.AddRow(row);       
131                }
132
133                strm << tblFieldList;
134        }
135        catch(exception& e)
136        {
137                cout << "EXCEPTION SetFieldsAssignment of '" << this->object->GetName() << "': " << e.what() << endl;
138        }
139
140        return strm.str();
141}
142
143string CARAssignHelper::OpenWindowAssignment(const ARFieldAssignList &action, int nAction, IfElseState ifElse, OpenWindowMode openCloseInfo)
144{
145        this->mode = AM_OPENWINDOW;
146
147        stringstream strm;
148        strm.str("");
149        try
150        {
151                CTable tblFieldList("setFieldsList", "TblObjectList");
152                tblFieldList.AddColumn(30, "Field Name");
153                tblFieldList.AddColumn(70, "Value");
154
155                for(unsigned int i=0; i< action.numItems; i++)
156                {
157                        int nTargetFieldId = action.fieldAssignList[i].fieldId;
158
159                        if (nTargetFieldId == AR_SET_DEFAULTS_ID)
160                                continue;
161
162                        //Add a reference to the target field
163                        CRefItem refTarget(*this->object, ifElse, nAction, openCloseInfo, REFM_OPENWINDOW_TARGET);
164                        arIn->AddFieldReference(schemaInsideId1, nTargetFieldId, refTarget);
165
166                        CRefItem refValue(*this->object, ifElse, nAction, openCloseInfo, REFM_OPENWINDOW_VALUE);
167
168                        stringstream assignText;               
169                        CheckAssignment(nTargetFieldId, NULL, ifElse, nAction, action.fieldAssignList[i].assignment, assignText, refValue);
170
171                        CTableRow row("cssStdRow");
172                        row.AddCell(CTableCell(arIn->LinkToField(schemaInsideId1, nTargetFieldId, rootLevel)));
173                        row.AddCell(CTableCell(assignText.str()));
174                        tblFieldList.AddRow(row);       
175                }
176
177                strm << tblFieldList;
178        }
179        catch(exception& e)
180        {
181                cout << "EXCEPTION SetFieldsAssignment of '" << this->object->GetName() << "':" << e.what() << endl;
182        }
183
184        return strm.str();
185}
186
187string CARAssignHelper::ServiceAssignment(const ARFieldAssignList &action, int nAction, IfElseState ifElse, ServiceMappingMode serviceInfo)
188{
189        this->mode = AM_SERVICE;
190
191        stringstream strm;
192        strm.str("");
193        try
194        {
195                CTable tblFieldList("setFieldsList", "TblObjectList");
196                tblFieldList.AddColumn(30, "Field Name");
197                tblFieldList.AddColumn(70, "Value");
198
199                for(unsigned int i=0; i< action.numItems; i++)
200                {
201                        int nTargetFieldId = action.fieldAssignList[i].fieldId;
202
203                        //Add a reference to the target field
204                        CRefItem refTarget(*this->object, ifElse, nAction, serviceInfo, REFM_SERVICE_TARGET);
205                        arIn->AddFieldReference(schemaInsideId1, nTargetFieldId, refTarget);
206
207                        CRefItem refValue(*this->object, ifElse, nAction, serviceInfo, REFM_SERVICE_VALUE);
208
209                        stringstream assignText;               
210                        CheckAssignment(nTargetFieldId, NULL, ifElse, nAction, action.fieldAssignList[i].assignment, assignText, refValue);
211
212                        CTableRow row("cssStdRow");
213                        row.AddCell(CTableCell(arIn->LinkToField(schemaInsideId1, nTargetFieldId, rootLevel)));
214                        row.AddCell(CTableCell(assignText.str()));
215                        tblFieldList.AddRow(row);       
216                }
217
218                strm << tblFieldList;
219        }
220        catch(exception& e)
221        {
222                cout << "EXCEPTION ServiceAssignment of '" << this->object->GetName() << "': " << e.what() << endl;
223        }
224
225        return strm.str();
226}
227
228string CARAssignHelper::FilterApiInputAssignment(const ARAssignStruct* assignList, int numItems, int nAction, IfElseState ifElse)
229{
230        this->mode = AM_FILTERAPI_INPUT;
231
232        stringstream strm;
233        strm.str("");
234        try
235        {
236                CTable tblFieldList("setFieldsList", "TblObjectList");
237                tblFieldList.AddColumn(30, "Position");
238                tblFieldList.AddColumn(70, "Value");
239
240                for(int i=0; i< numItems; i++)
241                {
242                        stringstream position;
243                        position << (i+1);
244
245                        CRefItem refItem(*this->object, ifElse, nAction, REFM_SETFIELDS_FILTERAPI_INPUT);
246                       
247                        stringstream assignText;
248                        CheckAssignment(0, NULL, ifElse, nAction, const_cast<ARAssignStruct&>(assignList[i]), assignText, refItem);
249
250                        CTableRow row("cssStdRow");
251                        row.AddCell(position.str());
252                        row.AddCell(assignText.str());
253                        tblFieldList.AddRow(row);       
254                }
255                strm << tblFieldList;
256        }
257        catch(exception& e)
258        {
259                cout << "EXCEPTION in FilterAPIAssignment of '" << this->object->GetName() << "': " << e.what() << endl;
260        }
261
262        return strm.str();
263}
264
265unsigned int CARAssignHelper::CheckAssignment(int targetFieldId, ARAssignStruct* parentAssignment, IfElseState ifElse, int nAction, ARAssignStruct &assignment, stringstream &assignText, const CRefItem& refItem)
266{
267        unsigned int assignType = assignment.assignType;
268        try
269        {
270                switch(assignType)
271                {
272                case AR_ASSIGN_TYPE_VALUE:
273                        {                                       
274                                AssignValue(targetFieldId, ifElse, assignment.u.value, assignText, refItem);
275                        }
276                        break;
277                case AR_ASSIGN_TYPE_FIELD:
278                        {       
279                                switch (assignment.u.field->tag)
280                                {
281                                case AR_FIELD:
282                                        AssignField(ifElse, nAction, *assignment.u.field, assignText, refItem);
283                                        break;
284                                case AR_STAT_HISTORY:
285                                        {
286                                                assignText << "$";
287                                               
288                                                int iFieldId = 15;
289                                                CARField statHistField(schemaInsideId2, iFieldId);
290                                                if (statHistField.Exists())
291                                                {
292                                                        assignText << statHistField.GetURL(rootLevel);
293                                                        arIn->AddFieldReference(schemaInsideId2, iFieldId, refItem);
294                                                }
295                                                else
296                                                        assignText << iFieldId;
297
298                                                assignText << ".";
299
300                                                string enumValue = arIn->GetFieldEnumValue(schemaInsideId2, 7, assignment.u.field->u.statHistory.enumVal);
301                                                if (enumValue.empty())
302                                                        assignText << assignment.u.field->u.statHistory.enumVal;
303                                                else
304                                                        assignText << enumValue;
305
306                                                assignText << ".";
307
308                                                switch(assignment.u.field->u.statHistory.userOrTime)
309                                                {                                               
310                                                case AR_STAT_HISTORY_USER:
311                                                        {
312                                                                assignText << "USER";
313                                                        }
314                                                        break;
315                                                case AR_STAT_HISTORY_TIME:
316                                                        {
317                                                                assignText << "TIME";
318                                                        }
319                                                        break;
320                                                }
321                                                assignText << "$";
322                                        }
323                                        break;
324                                }
325                        }
326                        break;
327                case AR_ASSIGN_TYPE_PROCESS:
328                        {
329                                AssignProcess(ifElse, assignment.u.process, assignText, refItem);
330                        }
331                        break;
332                case AR_ASSIGN_TYPE_ARITH:
333                        {
334                                // Rule 1:
335                                // if the parent has a higher precedence (in this case a lower value), we have to add parentheses
336                                // Example 1: 2 * (3 + 4)      Original: (2 * (3 + 4))
337                                // Example 2: 2 + 3 * 4        Original: (2 + (3 * 4))
338                                // Example 3: (2 + 3) * 4      Original: ((2 + 3) * 4)
339                                //
340                                // Rule 2:
341                                // if the parent and the current operand have the same precedence (mul, div and modulo use the
342                                // same, at least in C) and the current modulo operation is at the right side of the parent
343                                // operand, only then parentheses are needed. (If the modulo is on the left side, the operation
344                                // is executed from left to right and doesn't need any parentheses.)
345                                // Example 1: 2 * (3 mod 4)    Original: (2 * (3 mod 4))
346                                // Example 2: 2 * 3 mod 4      Original: ((2 * 3) mod 4)
347                                // Example 3: 2 mod 3 * 4      Original: ((2 mod 3) * 4)
348                                // Example 4: 2 mod (3 * 4)    Original: (2 mod (3 * 4))
349
350                                bool addBracket = false;
351                                if (parentAssignment != NULL && parentAssignment->assignType == assignment.assignType)
352                                {
353                                        unsigned int parentPrecedence = CAREnum::OperandPrecedence(parentAssignment->u.arithOp->operation);
354                                        unsigned int currentPrecedence = CAREnum::OperandPrecedence(assignment.u.arithOp->operation);
355
356                                        if (parentPrecedence < currentPrecedence || assignment.u.arithOp->operation == AR_ARITH_OP_MODULO &&
357                                            parentPrecedence == currentPrecedence && &parentAssignment->u.arithOp->operandRight == &assignment)
358                                                addBracket = true;
359                                }
360
361                                switch (assignment.u.arithOp->operation) 
362                                {
363                                case AR_ARITH_OP_ADD:
364                                        if (addBracket) assignText << "(";
365                                        CheckAssignment(targetFieldId, &assignment, ifElse, nAction, assignment.u.arithOp->operandLeft, assignText, refItem);
366                                        assignText << CAREnum::Operand(AR_ARITH_OP_ADD);
367                                        CheckAssignment(targetFieldId, &assignment, ifElse, nAction, assignment.u.arithOp->operandRight, assignText, refItem);
368                                        if (addBracket) assignText << ")";
369                                        break;
370                                case AR_ARITH_OP_SUBTRACT:
371                                        if (addBracket) assignText << "(";
372                                        CheckAssignment(targetFieldId, &assignment, ifElse, nAction, assignment.u.arithOp->operandLeft, assignText, refItem);
373                                        assignText << CAREnum::Operand(AR_ARITH_OP_SUBTRACT);
374                                        CheckAssignment(targetFieldId, &assignment, ifElse, nAction, assignment.u.arithOp->operandRight, assignText, refItem);
375                                        if (addBracket) assignText << ")";
376                                        break;
377                                case AR_ARITH_OP_MULTIPLY:
378                                        if (addBracket) assignText << "(";
379                                        CheckAssignment(targetFieldId, &assignment, ifElse, nAction, assignment.u.arithOp->operandLeft, assignText, refItem);
380                                        assignText << CAREnum::Operand(AR_ARITH_OP_MULTIPLY);
381                                        CheckAssignment(targetFieldId, &assignment, ifElse, nAction, assignment.u.arithOp->operandRight, assignText, refItem);
382                                        if (addBracket) assignText << ")";
383                                        break;
384                                case AR_ARITH_OP_DIVIDE:
385                                        if (addBracket) assignText << "(";
386                                        CheckAssignment(targetFieldId, &assignment, ifElse, nAction, assignment.u.arithOp->operandLeft, assignText, refItem);
387                                        assignText << CAREnum::Operand(AR_ARITH_OP_DIVIDE);
388                                        CheckAssignment(targetFieldId, &assignment, ifElse, nAction, assignment.u.arithOp->operandRight, assignText, refItem);
389                                        if (addBracket) assignText << ")";
390                                        break;
391                                case AR_ARITH_OP_MODULO:
392                                        if (addBracket) assignText << "(";
393                                        CheckAssignment(targetFieldId, &assignment, ifElse, nAction, assignment.u.arithOp->operandLeft, assignText, refItem);
394                                        assignText << CAREnum::Operand(AR_ARITH_OP_MODULO);
395                                        CheckAssignment(targetFieldId, &assignment, ifElse, nAction, assignment.u.arithOp->operandRight, assignText, refItem);
396                                        if (addBracket) assignText << ")";
397                                        break;
398                                case AR_ARITH_OP_NEGATE:
399                                        assignText << CAREnum::Operand(AR_ARITH_OP_NEGATE);
400                                        CheckAssignment(targetFieldId, &assignment, ifElse, nAction, assignment.u.arithOp->operandRight, assignText, refItem);
401                                        break;
402                                }
403
404                        }
405                        break;
406                case AR_ASSIGN_TYPE_FUNCTION:
407                        {
408                                AssignFunction(targetFieldId, ifElse, nAction, *assignment.u.function, assignText, refItem);
409                        }
410                        break;
411                case AR_ASSIGN_TYPE_DDE:
412                        {
413                                AssignDDE(ifElse, *assignment.u.dde, assignText, refItem);
414                        }
415                        break;
416                case AR_ASSIGN_TYPE_SQL:
417                        {
418                                AssignSQL(ifElse, *assignment.u.sql, assignText, refItem);
419                        }
420                        break;
421                case AR_ASSIGN_TYPE_FILTER_API:
422                        {
423                                AssignFilterApi(ifElse, *assignment.u.filterApi, assignText, refItem);
424                        }
425                        break;
426                }       
427        }
428        catch(exception& e)
429        {
430                cout << "EXCEPTION in ActiveLink CheckAssignment of '" << this->object->GetName() << "': " << e.what() << endl;
431        }
432        return assignType;
433}
434
435void CARAssignHelper::AssignValue(int targetFieldId, IfElseState ifElse, ARValueStruct &v, stringstream &assignText, const CRefItem& refItem)
436{       
437        try
438        {
439                stringstream strmValue;
440
441                switch(v.dataType)
442                {
443                case AR_DATA_TYPE_NULL:
444                        {
445                                strmValue << "$NULL$";
446                        }
447                        break;
448                case AR_DATA_TYPE_CHAR:
449                        {
450                                strmValue << "\"" << CWebUtil::Validate(CARValue::ValueToString(v)) << "\"";
451                        }
452                        break;
453                case AR_DATA_TYPE_REAL:
454                case AR_DATA_TYPE_ULONG:
455                        {
456                                strmValue << CARValue::ValueToString(v);
457                        }
458                        break;
459                case AR_DATA_TYPE_KEYWORD:
460                        {
461                                strmValue << "$" << CARValue::ValueToString(v) << "$";
462                        }
463                        break;
464                case AR_DATA_TYPE_INTEGER:
465                case AR_DATA_TYPE_ENUM:
466                        {
467                                int nTmpActionSchemaId = schemaInsideId1;
468
469                                if(this->pushFieldFlag==true)
470                                        nTmpActionSchemaId = schemaInsideId2;
471
472                                string tmp = arIn->GetFieldEnumValue(nTmpActionSchemaId, targetFieldId, v.u.enumVal);
473
474                                if(!tmp.empty())
475                                        strmValue << "\"" << tmp << "\"";
476                                else
477                                        strmValue << v.u.enumVal;
478                        }
479                        break;
480                default:
481                        {
482                                strmValue << "\"" << CWebUtil::Validate(CARValue::ValueToString(v)) << "\"";
483                        }
484                        break;
485                }
486
487                assignText << strmValue.str();
488        }
489        catch(exception& e)
490        {
491                cout << "EXCEPTION in AssignValue of '" << this->object->GetName() << "': " << e.what() << endl;
492        }
493}
494
495void CARAssignHelper::AssignField(IfElseState ifElse, int nAction, ARAssignFieldStruct &v, stringstream &assignText, const CRefItem& refItem)
496{
497        try
498        {
499                int nTmpActionSchemaId = schemaInsideId1;
500
501                if(schemaInsideId1 != schemaInsideId2 && this->pushFieldFlag == false)
502                {
503                        nTmpActionSchemaId = schemaInsideId2;
504                }
505
506                arIn->AddFieldReference(nTmpActionSchemaId, v.u.fieldId, refItem);
507
508                assignText << "$" << arIn->LinkToField(nTmpActionSchemaId, v.u.fieldId, rootLevel) << "$";
509
510        }
511        catch(exception& e)
512        {
513                cout << "EXCEPTION in AssignField of '" << this->object->GetName() << "': " << e.what() << endl;
514        }
515}
516
517void CARAssignHelper::AssignProcess(IfElseState ifElse, char *v, stringstream &assignText, const CRefItem& refItem)
518{
519        try
520        {
521                if(v != NULL)
522                {
523                        assignText << "$PROCESS$ "<< arIn->TextFindFields(v, "$", this->schemaInsideId2, rootLevel, true, &refItem) << endl;
524                }
525        }
526        catch(exception& e)
527        {
528                cout << "EXCEPTION in AssignProcess of '" << this->object->GetName() << "': " << e.what() << endl;
529        }
530}
531
532void CARAssignHelper::AssignFunction(int targetFieldId, IfElseState ifElse, int nAction, ARFunctionAssignStruct &v, stringstream &assignText, const CRefItem& refItem)
533{
534        try
535        {                               
536                assignText << CAREnum::Function(v.functionCode) << "(";
537
538                switch (v.functionCode)
539                {
540#if AR_CURRENT_API_VERSION >= AR_API_VERSION_750
541                case AR_FUNCTION_HOVER:
542                        {
543                                for(unsigned int i=0; i< v.numItems; ++i)
544                                {
545                                        if(i > 0) assignText << ", ";
546
547                                        if (i == 0 && v.parameterList[i].assignType == AR_ASSIGN_TYPE_VALUE)
548                                        {
549                                                int fieldId = 0;
550                                                stringstream tmpStrm;
551
552                                                switch (v.parameterList[i].u.value.dataType)
553                                                {
554                                                case AR_DATA_TYPE_INTEGER:
555                                                        fieldId = v.parameterList[i].u.value.u.intVal;
556                                                        tmpStrm << fieldId;
557                                                        break;
558                                                case AR_DATA_TYPE_CHAR:
559                                                        if (v.parameterList[i].u.value.u.charVal != NULL && v.parameterList[i].u.value.u.charVal[0] != 0)
560                                                        {
561                                                                fieldId = atoi(v.parameterList[i].u.value.u.charVal);
562                                                                tmpStrm << "\"" << v.parameterList[i].u.value.u.charVal << "\"";
563                                                        }
564                                                        break;
565                                                }
566
567                                                if (fieldId > 0)
568                                                {
569                                                        int msgId = -1;
570                                                        switch (this->mode)
571                                                        {
572                                                        case AM_SETFIELDS:
573                                                                msgId = REFM_SETFIELDS_HOVERFIELD;
574                                                                break;
575                                                        case AM_PUSHFIELD:
576                                                                msgId = REFM_PUSHFIELD_HOVERFIELD;
577                                                                break;
578                                                        case AM_OPENWINDOW:
579                                                                msgId = REFM_OPENWINDOW_HOVERFIELD;
580                                                                break;
581                                                        case AM_SERVICE:
582                                                                msgId = REFM_SERVICE_HOVERFIELD;
583                                                                break;
584                                                        }
585                                                        CRefItem refItemHover(*this->object, ifElse, nAction, msgId);
586                                                        arIn->AddFieldReference(this->schemaInsideId1, fieldId, refItemHover);
587                                                        assignText << arIn->LinkToField(this->schemaInsideId1, fieldId, tmpStrm.str(), rootLevel);
588                                                        continue;
589                                                }
590                                        }
591
592                                        CheckAssignment(targetFieldId, NULL, ifElse, nAction, v.parameterList[i], assignText, refItem);
593                                }
594                        }
595                        break;
596#endif
597                default:
598                        {
599                                for(unsigned int i=0; i< v.numItems; ++i)
600                                {
601                                        if(i > 0)       assignText << ", ";
602
603                                        CheckAssignment(targetFieldId, NULL, ifElse, nAction, v.parameterList[i], assignText, refItem);
604                                }
605                        }
606                        break;
607                }
608                assignText << ")";
609        }
610        catch(exception& e)
611        {
612                cout << "EXCEPTION in AssignFunction of '" << this->object->GetName() << "': " << e.what() << endl;
613        }
614}
615
616void CARAssignHelper::AssignDDE(IfElseState ifElse, ARDDEStruct &v, stringstream &assignText, const CRefItem& refItem)
617{
618        try
619        {
620                if(v.command != NULL)
621                {
622                        assignText <<"Command: " << CWebUtil::Validate(v.command) << "<br/>" << endl;
623                }
624
625                if(v.item != NULL)
626                {
627                        assignText <<"Item: " << CWebUtil::Validate(v.item) << "<br/>" << endl;
628                }
629
630                if(v.pathToProgram != NULL)
631                {
632                        assignText << "Path to Program: " << CWebUtil::Validate(v.pathToProgram) << "<br/>" << endl;
633                }
634
635                if(v.serviceName != NULL)
636                {
637                        assignText << "Server Name: " << CWebUtil::Validate(v.serviceName) << "<br/" << endl;
638                }
639
640                if(v.topic != NULL)
641                {
642                        assignText << "Topic: " << CWebUtil::Validate(v.topic) << "<br/>" << endl;
643                }
644        }
645        catch(exception& e)
646        {
647                cout << "EXCEPTION in AssignDDE of '" << this->object->GetName() << "': " << e.what() << endl;
648        }
649}
650
651void CARAssignHelper::AssignSQL(IfElseState ifElse, ARAssignSQLStruct &v, stringstream &assignText, const CRefItem& refItem)
652{
653        try
654        {
655                assignText << "$" << v.valueIndex << "$";
656        }
657        catch(exception& e)
658        {
659                cout << "EXCEPTION in AssignSQL of '" << this->object->GetName() << "': " << e.what() << endl;
660        }
661}
662
663void CARAssignHelper::AssignFilterApi(IfElseState ifElse, ARAssignFilterApiStruct &v, stringstream &assignText, const CRefItem& refItem)
664{
665        try
666        {
667                assignText << "$" << v.valueIndex << "$";               
668        }
669        catch(exception& e)
670        {
671                cout << "EXCEPTION in AssignFilterApi of '" << this->object->GetName() << "': " << e.what() << endl;
672        }
673}
Note: See TracBrowser for help on using the repository browser.