source: branches/work_304/doc/DocAlActionStruct.cpp @ 489

Revision 489, 45.4 KB checked in by jls17, 6 years ago (diff)
  • fixed: in push-field actions with all-matching-id mapping, the source and target forms were switched
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 "DocAlActionStruct.h"
19#include "DocAllMatchingIdsTable.h"
20#include "DocActionOpenWindowHelper.h"
21
22CDocAlActionStruct::CDocAlActionStruct(CARInside &arIn, CARActiveLink &obj, string schemaName, int rootLevel)
23{
24        this->arIn = &arIn;
25        this->obj = &obj;       
26        this->rootLevel = rootLevel;
27        this->schemaName = schemaName;
28        this->schemaInsideId = this->arIn->SchemaGetInsideId(this->schemaName);
29        this->structItemType = AR_STRUCT_ITEM_XML_ACTIVE_LINK;
30}
31
32CDocAlActionStruct::~CDocAlActionStruct(void)
33{
34}
35
36
37string CDocAlActionStruct::Get(IfElseState ifElse, const ARActiveLinkActionList &actList)
38{
39        stringstream strm;
40        strm.str("");
41
42        try
43        {
44                this->ifElse = ifElse;
45
46                CTable tblListAction("tblListAlAction", "TblObjectList");
47                tblListAction.AddColumn(5, "Position"); 
48                tblListAction.AddColumn(15, "Action Type");
49                tblListAction.AddColumn(80, "Description");
50
51                for(unsigned int nAction = 0; nAction < actList.numItems; nAction++)
52                {
53                        ARActiveLinkActionStruct action = actList.actionList[nAction];
54
55                        CTableRow row("cssStdRow");             
56                        row.AddCell(CTableCell(nAction));                               
57
58                        CPageParams file(PAGE_ACTION_OBJLIST, AR_STRUCT_ITEM_XML_ACTIVE_LINK, action.action);
59                        row.AddCell(CTableCell(CWebUtil::Link(CAREnum::ActiveLinkAction(action.action), file, "", rootLevel)));                 
60
61                        stringstream actionDesc;
62                        actionDesc.str("");
63
64                        switch(action.action)
65                        {
66                        case AR_ACTIVE_LINK_ACTION_NONE:
67                                {
68                                        actionDesc << ActionNone(nAction);
69                                }
70                                break;
71                        case AR_ACTIVE_LINK_ACTION_MACRO:
72                                {
73                                        ActionMacro(actionDesc, action.u.macro, nAction);                                       
74                                }
75                                break;
76                        case AR_ACTIVE_LINK_ACTION_FIELDP:
77                                {                                       
78                                        ActionPushFields(actionDesc, action.u.pushFields, nAction);                                     
79                                }
80                                break;
81                        case AR_ACTIVE_LINK_ACTION_FIELDS:
82                                {
83                                        ActionSetFields(actionDesc, action.u.setFields, nAction);       
84                                }
85                                break;
86                        case AR_ACTIVE_LINK_ACTION_PROCESS:
87                                {
88                                        ActionProcess(actionDesc, action.u.process, nAction);   
89                                }
90                                break;
91                        case AR_ACTIVE_LINK_ACTION_MESSAGE:
92                                {
93                                        ActionMessage(actionDesc, action.u.message, nAction);                                   
94                                }
95                                break;
96                        case AR_ACTIVE_LINK_ACTION_SET_CHAR:
97                                {
98                                        ActionSetChar(actionDesc, action.u.characteristics, nAction);
99                                }
100                                break;
101                        case AR_ACTIVE_LINK_ACTION_DDE:
102                                {
103                                        ActionDde(actionDesc, action.u.dde, nAction);
104                                }
105                                break;                         
106                        case AR_ACTIVE_LINK_ACTION_SQL:
107                                {
108                                        ActionSql(actionDesc, action.u.sqlCommand, nAction);
109                                }
110                                break;
111                        case AR_ACTIVE_LINK_ACTION_AUTO:
112                                {
113                                        ActionAutomation(actionDesc, action.u.automation, nAction);
114                                }
115                                break;
116                        case AR_ACTIVE_LINK_ACTION_OPENDLG:
117                                {
118                                        ActionOpenDlg(actionDesc, action.u.openDlg, nAction);
119                                }
120                                break;
121                        case AR_ACTIVE_LINK_ACTION_COMMITC:
122                                {
123                                        ActionCommitChanges(actionDesc, action.u.commitChanges, nAction);
124                                }
125                                break;
126                        case AR_ACTIVE_LINK_ACTION_CLOSEWND:
127                                {
128                                        ActionCloseWindow(actionDesc, action.u.closeWnd, nAction);             
129                                }
130                                break;
131                        case AR_ACTIVE_LINK_ACTION_CALLGUIDE:
132                                {
133                                        ActionCallGuide(actionDesc, action.u.callGuide, nAction);
134                                }
135                                break;
136                        case AR_ACTIVE_LINK_ACTION_EXITGUIDE:
137                                {
138                                        ActionExitGuide(actionDesc, action.u.exitGuide, nAction);
139                                }
140                                break;
141                        case AR_ACTIVE_LINK_ACTION_GOTOGUIDELABEL:
142                                {
143                                        ActionGotoGuideLabel(actionDesc, action.u.gotoGuide, nAction);
144                                }
145                                break;
146                        case AR_ACTIVE_LINK_ACTION_WAIT:
147                                {
148                                        ActionWait(actionDesc, action.u.waitAction, nAction);
149                                }
150                                break;
151                        case AR_ACTIVE_LINK_ACTION_GOTOACTION:
152                                {                                       
153                                        ActionGotoAction(actionDesc, action.u.gotoAction, nAction);                             
154                                }
155                                break;
156#if AR_CURRENT_API_VERSION > 12 // Version 7.1 and higher
157                        case AR_ACTIVE_LINK_ACTION_SERVICE:
158                                {
159                                        ActionService(actionDesc, action.u.service, nAction);
160                                }
161                                break;
162#endif
163                        default:
164                                {
165                                        actionDesc.str("");                             
166                                }
167                                break;
168                        }
169
170                        row.AddCell(CTableCell(actionDesc.str()));
171                        tblListAction.AddRow(row);     
172                }
173
174                stringstream tblDesc;
175                tblDesc.str("");
176                tblDesc << CWebUtil::ImageTag("doc.gif", rootLevel) << IfElse(ifElse) << "-Actions";
177                tblListAction.description = tblDesc.str();
178
179                strm << tblListAction;
180        }
181        catch(exception& e)
182        {
183                cout << "EXCEPTION in CDocAlActionStruct of '" << this->obj->GetName() << "': " << e.what() << endl;
184        }
185
186        return strm.str();
187}
188
189// AR_ACTIVE_LINK_ACTION_NONE
190string CDocAlActionStruct::ActionNone(int nAction)
191{
192        return "None";
193}
194
195// AR_ACTIVE_LINK_ACTION_MACRO
196void CDocAlActionStruct::ActionMacro(std::ostream& strm, const ARActiveLinkMacroStruct &action, int nAction)
197{
198        try
199        {
200                if(action.macroName != NULL)
201                {
202                        if(action.macroName != NULL)
203                        {
204                                strm << "Macro Name: " << action.macroName << "<br/>" << endl;
205                        }
206                        else
207                        {
208                                strm << "Macro Name: <Unknown><br/>" << endl;
209                        }
210                }
211
212                if(action.macroParms.parms != NULL)
213                {
214                        CTable tblMacro("tblMacroParameter", "TblObjectList");
215                        tblMacro.AddColumn(50, "Parameter Name");       
216                        tblMacro.AddColumn(50, "Value");
217
218                        for(unsigned int nCnt = 0; nCnt < action.macroParms.numItems; nCnt++)
219                        {
220                                if(action.macroParms.parms[nCnt].name != NULL
221                                        && action.macroParms.parms[nCnt].value != NULL)
222                                {
223                                        const char* pName = action.macroParms.parms[nCnt].name;
224                                        const char* pValue = action.macroParms.parms[nCnt].value;
225
226                                        // create reference item description
227                                        CRefItem refItemTmp(*this->obj, ifElse, nAction, REFM_MACRO);
228
229                                        // find field references
230                                        string parameterValue = arIn->TextFindFields(pValue, "$", schemaInsideId, rootLevel, true, &refItemTmp);
231
232                                        // add the al action row
233                                        CTableRow mRow("cssStdRow");           
234                                        mRow.AddCell(CTableCell(pName));
235                                        mRow.AddCell(CTableCell(parameterValue));
236                                        tblMacro.AddRow(mRow); 
237                                }
238                        }
239                        strm << tblMacro;
240                        strm << "<br/>Macro Text: <br/>" << action.macroText << endl;
241                }
242        }
243        catch(exception& e)
244        {
245                cout << "EXCEPTION in AlActionMacro of '" << this->obj->GetName() << "': " << e.what() << endl;
246        }
247}
248
249// AR_ACTIVE_LINK_ACTION_FIELDS
250void CDocAlActionStruct::ActionSetFields(std::ostream& strm, const ARSetFieldsActionStruct &action, int nAction)
251{
252        try
253        {
254                CDocActionSetFieldsHelper setFieldHelper(*arIn, *obj, schemaName, action, structItemType, ifElse, nAction, rootLevel);
255                setFieldHelper.ShowActionWithServerName(true);
256                setFieldHelper.ToStream(strm);
257        }
258        catch(exception& e)
259        {
260                cout << "EXCEPTION in AlActionSetFields of '" << this->obj->GetName() << "': " << e.what() << endl;
261        }
262}
263
264// AR_ACTIVE_LINK_ACTION_PROCESS
265void CDocAlActionStruct::ActionProcess(std::ostream& strm, const char *action, int nAction)
266{
267        try
268        {
269                if(action != NULL)
270                {
271                        CRefItem refItemTmp(*this->obj, ifElse, nAction, REFM_RUN_PROCESS);
272                        strm << arIn->TextFindFields(action, "$", schemaInsideId, rootLevel, true, &refItemTmp) << endl;
273                }
274                else
275                {
276                        strm << "No Run Process command specified." << endl;
277                }
278        }
279        catch(exception& e)
280        {
281                cout << "EXCEPTION in AlActionProcess of '" << this->obj->GetName() << "': " << e.what() << endl;
282        }
283}
284
285// AR_ACTIVE_LINK_ACTION_MESSAGE
286void CDocAlActionStruct::ActionMessage(std::ostream& strm, const ARMessageStruct &action, int nAction)
287{
288        try
289        {
290                strm << "Message Number: " << action.messageNum << "<br/>" << endl;
291                strm << "Message Type: " << CAREnum::MessageType(action.messageType) << "<br/>" << endl;
292
293                if(action.messageText != NULL)
294                {
295                        CRefItem refItemTmp(*this->obj, ifElse, nAction, REFM_MESSAGE);
296                        strm << "Message Text:<br/>" << arIn->TextFindFields(action.messageText, "$", this->schemaInsideId, rootLevel, true, &refItemTmp) << "<br/>" << endl;
297                }
298
299#if AR_CURRENT_API_VERSION >= AR_API_VERSION_763
300                if (this->arIn->CompareServerVersion(7,6) >= 0 || (this->arIn->appConfig.fileMode == true && this->arIn->CompareServerVersion(7,5) >= 0))
301                {
302                        strm << "<input type=\"checkbox\" name=\"showInPromptPane\" value=\"showInPromptPane\"" << (action.usePromptingPane ? " checked" : "") << ">Show Message in Prompt Bar" << "<br/>" << endl;
303                }
304#endif
305        }
306        catch(exception& e)
307        {
308                cout << "EXCEPTION in AlActionMessage of '" << this->obj->GetName() << "': " << e.what() << endl;
309        }
310}
311
312// AR_ACTIVE_LINK_ACTION_SET_CHAR
313void CDocAlActionStruct::ActionSetChar(std::ostream& strm, const ARFieldCharacteristics &action, int nAction)
314{
315        try
316        {
317                //FieldName
318                strm << "Field ";
319                if (action.option == AR_FIELD_CHAR_OPTION_REFERENCE)
320                {
321                        strm << "(Use Value Of): $" << arIn->LinkToField(schemaInsideId, action.fieldId, rootLevel) << "$<br/>" << endl;
322                }
323                else
324                {
325                        strm << "Name: " << arIn->LinkToField(schemaInsideId, action.fieldId, rootLevel) << "<br/>" << endl;
326                }
327
328                //Access Option
329                strm << "Field Access: " << CAREnum::SetCharFieldAccess(action.accessOption) << "<br/>" << endl;                                       
330
331
332                //Font
333                bool fontPropFound = false;
334                for(unsigned int i=0; i< action.props.numItems; i++)
335                {       
336                        if(action.props.props[i].prop == AR_DPROP_LABEL_FONT_STYLE && action.props.props[i].value.dataType == AR_DATA_TYPE_CHAR)
337                        {
338                                strm << "Field Font: " << action.props.props[i].value.u.charVal << "<br/>" << endl;
339                                fontPropFound = true;
340                                break;
341                        }
342                }
343                if (!fontPropFound)
344                        strm << "Field Font: Unchanged<br/>" << endl;
345
346
347                //Visibility
348                bool visibilityPropFound = false;
349                for(unsigned int i=0; i< action.props.numItems; i++)
350                {       
351                        if(action.props.props[i].prop == AR_DPROP_VISIBLE && 
352                                action.props.props[i].value.dataType == AR_DATA_TYPE_ENUM || action.props.props[i].value.dataType == AR_DATA_TYPE_INTEGER)
353                        {
354                                strm << "Visibility: " << CAREnum::SetCharFieldVisibility(action.props.props[i].value.u.intVal) << "<br/>" << endl;
355                                visibilityPropFound = true;
356                                break;
357                        }
358                }
359                if(!visibilityPropFound)
360                        strm << "Visibility: Unchanged<br/>" << endl;
361
362
363
364                //CharMenu
365                if(action.charMenu != NULL)
366                {
367                        if(strcmp(action.charMenu, "") != 0)
368                        {
369                                strm << "Menu: " << CWebUtil::LinkToMenu(action.charMenu, rootLevel) << "<br/>" << endl;
370                        }
371                }
372
373                //Set focus to field
374                if(action.focus == AR_FOCUS_SET_TO_FIELD)
375                {
376                        strm << "<input type=\"checkbox\" name=\"fieldSetFocus\" value=\"fieldSetFocus\" checked>Set Focus to Field" << "<br/>" << endl;
377                }       
378
379
380                for(unsigned int i=0; i< action.props.numItems; i++)
381                {       
382                        switch(action.props.props[i].prop)
383                        {
384                        case AR_DPROP_LABEL_COLOR_TEXT:
385                                {
386                                        stringstream strmTmp;
387                                        //strmTmp << CARValue::ValueToString(action.props.props[i].value);
388
389                                        bool colorUnknown = true;
390                                        char color[7];
391                                        size_t colorStrLen = 0;
392
393                                        if (action.props.props[i].value.dataType == AR_DATA_TYPE_CHAR)
394                                        {
395                                                colorStrLen = strlen(action.props.props[i].value.u.charVal);
396                                        }
397
398                                        if (action.props.props[i].value.dataType == AR_DATA_TYPE_CHAR && strncmp(action.props.props[i].value.u.charVal,"0x",2) == 0 && colorStrLen == 8)
399                                        {
400                                                color[0] = action.props.props[i].value.u.charVal[6];
401                                                color[1] = action.props.props[i].value.u.charVal[7];
402                                                color[2] = action.props.props[i].value.u.charVal[4];
403                                                color[3] = action.props.props[i].value.u.charVal[5];
404                                                color[4] = action.props.props[i].value.u.charVal[2];
405                                                color[5] = action.props.props[i].value.u.charVal[3];
406                                                color[6] = 0;
407                                                colorUnknown = false;
408                                        }
409
410                                        strm << "Label Color: ";
411
412                                        if(colorStrLen > 0)
413                                        {
414                                                if (colorUnknown)
415                                                {
416                                                        strm << CARValue::ValueToString(action.props.props[i].value);
417                                                }
418                                                else
419                                                {
420                                                        strm << "<span style='background-color:#" << color << "; width:16px; height:16px;'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>";
421                                                }
422                                        }
423                                        else
424                                                strm << "Default";
425
426                                        strm << "<br/>" << endl;
427                                }
428                                break;
429                        case AR_DPROP_REFRESH:
430                                {
431                                        strm << "<input type=\"checkbox\" name=\"refTableFieldInAl\" value=\"refrTblField\" checked>Refresh Table Field" << endl;
432                                }
433                                break;
434                        case AR_DPROP_LABEL:
435                                {       
436                                        string value = CARValue::ValueToString(action.props.props[i].value);
437                                        if(!value.empty())
438                                        {
439                                                CRefItem refItemTmp(*this->obj, ifElse, nAction, REFM_CHANGEFIELD_LABEL);
440                                                strm << "Field Label: " << arIn->TextFindFields(value, "$", schemaInsideId, rootLevel, true, &refItemTmp)  << "<br/>" << endl;                                 
441                                        }
442                                }
443                                break;
444
445                        }
446                }
447        }
448        catch(exception& e)
449        {
450                cout << "EXCEPTION in AlActionSetChar of '" << this->obj->GetName() << "': " << e.what() << endl;
451        }
452}
453
454// AR_ACTIVE_LINK_ACTION_DDE
455void CDocAlActionStruct::ActionDde(std::ostream& strm, const ARDDEStruct &action, int nAction)
456{
457        try
458        {
459                strm << "Action: " << CAREnum::DDEAction(action.action) << "<br/>" << endl;                                     
460
461                if(action.serviceName != NULL)
462                        strm << "Service Name: " << action.serviceName << "<br/>" << endl;
463
464                if(action.topic != NULL)
465                        strm << "Topic: " << action.topic << "<br/>" << endl;
466
467                if(action.item != NULL)
468                        strm << "Item: " << action.item << "<br/>" << endl;
469
470                if(action.pathToProgram != NULL)
471                        strm << "Path: " << action.pathToProgram << "<br/>" << endl;
472
473                if(action.command != NULL)
474                        strm << "Command: " << action.command << "<br/>" << endl;
475        }
476        catch(exception& e)
477        {
478                cout << "EXCEPTION in AlActionDde of '" << this->obj->GetName() << "': " << e.what() << endl;
479        }
480}
481
482// AR_ACTIVE_LINK_ACTION_FIELDP
483void CDocAlActionStruct::ActionPushFields(std::ostream& strm, const ARPushFieldsActionStruct &action, int nAction)
484{
485        try
486        {
487                string pushServer;
488                string pushSchema;
489
490                // target server **************************************
491                strm << "Server Name: ";
492                if (action.pushFieldsList.pushFieldsList[0].field.server[0] == '$' && action.sampleServer[0] != 0)
493                {
494                        int fieldId = atoi(&action.pushFieldsList.pushFieldsList[0].field.server[1]);
495
496                        pushServer = action.sampleServer;
497                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(schemaInsideId, fieldId, rootLevel)) << "$ (Sample Server: " << arIn->LinkToServerInfo(action.sampleServer, rootLevel) << ")";
498
499                        // create field reference
500                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_PUSHFIELD_SERVER);
501                        arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
502                }
503                else
504                {
505                        pushServer = action.pushFieldsList.pushFieldsList[0].field.server;
506                        strm << arIn->LinkToServerInfo(pushServer, rootLevel);
507                }
508                strm << "<br/>" << endl;
509
510                // target form ******************************************
511                strm << "Push Value To: ";             
512                if (action.pushFieldsList.pushFieldsList[0].field.schema[0] == '$' && action.sampleSchema[0] != 0)
513                {
514                        int fieldId = atoi(&action.pushFieldsList.pushFieldsList[0].field.schema[1]);
515
516                        if (action.sampleSchema[0] == '@' && action.sampleSchema[1] == 0)
517                        {
518                                pushSchema = schemaName;
519                        }
520                        else
521                        {
522                                pushSchema = action.sampleSchema;
523                        }
524                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(schemaInsideId, fieldId, rootLevel)) << "$ (Sample Schema: " << arIn->LinkToSchema(pushSchema, rootLevel) << ")";
525
526                        // create field reference
527                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_PUSHFIELD_FORM);
528                        arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
529                }
530                else
531                {
532                        pushSchema = action.pushFieldsList.pushFieldsList[0].field.schema;
533                        strm << arIn->LinkToSchema(pushSchema, rootLevel);
534                }
535                strm << "<br/>" << endl;
536
537                // create schema reference
538                if (!arIn->appConfig.bOverlaySupport || IsVisibleObject(*obj))
539                {
540                        CARSchema targetSchema(pushSchema);
541                        if (targetSchema.Exists())
542                        {
543                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_PUSHFIELD_TARGET);
544                                if (!targetSchema.ReferenceExists(refItem))
545                                        targetSchema.AddReference(refItem);
546                        }
547                }
548
549                // push field if **************************************
550                strm << "<br/>Push Field If<br/>" << endl;
551                stringstream strmTmpQual;
552
553                CRefItem refItem(*this->obj, ifElse, nAction, REFM_PUSHFIELD_IF);
554                CARQualification arQual(*arIn);
555
556                int pFormId = this->arIn->SchemaGetInsideId(schemaName);
557                int sFormId = this->arIn->SchemaGetInsideId(pushSchema);
558
559                arQual.CheckQuery(&action.pushFieldsList.pushFieldsList[0].field.qualifier, refItem, 0, pFormId, sFormId, strmTmpQual, rootLevel);
560
561                if(strmTmpQual.str().length() > 0)
562                {
563                        strm << strmTmpQual.str() << "<br/><br/>" << endl;
564                }
565                else
566                {
567                        strm << EmptyValue << "<br/><br/>" << endl;
568                }
569
570                strm << "If No Requests Match: " << CAREnum::NoMatchRequest(action.pushFieldsList.pushFieldsList[0].field.noMatchOption) << "<br/>" << endl;
571                strm << "If Multiple Requests Match: " << CAREnum::MultiMatchRequest(action.pushFieldsList.pushFieldsList[0].field.multiMatchOption) << "<br/><br/>" << endl;
572
573                // push field mapping *********************************
574                strm << "Field Mapping:";
575                if(action.pushFieldsList.pushFieldsList[0].field.u.fieldId == AR_LIKE_ID)
576                {
577                        strm << " All Matching Ids<br/>";
578                        CDocAllMatchingIdsTable allMatchingFieldsTbl(pushSchema, schemaName, *obj, CDocAllMatchingIdsTable::AMM_PUSHFIELDS, nAction, ifElse, rootLevel);
579                        allMatchingFieldsTbl.ToStream(strm);
580                }
581                else
582                {
583                        strm << "<br/>" << endl;
584                        CARAssignHelper assignHelper(*arIn, rootLevel, *obj, schemaName, pushSchema);
585                        strm << assignHelper.PushFieldsAssignment(action, nAction, ifElse);
586                }
587        }
588        catch(exception& e)
589        {
590                cout << "EXCEPTION in AlActionPushFields of '" << this->obj->GetName() << "': " << e.what() << endl;
591        }
592}
593
594// AR_ACTIVE_LINK_ACTION_SQL
595void CDocAlActionStruct::ActionSql(std::ostream& strm, const ARSQLStruct &action, int nAction)
596{
597        try
598        {               
599                if(action.server != NULL)
600                        strm << "Server: " << arIn->LinkToServerInfo(action.server, rootLevel) << "<br/>" << endl;
601
602                if(action.command != NULL)
603                {                       
604                        CRefItem refItemTmp(*this->obj, ifElse, nAction, REFM_DIRECTSQL);
605                        strm << "SQL command: <br/>" << arIn->TextFindFields(action.command, "$", schemaInsideId, rootLevel, true, &refItemTmp) << endl;
606                }
607        }
608        catch(exception& e)
609        {
610                cout << "EXCEPTION in AlActionSql of '" << this->obj->GetName() << "': " << e.what() << endl;
611        }
612}
613
614// AR_ACTIVE_LINK_ACTION_AUTO
615void CDocAlActionStruct::ActionAutomation(std::ostream& strm, const ARAutomationStruct &action, int nAction)
616{
617        try
618        {
619                if(action.action != NULL)
620                        strm << "Action: " << action.action << "<br/>" << endl;
621
622                if(action.autoServerName != NULL)
623                        strm << "Server Name: " << action.autoServerName << "<br/>" << endl;
624
625                if(action.clsId != NULL)
626                        strm << "CLS Id: " << action.clsId << "<br/>" << endl;
627
628                if(action.methodList.methodList != NULL)
629                {
630                        CTable tblOleMethods("tblOleMethods", "TblObjectList");
631                        tblOleMethods.AddColumn(30, "Id");     
632                        tblOleMethods.AddColumn(30, "Name");
633
634                        for(unsigned int nCnt = 0; nCnt < action.methodList.numItems; nCnt++)
635                        {
636                                string mId, mName, mValue;
637
638
639                                if(action.methodList.methodList[nCnt].methodIId != NULL)
640                                        mId = action.methodList.methodList[nCnt].methodIId;
641
642                                if(action.methodList.methodList[nCnt].methodName != NULL)
643                                        mName = action.methodList.methodList[nCnt].methodName;
644
645
646                                CTableRow mRow("cssStdRow");
647                                mRow.AddCell( CTableCell(mId) );
648                                mRow.AddCell( CTableCell(mName) );
649                                tblOleMethods.AddRow(mRow);     
650                        }       
651                        strm << tblOleMethods;
652                }
653        }
654        catch(exception& e)
655        {
656                cout << "EXCEPTION in AlActionAutomation of '" << this->obj->GetName() << "': " << e.what() << endl;
657        }
658}
659
660
661bool CDocAlActionStruct::ActionOpenDlgQualifier(int nWindowType)
662{
663        switch(nWindowType)
664        {
665        case AR_ACTIVE_LINK_ACTION_OPEN_MODIFY_DETAIL:
666        case AR_ACTIVE_LINK_ACTION_OPEN_MODIFY:
667        case AR_ACTIVE_LINK_ACTION_OPEN_MODIFY_LST:
668        case AR_ACTIVE_LINK_ACTION_OPEN_MODIFY_SPLIT:
669        case AR_ACTIVE_LINK_ACTION_OPEN_DSPLY_LST:
670        case AR_ACTIVE_LINK_ACTION_OPEN_REPORT:
671        case AR_ACTIVE_LINK_ACTION_OPEN_DSPLY_DETAIL:
672        case AR_ACTIVE_LINK_ACTION_OPEN_DSPLY_SPLIT:
673        case AR_ACTIVE_LINK_ACTION_OPEN_DSPLY:
674#if AR_CURRENT_API_VERSION >= AR_API_VERSION_763
675        case AR_ACTIVE_LINK_ACTION_OPEN_MODIFY_DIRECT:
676        case AR_ACTIVE_LINK_ACTION_OPEN_MODIFY_DIRECT_LST:
677        case AR_ACTIVE_LINK_ACTION_OPEN_MODIFY_DIRECT_DETAIL:
678        case AR_ACTIVE_LINK_ACTION_OPEN_MODIFY_DIRECT_SPLIT:
679        case AR_ACTIVE_LINK_ACTION_OPEN_DISPLAY_DIRECT:
680        case AR_ACTIVE_LINK_ACTION_OPEN_DISPLAY_DIRECT_LST:
681        case AR_ACTIVE_LINK_ACTION_OPEN_DISPLAY_DIRECT_DETAIL:
682        case AR_ACTIVE_LINK_ACTION_OPEN_DISPLAY_DIRECT_SPLIT:
683#endif
684                return true;
685        default: return false;
686        }
687}
688
689bool CDocAlActionStruct::ActionOpenDlgTargetLocation(int nWindowType)
690{
691        switch (nWindowType)
692        {
693        case AR_ACTIVE_LINK_ACTION_OPEN_SEARCH:
694        case AR_ACTIVE_LINK_ACTION_OPEN_SUBMIT:
695        case AR_ACTIVE_LINK_ACTION_OPEN_MODIFY:
696        case AR_ACTIVE_LINK_ACTION_OPEN_REPORT:
697#if AR_CURRENT_API_VERSION >= AR_API_VERSION_763
698        case AR_ACTIVE_LINK_ACTION_OPEN_MODIFY_DIRECT: 
699        case AR_ACTIVE_LINK_ACTION_OPEN_DISPLAY_DIRECT:
700#endif
701                return true;
702        default: return false;
703        }
704}
705
706bool CDocAlActionStruct::ActionOpenDlgCloseButton(int nWindowType)
707{
708        switch (nWindowType)
709        {
710        case AR_ACTIVE_LINK_ACTION_OPEN_DLG:
711#if AR_CURRENT_API_VERSION >= AR_API_VERSION_764
712        case AR_ACTIVE_LINK_ACTION_OPEN_POPUP:
713#endif
714                return true;
715        default: return false;
716        }
717}
718
719bool CDocAlActionStruct::ActionOpenDlgSuppressEmptyList(int nWindowType)
720{
721        switch (nWindowType)
722        {
723        case AR_ACTIVE_LINK_ACTION_OPEN_MODIFY:
724        case AR_ACTIVE_LINK_ACTION_OPEN_DSPLY:
725#if AR_CURRENT_API_VERSION >= AR_API_VERSION_763
726        case AR_ACTIVE_LINK_ACTION_OPEN_MODIFY_DIRECT:
727        case AR_ACTIVE_LINK_ACTION_OPEN_DISPLAY_DIRECT:
728#endif
729                return true;
730        default: return false;
731                       
732        }
733}
734
735bool CDocAlActionStruct::ActionOpenDlgInputMapping(int nWindowType)
736{
737        switch (nWindowType)
738        {
739        case AR_ACTIVE_LINK_ACTION_OPEN_DLG:
740        case AR_ACTIVE_LINK_ACTION_OPEN_SEARCH:
741        case AR_ACTIVE_LINK_ACTION_OPEN_SUBMIT:
742#if AR_CURRENT_API_VERSION >= AR_API_VERSION_764
743        case AR_ACTIVE_LINK_ACTION_OPEN_POPUP:
744#endif
745                return true;
746        default: return false;
747        }
748}
749
750bool CDocAlActionStruct::ActionOpenDlgOutputMapping(int nWindowType)
751{
752        switch (nWindowType)
753        {
754        case AR_ACTIVE_LINK_ACTION_OPEN_DLG:
755#if AR_CURRENT_API_VERSION >= AR_API_VERSION_764
756        case AR_ACTIVE_LINK_ACTION_OPEN_POPUP:
757#endif
758                return true;
759        default: return false;
760        }
761}
762
763bool CDocAlActionStruct::ActionOpenDlgPoolingInterval(int nWindowType)
764{
765        switch (nWindowType)
766        {
767        case AR_ACTIVE_LINK_ACTION_OPEN_DSPLY:
768        case AR_ACTIVE_LINK_ACTION_OPEN_MODIFY:
769#if AR_CURRENT_API_VERSION >= AR_API_VERSION_763
770        case AR_ACTIVE_LINK_ACTION_OPEN_DISPLAY_DIRECT:
771        case AR_ACTIVE_LINK_ACTION_OPEN_MODIFY_DIRECT:
772#endif
773                return true;
774        default: return false;
775        }
776}
777
778bool CDocAlActionStruct::ActionOpenDlgMessage(int nWindowType)
779{
780        switch (nWindowType)
781        {
782        case AR_ACTIVE_LINK_ACTION_OPEN_DSPLY:
783        case AR_ACTIVE_LINK_ACTION_OPEN_MODIFY:
784#if AR_CURRENT_API_VERSION >= AR_API_VERSION_763
785        case AR_ACTIVE_LINK_ACTION_OPEN_DISPLAY_DIRECT:
786        case AR_ACTIVE_LINK_ACTION_OPEN_MODIFY_DIRECT:
787#endif
788        case AR_ACTIVE_LINK_ACTION_OPEN_REPORT:
789                return true;
790        default: return false;
791        }
792}
793
794// AR_ACTIVE_LINK_ACTION_OPENDLG
795void CDocAlActionStruct::ActionOpenDlg(std::ostream& strm, const AROpenDlgStruct &action, int nAction)
796{
797        try
798        {
799                string openWindowServer;
800                string openWindowSchema;
801
802                // check if we need to get the sample data
803                if(action.serverName[0] == '$')
804                {
805                        CDocActionOpenWindowHelper::GetSampleData(*obj, ifElse, nAction, openWindowServer, openWindowSchema);
806                }
807
808                // window type
809                int windowMode = CAREnum::OpenWindowModeMapped(action.windowMode);
810                strm << "<p>Window Type: " << CAREnum::OpenWindowMode(windowMode) << endl;
811
812                // display type
813                if (windowMode == AR_ACTIVE_LINK_ACTION_OPEN_MODIFY || windowMode == AR_ACTIVE_LINK_ACTION_OPEN_DSPLY)
814                {
815                        strm << "<br/>Display Type: " << CAREnum::OpenWindowDisplayType(action.windowMode) << endl;
816                }
817
818                // target location
819                if (ActionOpenDlgTargetLocation(windowMode))
820                {
821                        strm << "<br/>Target Location: ";
822
823                        if (action.targetLocation != NULL) 
824                        {
825                                if (action.targetLocation[0] == '$')
826                                {
827                                        int fieldId = atoi(&action.targetLocation[1]);
828                                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(schemaInsideId, fieldId, rootLevel)) << "$";
829
830                                        if (fieldId > 0)
831                                        {
832                                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_OPENWINDOW_LOCATION);
833                                                arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
834                                        }
835                                }
836                                else
837                                {
838                                        strm << action.targetLocation;
839                                }
840                        }
841                        strm << endl;
842                }
843                strm << "</p>" << endl;
844
845                // ****************************************************
846                // server
847                strm << "<p>Server Name: ";
848                if(action.serverName[0] == '$' && !openWindowServer.empty())
849                {
850                        int fieldId = atoi(&action.serverName[1]);
851                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(schemaInsideId, fieldId, rootLevel)) << "$ (Sample Server: " << arIn->LinkToServerInfo(openWindowServer, rootLevel) << ")";
852
853                        if (fieldId > 0)
854                        {
855                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_OPENWINDOW_SERVER);
856                                arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
857                        }
858                }
859                else
860                {
861                        openWindowServer = action.serverName;
862                        strm << arIn->LinkToServerInfo(openWindowServer, rootLevel);
863                }
864
865                strm << "<br/>Form Name: ";
866                if (action.schemaName[0] == '$')
867                {
868                        int fieldId = atoi(&action.schemaName[1]);
869                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(schemaInsideId, fieldId, rootLevel)) << "$ (Sample Schema: " << arIn->LinkToSchema(openWindowSchema, rootLevel) << ")";
870
871                        if (fieldId > 0)
872                        {
873                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_OPENWINDOW_FORM);
874                                arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
875                        }
876                }
877                else
878                {
879                        openWindowSchema = action.schemaName;
880                        strm << arIn->LinkToSchema(openWindowSchema, rootLevel) << endl;
881                }
882
883                strm << "<br/>View Name: ";
884                if(action.vuiLabel[0] == '$')// == NULL || strcmp(action.vuiLabel, "")==0)
885                {
886                        int fieldId = atoi(&action.vuiLabel[1]);
887                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(schemaInsideId, fieldId, rootLevel)) << "$";
888
889                        if (fieldId > 0)
890                        {
891                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_OPENWINDOW_VIEW);
892                                arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
893                        }
894                }
895                else
896                {
897                        if (action.vuiLabel[0] == 0)
898                        { 
899                                strm << "(Clear)" << endl;
900                        }
901                        else
902                        {
903                                CARSchema rSchema(openWindowSchema);
904                                if (!rSchema.Exists())
905                                {
906                                        strm << "<span class=\"fieldNotFound\">" << action.vuiLabel << "</span>";
907                                }
908                                else
909                                {
910                                        strm << rSchema.LinkToVui(action.vuiLabel, rootLevel); 
911                                }
912                        }
913                }
914                strm << "</p>" << endl;
915
916                // report details here
917                string *entryIDs = NULL;
918                string *queryOverride = NULL;
919                string *reportOperation = NULL;
920                string *charEncoding = NULL;
921                if (windowMode == AR_ACTIVE_LINK_ACTION_OPEN_REPORT)
922                {
923                        string reportType;
924                        string reportLocation;
925                        string reportName;
926                        string reportDestination;
927                        entryIDs = new string();
928                        queryOverride = new string();
929                        reportOperation = new string();
930                        charEncoding = new string();
931
932                        if (!CDocActionOpenWindowHelper::GetReportData(action.reportString, reportType, reportLocation, reportName, reportDestination, *entryIDs, *queryOverride, *reportOperation, *charEncoding))
933                        {
934                                strm << "<p><span class=\"fieldNotFound\">Could not load report informations!</span></p>";
935                        }
936                        else
937                        {
938                                stringstream tmpDesc;
939
940                                strm << "<p>Report Type: ";
941                                if (!reportType.empty() && reportType[0] == '$')
942                                {
943                                        int fieldId = atoi(&reportType.c_str()[1]);
944                                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(schemaInsideId, fieldId, rootLevel)) << "$";
945                                        if (fieldId > 0)
946                                        {
947                                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_OPENWINDOW_REPORTTYPE);
948                                                arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
949                                        }
950                                }
951                                else
952                                {
953                                        strm << reportType;
954                                }
955                                strm <<  "<br/>";
956
957                                int iReportLocation = atoi(reportLocation.c_str());
958                                strm << "Report Location: " << CAREnum::ReportLocation(iReportLocation);
959                               
960                                strm << "<br/>Report Name: ";
961                                if (!reportName.empty() && reportName[0] == '$')
962                                {
963                                        int fieldId = atoi(&reportName.c_str()[1]);
964                                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(schemaInsideId, fieldId, rootLevel)) << "$";
965                                        if (fieldId > 0)
966                                        {
967                                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_OPENWINDOW_REPORTNAME);
968                                                arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
969                                        }
970                                }
971                                else
972                                {
973                                        strm << reportName;
974                                }
975                                strm << "<br/>";
976                               
977                                // to-screen:
978                                // to-print:
979                                // to-file:
980                                strm << "Report Destination: ";
981                                if (!reportDestination.empty() && reportDestination[0] == '$')
982                                {
983                                        int fieldId = atoi(&reportDestination.c_str()[1]);
984                                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(schemaInsideId, fieldId, rootLevel)) << "$";
985                                        if (fieldId > 0)
986                                        {
987                                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_OPENWINDOW_REPORTDESTINATION);
988                                                arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
989                                        }
990                                }
991                                else
992                                {
993                                        // map the string value to the displayed combobox item of dev studio
994                                        strm << reportDestination;
995                                }
996                                strm << "</p>";
997                        }
998                }
999
1000                // qualification
1001                if(ActionOpenDlgQualifier(action.windowMode))
1002                {
1003                        if(action.query.operation != AR_COND_OP_NONE)
1004                        {
1005                                stringstream strmTmpQual;
1006
1007                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_OPENWINDOW_QUALIFICATION);
1008
1009                                strmTmpQual.str("");
1010                                CARQualification arQual(*this->arIn);
1011                                int pFormId = schemaInsideId; // this->arIn->SchemaGetInsideId(schemaName.c_str());
1012                                int sFormId = this->arIn->SchemaGetInsideId(openWindowSchema);
1013                                arQual.CheckQuery(&action.query, refItem, 0, pFormId, sFormId, strmTmpQual, rootLevel);
1014
1015                                strm << "<p>Qualification:<br/>" << endl;
1016                                strm << strmTmpQual.str() << "</p>";
1017                        }       
1018                }
1019
1020                strm << "<p>";
1021                // show close button
1022                if (ActionOpenDlgCloseButton(windowMode))
1023                {
1024                        strm << "<input type=\"checkbox\" name=\"closeWnd\" value=\"closeWndAll\" " << (action.closeBox ? "checked" : "") << ">Show Close Button in Dialog<br/>" << endl;
1025                }
1026
1027                // suppres empty list
1028                if (ActionOpenDlgSuppressEmptyList(windowMode))
1029                {
1030                        strm << "<input type=\"checkbox\" name=\"suprEmptyLst\" value=\"suprEmptyLstVal\" " << (action.suppressEmptyLst ? "checked" : "") << ">Suppress Empty List<br/>" << endl;               
1031                }
1032
1033                // set fields to defaults
1034                bool setToDefault = false;
1035                if (windowMode == AR_ACTIVE_LINK_ACTION_OPEN_SEARCH || windowMode == AR_ACTIVE_LINK_ACTION_OPEN_SUBMIT)
1036                {
1037
1038                        for(unsigned int i= 0; i < action.inputValueFieldPairs.numItems; ++i)
1039                        {
1040                                if (action.inputValueFieldPairs.fieldAssignList[i].fieldId == AR_SET_DEFAULTS_ID)
1041                                {
1042                                        setToDefault = true;
1043                                        break;
1044                                }
1045                        }
1046
1047                        strm << "<input type=\"checkbox\" name=\"setToDefault\" value=\"setToDefaultVal\" " << (setToDefault ? "checked" : "") << ">Set Fields To Defaults<br/>" << endl;               
1048                }
1049
1050                // input mapping
1051                if (ActionOpenDlgInputMapping(windowMode) && !setToDefault)
1052                {
1053                        CARAssignHelper assignHelper(*arIn, rootLevel, *this->obj, openWindowSchema, schemaName);
1054                        //assignHelper.pushFieldFlag = true;
1055                        strm << assignHelper.OpenWindowAssignment(action.inputValueFieldPairs, nAction, ifElse, OWM_OPEN);
1056                }
1057
1058                // output mapping (dialog on close)
1059                if (ActionOpenDlgOutputMapping(windowMode))
1060                {
1061                        strm << "On Dialog Close Action:<br/>";
1062
1063                        CARAssignHelper assignHelper(*arIn, rootLevel, *this->obj, schemaName, openWindowSchema);
1064                        strm << assignHelper.OpenWindowAssignment(action.outputValueFieldPairs, nAction, ifElse, OWM_CLOSE);
1065                }
1066                strm << "</p>";
1067
1068                if (ActionOpenDlgMessage(windowMode))
1069                {
1070                        // message
1071                        strm << "<p>If No Request Match: ";
1072                        if (action.noMatchContinue)
1073                        {
1074                                strm << "Do not show any message";
1075                        }
1076                        else if (action.msg.messageText == NULL || action.msg.messageText[0] == 0)      // dont know, if thats the correct criteria for the default message
1077                        {
1078                                strm << "Show default message";
1079                        }
1080                        else if (action.msg.messageType > 0)
1081                        {
1082                                strm << "Show message<br/>";
1083                                ActionMessage(strm, action.msg, nAction);
1084                        }
1085                        strm << "</p>" << endl;
1086
1087                        // sorting
1088                        if (action.sortOrderList.numItems > 0) 
1089                        {
1090                                CTable tblSortList("sortList", "TblObjectList");
1091                                tblSortList.AddColumn(40, "Field Name");
1092                                tblSortList.AddColumn(15, "Field Id");
1093                                tblSortList.AddColumn(15, "Field Type");
1094                                tblSortList.AddColumn(30, "Sort Order");
1095                               
1096                                char strFieldId[20];                           
1097                                CARSchema rSchema(openWindowSchema);
1098
1099                                for (unsigned int i = 0; i < action.sortOrderList.numItems; ++i)
1100                                {
1101                                        CARField rField(rSchema.GetInsideId(), action.sortOrderList.sortList[i].fieldId);
1102
1103                                        strFieldId[0] = 0;
1104                                        sprintf(strFieldId, "%d", static_cast<int>(action.sortOrderList.sortList[i].fieldId));
1105
1106                                        CTableRow row("cssStdRow");
1107                                        row.AddCell(arIn->LinkToField(openWindowSchema, action.sortOrderList.sortList[i].fieldId, rootLevel));
1108                                        row.AddCell(strFieldId);
1109                                        row.AddCell((rField.Exists() ? CAREnum::DataType(rField.GetDataType()) : "Unknown"));
1110                                        row.AddCell(CAREnum::SchemaSortOrder(action.sortOrderList.sortList[i].sortOrder));
1111                                       
1112                                        tblSortList.AddRow(row);
1113
1114                                        if (rSchema.Exists())
1115                                        {
1116                                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_OPENWINDOW_SORTBY);
1117                                                arIn->AddFieldReference(rSchema.GetInsideId(), action.sortOrderList.sortList[i].fieldId, refItem);
1118                                        }
1119                                }
1120
1121                                strm << "<p>Sort Order" << tblSortList << "</p>";
1122                        }
1123
1124                        // additional report informations
1125                        if (windowMode == AR_ACTIVE_LINK_ACTION_OPEN_REPORT)
1126                        {
1127                                stringstream tmpDesc;
1128
1129                                strm << "<p>EntryIDs: ";
1130                                if (!entryIDs->empty() && entryIDs->operator[](0) == '$')
1131                                {
1132                                        int fieldId = atoi(&entryIDs->c_str()[1]);
1133                                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(schemaInsideId, fieldId, rootLevel)) << "$";
1134                                        if (fieldId > 0)
1135                                        {
1136                                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_OPENWINDOW_ENTRYIDS);
1137                                                arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
1138                                        }
1139                                }
1140                                else
1141                                {
1142                                        strm << *entryIDs;
1143                                }
1144                               
1145                                strm << "<br/>Query Override: ";
1146                                if (!queryOverride->empty() && queryOverride->operator[](0) == '$')
1147                                {
1148                                        int fieldId = atoi(&entryIDs->c_str()[1]);
1149                                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(schemaInsideId, fieldId, rootLevel)) << "$";
1150                                        if (fieldId > 0)
1151                                        {
1152                                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_OPENWINDOW_QUERYOVERRIDE);
1153                                                arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
1154                                        }
1155                                }
1156                                else
1157                                {
1158                                        strm << *queryOverride;
1159                                }
1160                               
1161                                strm << "<br/>Report Operation: ";
1162                                int iReportOperation = atoi(reportOperation->c_str());
1163                                if (iReportOperation == 0) iReportOperation = 2;        // set default to Run
1164                                strm << CAREnum::ReportOperation(iReportOperation);
1165
1166                                strm << "<br/>Character Encoding: ";
1167                                if (!charEncoding->empty() && charEncoding->operator[](0) == '$')
1168                                {
1169                                        int fieldId = atoi(&charEncoding->c_str()[1]);
1170                                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(schemaInsideId, fieldId, rootLevel)) << "$";
1171                                        if (fieldId > 0)
1172                                        {
1173                                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_OPENWINDOW_CHARENC);
1174                                                arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
1175                                        }
1176                                }
1177                                else
1178                                {
1179                                        strm << *charEncoding;
1180                                }
1181                                strm << "</p>" << endl;
1182
1183                                // clean up
1184                                delete entryIDs;
1185                                delete queryOverride;
1186                                delete reportOperation;
1187                                delete charEncoding;
1188                        }
1189
1190                        // polling interval
1191                        if (ActionOpenDlgPoolingInterval(windowMode) && action.pollinginterval > 0)
1192                        {
1193                                strm << "<p>Polling interval: " << action.pollinginterval << "</p>" << endl;
1194                        }
1195                }
1196        }
1197        catch(exception& e)
1198        {
1199                cout << "EXCEPTION in AlActionOpenDlg of '" << this->obj->GetName() << "': " << e.what() << endl;
1200        }
1201}
1202
1203// AR_ACTIVE_LINK_ACTION_COMMITC
1204void CDocAlActionStruct::ActionCommitChanges(std::ostream& strm, const ARCommitChangesStruct &action, int nAction)
1205{
1206        try
1207        {
1208                strm << "Schema: " << arIn->LinkToSchema(action.schemaName, rootLevel) << "<br/>" << endl;
1209                strm << "The Commit Changes action is applicable to regular form, join form or dialog box. ";
1210                strm << "When the Open Window active link action is set to Dialog Window Type Commit Changes pushes predetermined values to fields in the parent form. ";
1211                strm << "The values for these fields are specified in the Open Window active link action when the Field Mapping Mode is set to On Close. ";
1212                strm << "When called within a regular form or join form, this action applies the changes." << endl;             
1213        }
1214        catch(exception& e)
1215        {
1216                cout << "EXCEPTION in AlActionCommitChanges of '" << this->obj->GetName() << "': " << e.what() << endl;
1217        }
1218}
1219
1220// AR_ACTIVE_LINK_ACTION_CLOSEWND
1221void CDocAlActionStruct::ActionCloseWindow(std::ostream& strm, const ARCloseWndStruct &action, int nAction)
1222{
1223        try
1224        {               
1225                if(action.closeAll == TRUE)
1226                        strm << "<input type=\"checkbox\" name=\"closeWnd\" value=\"closeWndAll\" checked>Close All Windows" << endl;
1227                else
1228                        strm << "<input type=\"checkbox\" name=\"closeWnd\" value=\"closeWndAll\">Close All Windows" << endl;
1229        }
1230        catch(exception& e)
1231        {
1232                cout << "EXCEPTION in AlActionCloseWindow of '" << this->obj->GetName() << "': " << e.what() << endl;
1233        }
1234}
1235
1236// AR_ACTIVE_LINK_ACTION_CALLGUIDE
1237void CDocAlActionStruct::ActionCallGuide(std::ostream& strm, const ARCallGuideStruct &action, int nAction)
1238{
1239        try
1240        {
1241                strm << "<p>";
1242                if (action.serverName[0] == '$' /*&& action.sampleServer[0] != 0*/)
1243                {
1244                        int fieldId = atoi(&action.serverName[1]);
1245                        strm << "Server: " << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(this->schemaName, fieldId, rootLevel)) << "$<br/>" << endl;
1246
1247                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_CALLCUIDE_SERVER);
1248                        arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
1249                }
1250                else
1251                {
1252                        strm << "Server : " << arIn->LinkToServerInfo(action.serverName, rootLevel) << "<br/>" << endl;
1253                }
1254
1255                if (action.guideName[0] == '$' /*&& action.sampleGuide[0] != 0*/)
1256                {
1257                        int fieldId = atoi(&action.guideName[1]);
1258                        strm << "Guide: $" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(this->schemaName, fieldId, rootLevel)) << "$<br/>" << endl;
1259
1260                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_CALLGUIDE_NAME);
1261                        arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
1262                }
1263                else
1264                {
1265                        strm << "Guide: " << arIn->LinkToContainer(action.guideName, rootLevel) << "<br/>" << endl;
1266                }
1267                strm << "</p>";
1268
1269                if(action.guideTableId > 0)
1270                {
1271                        strm << "<p class='last'>" << "Table Loop: " << CAREnum::CallGuideMode(action.guideMode) << "<br/>" << endl;
1272                        strm << "Table Field: " <<  arIn->LinkToField(schemaName, action.guideTableId, rootLevel);
1273                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_CALLGUIDE_TABLELOOP);
1274                        arIn->AddFieldReference(schemaInsideId, action.guideTableId, refItem);
1275                        strm << "</p>";
1276                }
1277        }
1278        catch(exception& e)
1279        {
1280                cout << "EXCEPTION in AlActionCallGuide of '" << this->obj->GetName() << "': " << e.what() << endl;
1281        }
1282}
1283
1284// AR_ACTIVE_LINK_ACTION_EXITGUIDE
1285void CDocAlActionStruct::ActionExitGuide(std::ostream& strm, const ARExitGuideStruct &action, int nAction)
1286{
1287        try
1288        {
1289                strm << "<input type=\"checkbox\" name=\"exitGuide\" value=\"exitGuideCloseAll\"";
1290                if(action.closeAll == TRUE)
1291                {
1292                        strm << " checked";
1293                }
1294                strm << ">Close all guides on exit" << endl;
1295        }
1296        catch(exception& e)
1297        {
1298                cout << "EXCEPTION in AlActionExitGuide of '" << this->obj->GetName() << "': " << e.what() << endl;
1299        }
1300}
1301
1302// AR_ACTIVE_LINK_ACTION_GOTOGUIDELABEL
1303void CDocAlActionStruct::ActionGotoGuideLabel(std::ostream& strm, const ARGotoGuideLabelStruct &action, int nAction)
1304{
1305        try
1306        {
1307                strm << "Guide Label: " << (action.label != NULL ? action.label : EmptyValue) << endl; 
1308        }
1309        catch(exception& e)
1310        {
1311                cout << "EXCEPTION in AlActionGuideLabel of '" << this->obj->GetName() << "': " << e.what() << endl;
1312        }
1313}
1314
1315// AR_ACTIVE_LINK_ACTION_WAIT
1316void CDocAlActionStruct::ActionWait(std::ostream& strm, const ARWaitStruct &action, int nAction)
1317{
1318        try
1319        {
1320                strm << "Label for Continue Button: " << (action.continueButtonTitle != NULL ? action.continueButtonTitle : EmptyValue) << endl;
1321        }
1322        catch(exception& e)
1323        {
1324                cout << "EXCEPTION in AlActionWait of '" << this->obj->GetName() << "': " << e.what() << endl;
1325        }
1326}
1327
1328// AR_ACTIVE_LINK_ACTION_GOTOACTION
1329void CDocAlActionStruct::ActionGotoAction(std::ostream& strm, const ARGotoActionStruct &action, int nAction)
1330{
1331        try
1332        {
1333                strm << "FieldId or Value: ";
1334                switch (action.tag)
1335                {
1336                case AR_GOTO_FIELD_XREF:
1337                        {
1338                        // add new reference item to the field
1339                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_GOTO);
1340                        arIn->AddFieldReference(schemaInsideId, action.fieldIdOrValue, refItem);
1341
1342                        // link to field in current page
1343                        strm << arIn->LinkToField(schemaName, action.fieldIdOrValue, rootLevel) << endl;
1344                        break;
1345                        }
1346                case AR_GOTO_ABSOLUTE_ORDER:
1347                        strm << action.fieldIdOrValue;
1348                        break;
1349                case AR_GOTO_OFFSET_FORWARD:
1350                        strm << "+" << action.fieldIdOrValue;
1351                        break;
1352                case AR_GOTO_OFFSET_BACKWARD:
1353                        strm << "-" << action.fieldIdOrValue;
1354                        break;
1355                }
1356        }
1357        catch(exception& e)
1358        {
1359                cout << "EXCEPTION in AlActionGotoAction of '" << this->obj->GetName() << "': " << e.what() << endl;
1360        }
1361}
1362
1363#if AR_CURRENT_API_VERSION >= AR_API_VERSION_710
1364// AR_ACTIVE_LINK_ACTION_SERVICE
1365void CDocAlActionStruct::ActionService(std::ostream& strm, const ARActiveLinkSvcActionStruct &action, int nAction)
1366{
1367        string serviceServer;
1368        string serviceSchema;
1369
1370        try
1371        {
1372                strm << "<p>";
1373                // check for sample data for the server part
1374                if (action.serverName[0] == '$' && action.sampleServer[0] != 0)
1375                {
1376                        int fieldId = atoi(&action.serverName[1]);
1377                        serviceServer = action.sampleServer;                   
1378                        strm << "Server Name: " << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(this->schemaName, fieldId, rootLevel)) << "$ (Sample Server: " << arIn->LinkToServerInfo(action.sampleServer, rootLevel) << ")<br/>" << endl;
1379
1380                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_SERVICE_SERVER);
1381                        arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
1382                }
1383                else
1384                {
1385                        serviceServer = action.serverName;
1386                        strm << "Server Name: " << arIn->LinkToServerInfo(action.serverName, rootLevel) << "<br/>" << endl;
1387                }
1388
1389                if (action.serviceSchema[0] == '$' && action.sampleSchema[0] != 0)
1390                {
1391                        int fieldId = atoi(&action.serviceSchema[1]);
1392
1393                        if (action.sampleSchema[0] == '@' && action.sampleSchema[1] == 0)
1394                        {
1395                                serviceSchema = schemaName;
1396                        }
1397                        else
1398                        {
1399                                serviceSchema = action.sampleSchema;
1400                        }
1401
1402                        strm << "Service Form: " << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(this->schemaName, fieldId, rootLevel)) << "$ (Sample Form: " << arIn->LinkToSchema(serviceSchema, rootLevel) << ")<br/>" << endl;
1403
1404                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_SERVICE_FORM);
1405                        arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
1406                }
1407                else
1408                {
1409                        serviceSchema = action.serviceSchema;
1410                        strm << "Service Form: " << arIn->LinkToSchema(action.serviceSchema, rootLevel) << "<br/>" << endl;
1411                }
1412
1413                // create schema reference
1414                CARSchema schemaToCall(serviceSchema);
1415                if (schemaToCall.Exists() && (!arIn->appConfig.bOverlaySupport || IsVisibleObject(*obj)))
1416                {
1417                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_SERVICE_CALL);
1418                        if (!schemaToCall.ReferenceExists(refItem))
1419                                schemaToCall.AddReference(refItem);
1420                }
1421
1422                strm << "Request Id: ";
1423                if (action.requestIdMap != 0)
1424                {
1425                        strm << arIn->LinkToField(schemaName, action.requestIdMap, rootLevel);
1426                       
1427                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_SERVICE_REQUESTID);
1428                        arIn->AddFieldReference(schemaInsideId, action.requestIdMap, refItem);
1429                }
1430                strm << "</p>" << endl;
1431
1432                // input mapping
1433                strm << "Input Mapping: "; if (action.inputFieldMapping.numItems == 0) strm << "None"; strm << "<br/>" << endl;
1434                if (action.inputFieldMapping.numItems > 0)
1435                {
1436                        CARAssignHelper assignHelper(*arIn, rootLevel, *this->obj, serviceSchema, schemaName);
1437                        strm << assignHelper.ServiceAssignment(action.inputFieldMapping, nAction, ifElse, SMM_INPUT);
1438                }
1439
1440                // output mapping
1441                strm << "Output Mapping: "; if (action.outputFieldMapping.numItems == 0) strm << "None"; strm << "<br/>" << endl;
1442                if (action.outputFieldMapping.numItems > 0)
1443                {
1444                        CARSchema currentSchema(schemaName);
1445
1446                        CARAssignHelper assignHelper(*arIn, rootLevel, *this->obj, currentSchema, schemaToCall);
1447                        strm << assignHelper.ServiceAssignment(action.outputFieldMapping, nAction, ifElse, SMM_OUTPUT);
1448                }
1449        }
1450        catch (...)
1451        {
1452                cout << "EXCEPTION in AlActionService: " << this->obj->GetName() << endl;
1453        }
1454}
1455#endif
Note: See TracBrowser for help on using the repository browser.