source: branches/work_311/doc/DocAlActionStruct.cpp @ 588

Revision 588, 45.7 KB checked in by jls17, 6 years ago (diff)
  • small corrections in call guide documentation
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#include "../output/ImageTag.h"
22#include "../output/ObjNotFound.h"
23#include "../output/URLLink.h"
24
25CDocAlActionStruct::CDocAlActionStruct(CARInside &arIn, CARActiveLink &obj, string schemaName, int rootLevel)
26{
27        this->arIn = &arIn;
28        this->obj = &obj;       
29        this->rootLevel = rootLevel;
30        this->schemaName = schemaName;
31        this->schemaInsideId = this->arIn->SchemaGetInsideId(this->schemaName);
32        this->structItemType = AR_STRUCT_ITEM_XML_ACTIVE_LINK;
33}
34
35CDocAlActionStruct::~CDocAlActionStruct(void)
36{
37}
38
39
40string CDocAlActionStruct::Get(IfElseState ifElse, const ARActiveLinkActionList &actList)
41{
42        stringstream strm;
43        strm.str("");
44
45        try
46        {
47                this->ifElse = ifElse;
48
49                CTable tblListAction("tblListAlAction", "TblObjectList");
50                tblListAction.AddColumn(5, "Position"); 
51                tblListAction.AddColumn(15, "Action Type");
52                tblListAction.AddColumn(80, "Description");
53
54                for(unsigned int nAction = 0; nAction < actList.numItems; nAction++)
55                {
56                        ARActiveLinkActionStruct action = actList.actionList[nAction];
57
58                        CTableRow row("cssStdRow");             
59                        row.AddCell(CTableCell(nAction));                               
60
61                        CPageParams file(PAGE_ACTION_OBJLIST, AR_STRUCT_ITEM_XML_ACTIVE_LINK, action.action);
62                        row.AddCell(CTableCell(URLLink(CAREnum::ActiveLinkAction(action.action), file, rootLevel)));                   
63
64                        stringstream actionDesc;
65                        actionDesc.str("");
66
67                        switch(action.action)
68                        {
69                        case AR_ACTIVE_LINK_ACTION_NONE:
70                                {
71                                        actionDesc << ActionNone(nAction);
72                                }
73                                break;
74                        case AR_ACTIVE_LINK_ACTION_MACRO:
75                                {
76                                        ActionMacro(actionDesc, action.u.macro, nAction);                                       
77                                }
78                                break;
79                        case AR_ACTIVE_LINK_ACTION_FIELDP:
80                                {                                       
81                                        ActionPushFields(actionDesc, action.u.pushFields, nAction);                                     
82                                }
83                                break;
84                        case AR_ACTIVE_LINK_ACTION_FIELDS:
85                                {
86                                        ActionSetFields(actionDesc, action.u.setFields, nAction);       
87                                }
88                                break;
89                        case AR_ACTIVE_LINK_ACTION_PROCESS:
90                                {
91                                        ActionProcess(actionDesc, action.u.process, nAction);   
92                                }
93                                break;
94                        case AR_ACTIVE_LINK_ACTION_MESSAGE:
95                                {
96                                        ActionMessage(actionDesc, action.u.message, nAction);                                   
97                                }
98                                break;
99                        case AR_ACTIVE_LINK_ACTION_SET_CHAR:
100                                {
101                                        ActionSetChar(actionDesc, action.u.characteristics, nAction);
102                                }
103                                break;
104                        case AR_ACTIVE_LINK_ACTION_DDE:
105                                {
106                                        ActionDde(actionDesc, action.u.dde, nAction);
107                                }
108                                break;                         
109                        case AR_ACTIVE_LINK_ACTION_SQL:
110                                {
111                                        ActionSql(actionDesc, action.u.sqlCommand, nAction);
112                                }
113                                break;
114                        case AR_ACTIVE_LINK_ACTION_AUTO:
115                                {
116                                        ActionAutomation(actionDesc, action.u.automation, nAction);
117                                }
118                                break;
119                        case AR_ACTIVE_LINK_ACTION_OPENDLG:
120                                {
121                                        ActionOpenDlg(actionDesc, action.u.openDlg, nAction);
122                                }
123                                break;
124                        case AR_ACTIVE_LINK_ACTION_COMMITC:
125                                {
126                                        ActionCommitChanges(actionDesc, action.u.commitChanges, nAction);
127                                }
128                                break;
129                        case AR_ACTIVE_LINK_ACTION_CLOSEWND:
130                                {
131                                        ActionCloseWindow(actionDesc, action.u.closeWnd, nAction);             
132                                }
133                                break;
134                        case AR_ACTIVE_LINK_ACTION_CALLGUIDE:
135                                {
136                                        ActionCallGuide(actionDesc, action.u.callGuide, nAction);
137                                }
138                                break;
139                        case AR_ACTIVE_LINK_ACTION_EXITGUIDE:
140                                {
141                                        ActionExitGuide(actionDesc, action.u.exitGuide, nAction);
142                                }
143                                break;
144                        case AR_ACTIVE_LINK_ACTION_GOTOGUIDELABEL:
145                                {
146                                        ActionGotoGuideLabel(actionDesc, action.u.gotoGuide, nAction);
147                                }
148                                break;
149                        case AR_ACTIVE_LINK_ACTION_WAIT:
150                                {
151                                        ActionWait(actionDesc, action.u.waitAction, nAction);
152                                }
153                                break;
154                        case AR_ACTIVE_LINK_ACTION_GOTOACTION:
155                                {                                       
156                                        ActionGotoAction(actionDesc, action.u.gotoAction, nAction);                             
157                                }
158                                break;
159#if AR_CURRENT_API_VERSION > 12 // Version 7.1 and higher
160                        case AR_ACTIVE_LINK_ACTION_SERVICE:
161                                {
162                                        ActionService(actionDesc, action.u.service, nAction);
163                                }
164                                break;
165#endif
166                        default:
167                                {
168                                        actionDesc.str("");                             
169                                }
170                                break;
171                        }
172
173                        row.AddCell(CTableCell(actionDesc.str()));
174                        tblListAction.AddRow(row);     
175                }
176
177                stringstream tblDesc;
178                tblDesc.str("");
179                tblDesc << ImageTag(ImageTag::Document, rootLevel) << IfElse(ifElse) << "-Actions";
180                tblListAction.description = tblDesc.str();
181
182                strm << tblListAction;
183        }
184        catch(exception& e)
185        {
186                cout << "EXCEPTION in CDocAlActionStruct of '" << this->obj->GetName() << "': " << e.what() << endl;
187        }
188
189        return strm.str();
190}
191
192// AR_ACTIVE_LINK_ACTION_NONE
193string CDocAlActionStruct::ActionNone(int nAction)
194{
195        return "None";
196}
197
198// AR_ACTIVE_LINK_ACTION_MACRO
199void CDocAlActionStruct::ActionMacro(std::ostream& strm, const ARActiveLinkMacroStruct &action, int nAction)
200{
201        try
202        {
203                if(action.macroName != NULL)
204                {
205                        if(action.macroName != NULL)
206                        {
207                                strm << "Macro Name: " << action.macroName << "<br/>" << endl;
208                        }
209                        else
210                        {
211                                strm << "Macro Name: <Unknown><br/>" << endl;
212                        }
213                }
214
215                if(action.macroParms.parms != NULL)
216                {
217                        CTable tblMacro("tblMacroParameter", "TblObjectList");
218                        tblMacro.AddColumn(50, "Parameter Name");       
219                        tblMacro.AddColumn(50, "Value");
220
221                        for(unsigned int nCnt = 0; nCnt < action.macroParms.numItems; nCnt++)
222                        {
223                                if(action.macroParms.parms[nCnt].name != NULL
224                                        && action.macroParms.parms[nCnt].value != NULL)
225                                {
226                                        const char* pName = action.macroParms.parms[nCnt].name;
227                                        const char* pValue = action.macroParms.parms[nCnt].value;
228
229                                        // create reference item description
230                                        CRefItem refItemTmp(*this->obj, ifElse, nAction, REFM_MACRO);
231
232                                        // find field references
233                                        string parameterValue = arIn->TextFindFields(pValue, "$", schemaInsideId, rootLevel, true, &refItemTmp);
234
235                                        // add the al action row
236                                        CTableRow mRow("cssStdRow");           
237                                        mRow.AddCell(CTableCell(pName));
238                                        mRow.AddCell(CTableCell(parameterValue));
239                                        tblMacro.AddRow(mRow); 
240                                }
241                        }
242                        strm << tblMacro;
243                        strm << "<br/>Macro Text: <br/>" << action.macroText << endl;
244                }
245        }
246        catch(exception& e)
247        {
248                cout << "EXCEPTION in AlActionMacro of '" << this->obj->GetName() << "': " << e.what() << endl;
249        }
250}
251
252// AR_ACTIVE_LINK_ACTION_FIELDS
253void CDocAlActionStruct::ActionSetFields(std::ostream& strm, const ARSetFieldsActionStruct &action, int nAction)
254{
255        try
256        {
257                CDocActionSetFieldsHelper setFieldHelper(*arIn, *obj, schemaName, action, structItemType, ifElse, nAction, rootLevel);
258                setFieldHelper.ShowActionWithServerName(true);
259                setFieldHelper.ToStream(strm);
260        }
261        catch(exception& e)
262        {
263                cout << "EXCEPTION in AlActionSetFields of '" << this->obj->GetName() << "': " << e.what() << endl;
264        }
265}
266
267// AR_ACTIVE_LINK_ACTION_PROCESS
268void CDocAlActionStruct::ActionProcess(std::ostream& strm, const char *action, int nAction)
269{
270        try
271        {
272                if(action != NULL)
273                {
274                        CRefItem refItemTmp(*this->obj, ifElse, nAction, REFM_RUN_PROCESS);
275                        strm << arIn->TextFindFields(action, "$", schemaInsideId, rootLevel, true, &refItemTmp) << endl;
276                }
277                else
278                {
279                        strm << "No Run Process command specified." << endl;
280                }
281        }
282        catch(exception& e)
283        {
284                cout << "EXCEPTION in AlActionProcess of '" << this->obj->GetName() << "': " << e.what() << endl;
285        }
286}
287
288// AR_ACTIVE_LINK_ACTION_MESSAGE
289void CDocAlActionStruct::ActionMessage(std::ostream& strm, const ARMessageStruct &action, int nAction)
290{
291        try
292        {
293                strm << "Message Number: " << action.messageNum << "<br/>" << endl;
294                strm << "Message Type: " << CAREnum::MessageType(action.messageType) << "<br/>" << endl;
295
296                if(action.messageText != NULL)
297                {
298                        CRefItem refItemTmp(*this->obj, ifElse, nAction, REFM_MESSAGE);
299                        strm << "Message Text:<br/>" << arIn->TextFindFields(action.messageText, "$", this->schemaInsideId, rootLevel, true, &refItemTmp) << "<br/>" << endl;
300                }
301
302#if AR_CURRENT_API_VERSION >= AR_API_VERSION_763
303                if (this->arIn->CompareServerVersion(7,6) >= 0 || (this->arIn->appConfig.fileMode == true && this->arIn->CompareServerVersion(7,5) >= 0))
304                {
305                        strm << "<input type=\"checkbox\" name=\"showInPromptPane\" value=\"showInPromptPane\"" << (action.usePromptingPane ? " checked" : "") << ">Show Message in Prompt Bar" << "<br/>" << endl;
306                }
307#endif
308        }
309        catch(exception& e)
310        {
311                cout << "EXCEPTION in AlActionMessage of '" << this->obj->GetName() << "': " << e.what() << endl;
312        }
313}
314
315// AR_ACTIVE_LINK_ACTION_SET_CHAR
316void CDocAlActionStruct::ActionSetChar(std::ostream& strm, const ARFieldCharacteristics &action, int nAction)
317{
318        try
319        {
320                //FieldName
321                strm << "Field ";
322                if (action.option == AR_FIELD_CHAR_OPTION_REFERENCE)
323                {
324                        strm << "(Use Value Of): $" << arIn->LinkToField(schemaInsideId, action.fieldId, rootLevel) << "$<br/>" << endl;
325                }
326                else
327                {
328                        strm << "Name: " << arIn->LinkToField(schemaInsideId, action.fieldId, rootLevel) << "<br/>" << endl;
329                }
330
331                //Access Option
332                strm << "Field Access: " << CAREnum::SetCharFieldAccess(action.accessOption) << "<br/>" << endl;                                       
333
334
335                //Font
336                bool fontPropFound = false;
337                for(unsigned int i=0; i< action.props.numItems; i++)
338                {       
339                        if(action.props.props[i].prop == AR_DPROP_LABEL_FONT_STYLE && action.props.props[i].value.dataType == AR_DATA_TYPE_CHAR)
340                        {
341                                strm << "Field Font: " << action.props.props[i].value.u.charVal << "<br/>" << endl;
342                                fontPropFound = true;
343                                break;
344                        }
345                }
346                if (!fontPropFound)
347                        strm << "Field Font: Unchanged<br/>" << endl;
348
349
350                //Visibility
351                bool visibilityPropFound = false;
352                for(unsigned int i=0; i< action.props.numItems; i++)
353                {       
354                        if(action.props.props[i].prop == AR_DPROP_VISIBLE && 
355                                action.props.props[i].value.dataType == AR_DATA_TYPE_ENUM || action.props.props[i].value.dataType == AR_DATA_TYPE_INTEGER)
356                        {
357                                strm << "Visibility: " << CAREnum::SetCharFieldVisibility(action.props.props[i].value.u.intVal) << "<br/>" << endl;
358                                visibilityPropFound = true;
359                                break;
360                        }
361                }
362                if(!visibilityPropFound)
363                        strm << "Visibility: Unchanged<br/>" << endl;
364
365
366
367                //CharMenu
368                if(action.charMenu != NULL)
369                {
370                        if(strcmp(action.charMenu, "") != 0)
371                        {
372                                strm << "Menu: " << CWebUtil::LinkToMenu(action.charMenu, rootLevel) << "<br/>" << endl;
373                        }
374                }
375
376                //Set focus to field
377                if(action.focus == AR_FOCUS_SET_TO_FIELD)
378                {
379                        strm << "<input type=\"checkbox\" name=\"fieldSetFocus\" value=\"fieldSetFocus\" checked>Set Focus to Field" << "<br/>" << endl;
380                }       
381
382
383                for(unsigned int i=0; i< action.props.numItems; i++)
384                {       
385                        switch(action.props.props[i].prop)
386                        {
387                        case AR_DPROP_LABEL_COLOR_TEXT:
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                        if (fieldId == - AR_KEYWORD_SCHEMA)     pushSchema = schemaName;
531                }
532                else
533                {
534                        pushSchema = action.pushFieldsList.pushFieldsList[0].field.schema;
535                        strm << arIn->LinkToSchema(pushSchema, rootLevel);
536                }
537                strm << "<br/>" << endl;
538
539                // create schema reference
540                if (!arIn->appConfig.bOverlaySupport || IsVisibleObject(*obj))
541                {
542                        CARSchema targetSchema(pushSchema);
543                        if (targetSchema.Exists())
544                        {
545                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_PUSHFIELD_TARGET);
546                                if (!targetSchema.ReferenceExists(refItem))
547                                        targetSchema.AddReference(refItem);
548                        }
549                }
550
551                // push field if **************************************
552                strm << "<br/>Push Field If<br/>" << endl;
553
554                int pFormId = this->arIn->SchemaGetInsideId(schemaName);
555                int sFormId = this->arIn->SchemaGetInsideId(pushSchema);
556
557                stringstream strmTmpQual;
558                CRefItem refItem(*this->obj, ifElse, nAction, REFM_PUSHFIELD_IF);
559                CARQualification arQual(*arIn, refItem, pFormId, sFormId, rootLevel);
560
561                arQual.CheckQuery(&action.pushFieldsList.pushFieldsList[0].field.qualifier, strmTmpQual);
562
563                if(strmTmpQual.str().length() > 0)
564                {
565                        strm << strmTmpQual.str() << "<br/><br/>" << endl;
566                }
567                else
568                {
569                        strm << EmptyValue << "<br/><br/>" << endl;
570                }
571
572                strm << "If No Requests Match: " << CAREnum::NoMatchRequest(action.pushFieldsList.pushFieldsList[0].field.noMatchOption) << "<br/>" << endl;
573                strm << "If Multiple Requests Match: " << CAREnum::MultiMatchRequest(action.pushFieldsList.pushFieldsList[0].field.multiMatchOption) << "<br/><br/>" << endl;
574
575                // push field mapping *********************************
576                strm << "Field Mapping:";
577                if(action.pushFieldsList.pushFieldsList[0].field.u.fieldId == AR_LIKE_ID)
578                {
579                        strm << " All Matching Ids<br/>";
580                        CDocAllMatchingIdsTable allMatchingFieldsTbl(pushSchema, schemaName, *obj, CDocAllMatchingIdsTable::AMM_PUSHFIELDS, nAction, ifElse, rootLevel);
581                        allMatchingFieldsTbl.ToStream(strm);
582                }
583                else
584                {
585                        strm << "<br/>" << endl;
586                        CARAssignHelper assignHelper(*arIn, rootLevel, *obj, schemaName, pushSchema);
587                        strm << assignHelper.PushFieldsAssignment(action, nAction, ifElse);
588                }
589        }
590        catch(exception& e)
591        {
592                cout << "EXCEPTION in AlActionPushFields of '" << this->obj->GetName() << "': " << e.what() << endl;
593        }
594}
595
596// AR_ACTIVE_LINK_ACTION_SQL
597void CDocAlActionStruct::ActionSql(std::ostream& strm, const ARSQLStruct &action, int nAction)
598{
599        try
600        {               
601                if(action.server != NULL)
602                        strm << "Server: " << arIn->LinkToServerInfo(action.server, rootLevel) << "<br/>" << endl;
603
604                if(action.command != NULL)
605                {                       
606                        CRefItem refItemTmp(*this->obj, ifElse, nAction, REFM_DIRECTSQL);
607                        strm << "SQL command: <br/>" << arIn->TextFindFields(action.command, "$", schemaInsideId, rootLevel, true, &refItemTmp) << endl;
608                }
609        }
610        catch(exception& e)
611        {
612                cout << "EXCEPTION in AlActionSql of '" << this->obj->GetName() << "': " << e.what() << endl;
613        }
614}
615
616// AR_ACTIVE_LINK_ACTION_AUTO
617void CDocAlActionStruct::ActionAutomation(std::ostream& strm, const ARAutomationStruct &action, int nAction)
618{
619        try
620        {
621                if(action.action != NULL)
622                        strm << "Action: " << action.action << "<br/>" << endl;
623
624                if(action.autoServerName != NULL)
625                        strm << "Server Name: " << action.autoServerName << "<br/>" << endl;
626
627                if(action.clsId != NULL)
628                        strm << "CLS Id: " << action.clsId << "<br/>" << endl;
629
630                if(action.methodList.methodList != NULL)
631                {
632                        CTable tblOleMethods("tblOleMethods", "TblObjectList");
633                        tblOleMethods.AddColumn(30, "Id");     
634                        tblOleMethods.AddColumn(30, "Name");
635
636                        for(unsigned int nCnt = 0; nCnt < action.methodList.numItems; nCnt++)
637                        {
638                                string mId, mName;
639
640                                if(action.methodList.methodList[nCnt].methodIId != NULL)
641                                        mId = action.methodList.methodList[nCnt].methodIId;
642
643                                if(action.methodList.methodList[nCnt].methodName != NULL)
644                                        mName = action.methodList.methodList[nCnt].methodName;
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                                        ObjNotFound notFound(strm);
907                                        notFound << action.vuiLabel;
908                                        notFound.End();
909                                }
910                                else
911                                {
912                                        CARVui vui(rSchema.GetInsideId(), action.vuiLabel);
913                                        if (vui.Exists())
914                                                strm << URLLink(vui, rootLevel);
915                                        else
916                                        {
917                                                ObjNotFound notFound(strm);
918                                                notFound << action.vuiLabel;
919                                                notFound.End();
920                                        }
921                                }
922                        }
923                }
924                strm << "</p>" << endl;
925
926                // report details here
927                string *entryIDs = NULL;
928                string *queryOverride = NULL;
929                string *reportOperation = NULL;
930                string *charEncoding = NULL;
931                if (windowMode == AR_ACTIVE_LINK_ACTION_OPEN_REPORT)
932                {
933                        string reportType;
934                        string reportLocation;
935                        string reportName;
936                        string reportDestination;
937                        entryIDs = new string();
938                        queryOverride = new string();
939                        reportOperation = new string();
940                        charEncoding = new string();
941
942                        if (!CDocActionOpenWindowHelper::GetReportData(action.reportString, reportType, reportLocation, reportName, reportDestination, *entryIDs, *queryOverride, *reportOperation, *charEncoding))
943                        {
944                                strm << "<p>";
945                                ObjNotFound notFound(strm);
946                                notFound << "Could not load report informations!";
947                                notFound.End();
948                                strm << "</p>";
949                        }
950                        else
951                        {
952                                strm << "<p>Report Type: ";
953                                if (!reportType.empty() && reportType[0] == '$')
954                                {
955                                        int fieldId = atoi(&reportType.c_str()[1]);
956                                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(schemaInsideId, fieldId, rootLevel)) << "$";
957                                        if (fieldId > 0)
958                                        {
959                                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_OPENWINDOW_REPORTTYPE);
960                                                arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
961                                        }
962                                }
963                                else
964                                {
965                                        strm << reportType;
966                                }
967                                strm <<  "<br/>";
968
969                                int iReportLocation = atoi(reportLocation.c_str());
970                                strm << "Report Location: " << CAREnum::ReportLocation(iReportLocation);
971                               
972                                strm << "<br/>Report Name: ";
973                                if (!reportName.empty() && reportName[0] == '$')
974                                {
975                                        int fieldId = atoi(&reportName.c_str()[1]);
976                                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(schemaInsideId, fieldId, rootLevel)) << "$";
977                                        if (fieldId > 0)
978                                        {
979                                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_OPENWINDOW_REPORTNAME);
980                                                arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
981                                        }
982                                }
983                                else
984                                {
985                                        strm << reportName;
986                                }
987                                strm << "<br/>";
988                               
989                                // to-screen:
990                                // to-print:
991                                // to-file:
992                                strm << "Report Destination: ";
993                                if (!reportDestination.empty() && reportDestination[0] == '$')
994                                {
995                                        int fieldId = atoi(&reportDestination.c_str()[1]);
996                                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(schemaInsideId, fieldId, rootLevel)) << "$";
997                                        if (fieldId > 0)
998                                        {
999                                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_OPENWINDOW_REPORTDESTINATION);
1000                                                arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
1001                                        }
1002                                }
1003                                else
1004                                {
1005                                        // map the string value to the displayed combobox item of dev studio
1006                                        strm << reportDestination;
1007                                }
1008                                strm << "</p>";
1009                        }
1010                }
1011
1012                // qualification
1013                if(ActionOpenDlgQualifier(action.windowMode))
1014                {
1015                        if(action.query.operation != AR_COND_OP_NONE)
1016                        {
1017                                stringstream strmTmpQual;
1018
1019                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_OPENWINDOW_QUALIFICATION);
1020                                int pFormId = schemaInsideId; // this->arIn->SchemaGetInsideId(schemaName.c_str());
1021                                int sFormId = this->arIn->SchemaGetInsideId(openWindowSchema);
1022
1023                                strmTmpQual.str("");
1024                                CARQualification arQual(*this->arIn, refItem, pFormId, sFormId, rootLevel);
1025                                arQual.CheckQuery(&action.query, strmTmpQual);
1026
1027                                strm << "<p>Qualification:<br/>" << endl;
1028                                strm << strmTmpQual.str() << "</p>";
1029                        }       
1030                }
1031
1032                strm << "<p>";
1033                // show close button
1034                if (ActionOpenDlgCloseButton(windowMode))
1035                {
1036                        strm << "<input type=\"checkbox\" name=\"closeWnd\" value=\"closeWndAll\" " << (action.closeBox ? "checked" : "") << ">Show Close Button in Dialog<br/>" << endl;
1037                }
1038
1039                // suppres empty list
1040                if (ActionOpenDlgSuppressEmptyList(windowMode))
1041                {
1042                        strm << "<input type=\"checkbox\" name=\"suprEmptyLst\" value=\"suprEmptyLstVal\" " << (action.suppressEmptyLst ? "checked" : "") << ">Suppress Empty List<br/>" << endl;               
1043                }
1044
1045                // set fields to defaults
1046                bool setToDefault = false;
1047                if (windowMode == AR_ACTIVE_LINK_ACTION_OPEN_SEARCH || windowMode == AR_ACTIVE_LINK_ACTION_OPEN_SUBMIT)
1048                {
1049
1050                        for(unsigned int i= 0; i < action.inputValueFieldPairs.numItems; ++i)
1051                        {
1052                                if (action.inputValueFieldPairs.fieldAssignList[i].fieldId == AR_SET_DEFAULTS_ID)
1053                                {
1054                                        setToDefault = true;
1055                                        break;
1056                                }
1057                        }
1058
1059                        strm << "<input type=\"checkbox\" name=\"setToDefault\" value=\"setToDefaultVal\" " << (setToDefault ? "checked" : "") << ">Set Fields To Defaults<br/>" << endl;               
1060                }
1061
1062                // input mapping
1063                if (ActionOpenDlgInputMapping(windowMode) && !setToDefault)
1064                {
1065                        CARAssignHelper assignHelper(*arIn, rootLevel, *this->obj, openWindowSchema, schemaName);
1066                        //assignHelper.pushFieldFlag = true;
1067                        strm << assignHelper.OpenWindowAssignment(action.inputValueFieldPairs, nAction, ifElse, OWM_OPEN);
1068                }
1069
1070                // output mapping (dialog on close)
1071                if (ActionOpenDlgOutputMapping(windowMode))
1072                {
1073                        strm << "On Dialog Close Action:<br/>";
1074
1075                        CARAssignHelper assignHelper(*arIn, rootLevel, *this->obj, schemaName, openWindowSchema);
1076                        strm << assignHelper.OpenWindowAssignment(action.outputValueFieldPairs, nAction, ifElse, OWM_CLOSE);
1077                }
1078                strm << "</p>";
1079
1080                if (ActionOpenDlgMessage(windowMode))
1081                {
1082                        // message
1083                        strm << "<p>If No Request Match: ";
1084                        if (action.noMatchContinue)
1085                        {
1086                                strm << "Do not show any message";
1087                        }
1088                        else if (action.msg.messageText == NULL || action.msg.messageText[0] == 0)      // dont know, if thats the correct criteria for the default message
1089                        {
1090                                strm << "Show default message";
1091                        }
1092                        else if (action.msg.messageType > 0)
1093                        {
1094                                strm << "Show message<br/>";
1095                                ActionMessage(strm, action.msg, nAction);
1096                        }
1097                        strm << "</p>" << endl;
1098
1099                        // sorting
1100                        if (action.sortOrderList.numItems > 0) 
1101                        {
1102                                CTable tblSortList("sortList", "TblObjectList");
1103                                tblSortList.AddColumn(40, "Field Name");
1104                                tblSortList.AddColumn(15, "Field Id");
1105                                tblSortList.AddColumn(15, "Field Type");
1106                                tblSortList.AddColumn(30, "Sort Order");
1107                               
1108                                char strFieldId[20];                           
1109                                CARSchema rSchema(openWindowSchema);
1110
1111                                for (unsigned int i = 0; i < action.sortOrderList.numItems; ++i)
1112                                {
1113                                        CARField rField(rSchema.GetInsideId(), action.sortOrderList.sortList[i].fieldId);
1114
1115                                        strFieldId[0] = 0;
1116                                        sprintf(strFieldId, "%d", static_cast<int>(action.sortOrderList.sortList[i].fieldId));
1117
1118                                        CTableRow row("cssStdRow");
1119                                        row.AddCell(arIn->LinkToField(openWindowSchema, action.sortOrderList.sortList[i].fieldId, rootLevel));
1120                                        row.AddCell(strFieldId);
1121                                        row.AddCell((rField.Exists() ? CAREnum::DataType(rField.GetDataType()) : "Unknown"));
1122                                        row.AddCell(CAREnum::SchemaSortOrder(action.sortOrderList.sortList[i].sortOrder));
1123                                       
1124                                        tblSortList.AddRow(row);
1125
1126                                        if (rSchema.Exists())
1127                                        {
1128                                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_OPENWINDOW_SORTBY);
1129                                                arIn->AddFieldReference(rSchema.GetInsideId(), action.sortOrderList.sortList[i].fieldId, refItem);
1130                                        }
1131                                }
1132
1133                                strm << "<p>Sort Order" << tblSortList << "</p>";
1134                        }
1135
1136                        // additional report informations
1137                        if (windowMode == AR_ACTIVE_LINK_ACTION_OPEN_REPORT)
1138                        {
1139                                strm << "<p>EntryIDs: ";
1140                                if (!entryIDs->empty() && entryIDs->operator[](0) == '$')
1141                                {
1142                                        int fieldId = atoi(&entryIDs->c_str()[1]);
1143                                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(schemaInsideId, fieldId, rootLevel)) << "$";
1144                                        if (fieldId > 0)
1145                                        {
1146                                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_OPENWINDOW_ENTRYIDS);
1147                                                arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
1148                                        }
1149                                }
1150                                else
1151                                {
1152                                        strm << *entryIDs;
1153                                }
1154                               
1155                                strm << "<br/>Query Override: ";
1156                                if (!queryOverride->empty() && queryOverride->operator[](0) == '$')
1157                                {
1158                                        int fieldId = atoi(&entryIDs->c_str()[1]);
1159                                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(schemaInsideId, fieldId, rootLevel)) << "$";
1160                                        if (fieldId > 0)
1161                                        {
1162                                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_OPENWINDOW_QUERYOVERRIDE);
1163                                                arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
1164                                        }
1165                                }
1166                                else
1167                                {
1168                                        strm << *queryOverride;
1169                                }
1170                               
1171                                strm << "<br/>Report Operation: ";
1172                                int iReportOperation = atoi(reportOperation->c_str());
1173                                if (iReportOperation == 0) iReportOperation = 2;        // set default to Run
1174                                strm << CAREnum::ReportOperation(iReportOperation);
1175
1176                                strm << "<br/>Character Encoding: ";
1177                                if (!charEncoding->empty() && charEncoding->operator[](0) == '$')
1178                                {
1179                                        int fieldId = atoi(&charEncoding->c_str()[1]);
1180                                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(schemaInsideId, fieldId, rootLevel)) << "$";
1181                                        if (fieldId > 0)
1182                                        {
1183                                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_OPENWINDOW_CHARENC);
1184                                                arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
1185                                        }
1186                                }
1187                                else
1188                                {
1189                                        strm << *charEncoding;
1190                                }
1191                                strm << "</p>" << endl;
1192
1193                                // clean up
1194                                delete entryIDs;
1195                                delete queryOverride;
1196                                delete reportOperation;
1197                                delete charEncoding;
1198                        }
1199
1200                        // polling interval
1201                        if (ActionOpenDlgPoolingInterval(windowMode) && action.pollinginterval > 0)
1202                        {
1203                                strm << "<p>Polling interval: " << action.pollinginterval << "</p>" << endl;
1204                        }
1205                }
1206        }
1207        catch(exception& e)
1208        {
1209                cout << "EXCEPTION in AlActionOpenDlg of '" << this->obj->GetName() << "': " << e.what() << endl;
1210        }
1211}
1212
1213// AR_ACTIVE_LINK_ACTION_COMMITC
1214void CDocAlActionStruct::ActionCommitChanges(std::ostream& strm, const ARCommitChangesStruct &action, int nAction)
1215{
1216        try
1217        {
1218                strm << "Schema: " << arIn->LinkToSchema(action.schemaName, rootLevel) << "<br/>" << endl;
1219                strm << "The Commit Changes action is applicable to regular form, join form or dialog box. ";
1220                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. ";
1221                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. ";
1222                strm << "When called within a regular form or join form, this action applies the changes." << endl;             
1223        }
1224        catch(exception& e)
1225        {
1226                cout << "EXCEPTION in AlActionCommitChanges of '" << this->obj->GetName() << "': " << e.what() << endl;
1227        }
1228}
1229
1230// AR_ACTIVE_LINK_ACTION_CLOSEWND
1231void CDocAlActionStruct::ActionCloseWindow(std::ostream& strm, const ARCloseWndStruct &action, int nAction)
1232{
1233        try
1234        {               
1235                if(action.closeAll == TRUE)
1236                        strm << "<input type=\"checkbox\" name=\"closeWnd\" value=\"closeWndAll\" checked>Close All Windows" << endl;
1237                else
1238                        strm << "<input type=\"checkbox\" name=\"closeWnd\" value=\"closeWndAll\">Close All Windows" << endl;
1239        }
1240        catch(exception& e)
1241        {
1242                cout << "EXCEPTION in AlActionCloseWindow of '" << this->obj->GetName() << "': " << e.what() << endl;
1243        }
1244}
1245
1246// AR_ACTIVE_LINK_ACTION_CALLGUIDE
1247void CDocAlActionStruct::ActionCallGuide(std::ostream& strm, const ARCallGuideStruct &action, int nAction)
1248{
1249        try
1250        {
1251                strm << "<p>";
1252                if (action.serverName[0] == '$' && action.serverName[1] != 0)
1253                {
1254                        int fieldId = atoi(&action.serverName[1]);
1255                        strm << "Server: " << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(this->schemaName, fieldId, rootLevel)) << "$<br/>" << endl;
1256
1257                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_CALLCUIDE_SERVER);
1258                        arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
1259                }
1260                else
1261                {
1262                        strm << "Server : " << arIn->LinkToServerInfo(action.serverName, rootLevel) << "<br/>" << endl;
1263                }
1264
1265                if (action.guideName[0] == '$' && action.guideName[1] != 0)
1266                {
1267                        int fieldId = atoi(&action.guideName[1]);
1268                        strm << "Guide: $" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(this->schemaName, fieldId, rootLevel)) << "$<br/>" << endl;
1269
1270                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_CALLGUIDE_NAME);
1271                        arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
1272                }
1273                else
1274                {
1275                        strm << "Guide: " << arIn->LinkToContainer(action.guideName, rootLevel) << "<br/>" << endl;
1276                }
1277                strm << "</p>";
1278
1279                if(action.guideTableId > 0)
1280                {
1281                        strm << "<p class='last'>" << "Table Loop: " << CAREnum::CallGuideMode(action.guideMode) << "<br/>" << endl;
1282                        strm << "Table Field: " <<  arIn->LinkToField(schemaName, action.guideTableId, rootLevel);
1283                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_CALLGUIDE_TABLELOOP);
1284                        arIn->AddFieldReference(schemaInsideId, action.guideTableId, refItem);
1285                        strm << "</p>";
1286                }
1287        }
1288        catch(exception& e)
1289        {
1290                cout << "EXCEPTION in AlActionCallGuide of '" << this->obj->GetName() << "': " << e.what() << endl;
1291        }
1292}
1293
1294// AR_ACTIVE_LINK_ACTION_EXITGUIDE
1295void CDocAlActionStruct::ActionExitGuide(std::ostream& strm, const ARExitGuideStruct &action, int nAction)
1296{
1297        try
1298        {
1299                strm << "<input type=\"checkbox\" name=\"exitGuide\" value=\"exitGuideCloseAll\"";
1300                if(action.closeAll == TRUE)
1301                {
1302                        strm << " checked";
1303                }
1304                strm << ">Close all guides on exit" << endl;
1305        }
1306        catch(exception& e)
1307        {
1308                cout << "EXCEPTION in AlActionExitGuide of '" << this->obj->GetName() << "': " << e.what() << endl;
1309        }
1310}
1311
1312// AR_ACTIVE_LINK_ACTION_GOTOGUIDELABEL
1313void CDocAlActionStruct::ActionGotoGuideLabel(std::ostream& strm, const ARGotoGuideLabelStruct &action, int nAction)
1314{
1315        try
1316        {
1317                strm << "Guide Label: " << (action.label != NULL ? action.label : EmptyValue) << endl; 
1318        }
1319        catch(exception& e)
1320        {
1321                cout << "EXCEPTION in AlActionGuideLabel of '" << this->obj->GetName() << "': " << e.what() << endl;
1322        }
1323}
1324
1325// AR_ACTIVE_LINK_ACTION_WAIT
1326void CDocAlActionStruct::ActionWait(std::ostream& strm, const ARWaitStruct &action, int nAction)
1327{
1328        try
1329        {
1330                strm << "Label for Continue Button: " << (action.continueButtonTitle != NULL ? action.continueButtonTitle : EmptyValue) << endl;
1331        }
1332        catch(exception& e)
1333        {
1334                cout << "EXCEPTION in AlActionWait of '" << this->obj->GetName() << "': " << e.what() << endl;
1335        }
1336}
1337
1338// AR_ACTIVE_LINK_ACTION_GOTOACTION
1339void CDocAlActionStruct::ActionGotoAction(std::ostream& strm, const ARGotoActionStruct &action, int nAction)
1340{
1341        try
1342        {
1343                strm << "FieldId or Value: ";
1344                switch (action.tag)
1345                {
1346                case AR_GOTO_FIELD_XREF:
1347                        {
1348                        // add new reference item to the field
1349                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_GOTO);
1350                        arIn->AddFieldReference(schemaInsideId, action.fieldIdOrValue, refItem);
1351
1352                        // link to field in current page
1353                        strm << arIn->LinkToField(schemaName, action.fieldIdOrValue, rootLevel) << endl;
1354                        break;
1355                        }
1356                case AR_GOTO_ABSOLUTE_ORDER:
1357                        strm << action.fieldIdOrValue;
1358                        break;
1359                case AR_GOTO_OFFSET_FORWARD:
1360                        strm << "+" << action.fieldIdOrValue;
1361                        break;
1362                case AR_GOTO_OFFSET_BACKWARD:
1363                        strm << "-" << action.fieldIdOrValue;
1364                        break;
1365                }
1366        }
1367        catch(exception& e)
1368        {
1369                cout << "EXCEPTION in AlActionGotoAction of '" << this->obj->GetName() << "': " << e.what() << endl;
1370        }
1371}
1372
1373#if AR_CURRENT_API_VERSION >= AR_API_VERSION_710
1374// AR_ACTIVE_LINK_ACTION_SERVICE
1375void CDocAlActionStruct::ActionService(std::ostream& strm, const ARActiveLinkSvcActionStruct &action, int nAction)
1376{
1377        string serviceServer;
1378        string serviceSchema;
1379
1380        try
1381        {
1382                strm << "<p>";
1383                // check for sample data for the server part
1384                if (action.serverName[0] == '$' && action.sampleServer[0] != 0)
1385                {
1386                        int fieldId = atoi(&action.serverName[1]);
1387                        serviceServer = action.sampleServer;                   
1388                        strm << "Server Name: " << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(this->schemaName, fieldId, rootLevel)) << "$ (Sample Server: " << arIn->LinkToServerInfo(action.sampleServer, rootLevel) << ")<br/>" << endl;
1389
1390                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_SERVICE_SERVER);
1391                        arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
1392                }
1393                else
1394                {
1395                        serviceServer = action.serverName;
1396                        strm << "Server Name: " << arIn->LinkToServerInfo(action.serverName, rootLevel) << "<br/>" << endl;
1397                }
1398
1399                if (action.serviceSchema[0] == '$' && action.sampleSchema[0] != 0)
1400                {
1401                        int fieldId = atoi(&action.serviceSchema[1]);
1402
1403                        if (action.sampleSchema[0] == '@' && action.sampleSchema[1] == 0)
1404                        {
1405                                serviceSchema = schemaName;
1406                        }
1407                        else
1408                        {
1409                                serviceSchema = action.sampleSchema;
1410                        }
1411
1412                        strm << "Service Form: " << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(this->schemaName, fieldId, rootLevel)) << "$ (Sample Form: " << arIn->LinkToSchema(serviceSchema, rootLevel) << ")<br/>" << endl;
1413
1414                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_SERVICE_FORM);
1415                        arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
1416
1417                        if (fieldId == (-AR_KEYWORD_SCHEMA)) serviceSchema = schemaName;
1418                }
1419                else
1420                {
1421                        serviceSchema = action.serviceSchema;
1422                        strm << "Service Form: " << arIn->LinkToSchema(action.serviceSchema, rootLevel) << "<br/>" << endl;
1423                }
1424
1425                // create schema reference
1426                CARSchema schemaToCall(serviceSchema);
1427                if (schemaToCall.Exists() && (!arIn->appConfig.bOverlaySupport || IsVisibleObject(*obj)))
1428                {
1429                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_SERVICE_CALL);
1430                        if (!schemaToCall.ReferenceExists(refItem))
1431                                schemaToCall.AddReference(refItem);
1432                }
1433
1434                strm << "Request Id: ";
1435                if (action.requestIdMap != 0)
1436                {
1437                        strm << arIn->LinkToField(schemaName, action.requestIdMap, rootLevel);
1438                       
1439                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_SERVICE_REQUESTID);
1440                        arIn->AddFieldReference(schemaInsideId, action.requestIdMap, refItem);
1441                }
1442                strm << "</p>" << endl;
1443
1444                // input mapping
1445                strm << "Input Mapping: "; if (action.inputFieldMapping.numItems == 0) strm << "None"; strm << "<br/>" << endl;
1446                if (action.inputFieldMapping.numItems > 0)
1447                {
1448                        CARAssignHelper assignHelper(*arIn, rootLevel, *this->obj, serviceSchema, schemaName);
1449                        strm << assignHelper.ServiceAssignment(action.inputFieldMapping, nAction, ifElse, SMM_INPUT);
1450                }
1451
1452                // output mapping
1453                strm << "Output Mapping: "; if (action.outputFieldMapping.numItems == 0) strm << "None"; strm << "<br/>" << endl;
1454                if (action.outputFieldMapping.numItems > 0)
1455                {
1456                        CARSchema currentSchema(schemaName);
1457
1458                        CARAssignHelper assignHelper(*arIn, rootLevel, *this->obj, currentSchema, schemaToCall);
1459                        strm << assignHelper.ServiceAssignment(action.outputFieldMapping, nAction, ifElse, SMM_OUTPUT);
1460                }
1461        }
1462        catch (...)
1463        {
1464                cout << "EXCEPTION in AlActionService: " << this->obj->GetName() << endl;
1465        }
1466}
1467#endif
Note: See TracBrowser for help on using the repository browser.