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

Revision 489, 21.1 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 "DocFilterActionStruct.h"
19#include "DocAllMatchingIdsTable.h"
20
21CDocFilterActionStruct::CDocFilterActionStruct(CARInside &arIn, CARServerObject &obj, string schemaName, int rootLevel, int structItemType)
22{
23        this->arIn = &arIn;
24        this->obj = &obj;       
25        this->rootLevel = rootLevel;
26        this->schemaName = schemaName;
27        this->schemaInsideId = this->arIn->SchemaGetInsideId(this->schemaName);
28        this->structItemType = structItemType;
29}
30
31CDocFilterActionStruct::~CDocFilterActionStruct(void)
32{
33}
34
35
36string CDocFilterActionStruct::Get(IfElseState ifElse, const ARFilterActionList &actList)
37{
38        stringstream strm;
39        strm.str("");
40
41        try
42        {
43                CTable tblListAction("tblListAlAction", "TblObjectList");
44                tblListAction.AddColumn(5, "Position"); 
45                tblListAction.AddColumn(15, "Action Type");
46                tblListAction.AddColumn(80, "Description");
47                this->ifElse = ifElse;
48
49                for(unsigned int nAction = 0; nAction < actList.numItems; nAction++)
50                {
51                        ARFilterActionStruct action = actList.actionList[nAction];
52
53                        CTableRow row("cssStdRow");             
54                        CTableCell cellPosition(nAction, "");                           
55
56                        string tmpActionType = CAREnum::FilterAction(action.action);
57                        if(this->structItemType == AR_STRUCT_ITEM_XML_FILTER)
58                        {
59                                CPageParams file(PAGE_ACTION_OBJLIST, AR_STRUCT_ITEM_XML_FILTER, action.action);
60                                tmpActionType = CWebUtil::Link(CAREnum::FilterAction(action.action), file, "", rootLevel);
61                        }
62                        CTableCell cellActionType(tmpActionType.c_str(), "");                   
63
64                        stringstream actionDesc;
65                        actionDesc.str("");
66
67                        switch(action.action)
68                        {
69                        case AR_FILTER_ACTION_NONE:
70                                {                                       
71                                        actionDesc << FilterActionNone(nAction);
72                                }
73                                break;
74                        case AR_FILTER_ACTION_NOTIFY:
75                                {
76                                        actionDesc << FilterActionNotify(action.u.notify, nAction);
77                                }
78                                break;
79                        case AR_FILTER_ACTION_MESSAGE:
80                                {
81                                        actionDesc << FilterActionMessage(action.u.message, nAction);
82                                }
83                                break;
84                        case AR_FILTER_ACTION_LOG:
85                                {
86                                        actionDesc << FilterActionLog(action.u.logFile, nAction);                                       
87                                }
88                                break;
89                        case AR_FILTER_ACTION_FIELDS:
90                                {
91                                        actionDesc << FilterActionSetFields(action.u.setFields, nAction);       
92                                }
93                                break;
94                        case AR_FILTER_ACTION_PROCESS:
95                                {
96                                        actionDesc << FilterActionProcess(action.u.process, nAction);
97                                }
98                                break;
99                        case AR_FILTER_ACTION_FIELDP:
100                                {
101                                        actionDesc << FilterActionPushFields(action.u.pushFields, nAction);
102                                }
103                                break;
104                        case AR_FILTER_ACTION_SQL:
105                                {
106                                        actionDesc << FilterActionSql(action.u.sqlCommand, nAction);
107                                }
108                                break;
109                        case AR_FILTER_ACTION_GOTOACTION:
110                                {
111                                        actionDesc << FilterActionGotoAction(action.u.gotoAction, nAction);
112                                }
113                                break;
114                        case AR_FILTER_ACTION_CALLGUIDE:
115                                {
116                                        actionDesc << FilterActionCallGuide(action.u.callGuide, nAction);
117                                }
118                                break;
119                        case AR_FILTER_ACTION_EXITGUIDE:
120                                {
121                                        actionDesc << FilterActionExitGuide(action.u.exitGuide, nAction);
122                                }
123                                break;
124                        case AR_FILTER_ACTION_GOTOGUIDELABEL:
125                                {
126                                        actionDesc << FilterActionGotoGuideLabel(action.u.gotoGuide, nAction);
127                                }
128                                break;
129#if AR_CURRENT_API_VERSION >= AR_API_VERSION_750
130                        case AR_FILTER_ACTION_SERVICE:
131                                {
132                                        actionDesc << FilterActionService(action.u.serviceAction, nAction);
133                                }
134                                break;
135#endif
136                        default:
137                                {
138                                        actionDesc.str("");                             
139                                }
140                                break;
141                        }
142
143                        CTableCell cellActionDesc(actionDesc.str(), "");
144                        row.AddCell(cellPosition);
145                        row.AddCell(cellActionType);
146                        row.AddCell(cellActionDesc);
147                        tblListAction.AddRow(row);     
148                }
149
150                stringstream tblDesc;
151                tblDesc.str("");
152                tblDesc << CWebUtil::ImageTag("doc.gif", rootLevel) << IfElse(ifElse) << "-Actions";
153                tblListAction.description = tblDesc.str();
154
155                strm << tblListAction;
156        }
157        catch(exception& e)
158        {
159                cout << "EXCEPTION enumerating filter action struct of '" << this->obj->GetName() << "': " << e.what() << endl;
160        }
161
162        return strm.str();
163}
164
165// AR_FILTER_ACTION_NONE
166string CDocFilterActionStruct::FilterActionNone(int nAction)
167{
168        return "None";
169}
170
171// AR_FILTER_ACTION_NOTIFY
172string CDocFilterActionStruct::FilterActionNotify(ARFilterActionNotify &action, int nAction)
173{
174        stringstream strm;
175        strm.str("");
176
177        try
178        {
179                if(action.notifyText != NULL)
180                {
181                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_NOTIFY_TEXT);
182                        strm << "Notify Text: " << arIn->TextFindFields(action.notifyText, "$", schemaInsideId, rootLevel, true, &refItem) << "<br/>" << endl;
183                }
184                else
185                        strm << "Notify Text: " << EmptyValue << "<br/>" << endl;
186
187
188                if(action.user != NULL)
189                {
190                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_NOTIFY_USER);
191                        strm << "User Name: " << arIn->TextFindFields(action.user, "$", schemaInsideId, rootLevel, true, &refItem) << "<br/>" << endl;
192                }
193                else
194                        strm << "User Name: " << EmptyValue << "<br/>" << endl;
195
196
197                strm << "Priority: " << action.notifyPriority << "<br/>" << endl;
198                strm << "Mechanism: " << CAREnum::NotifyMechanism(action.notifyMechanism) << "<br/>" << endl;           
199
200                if(action.notifyMechanism != AR_NOTIFY_VIA_NOTIFIER)
201                {
202                        if(action.subjectText != NULL)
203                        {
204                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_NOTIFY_SUBJECT);
205                                strm << "Subject: " << arIn->TextFindFields(action.subjectText, "$", schemaInsideId, rootLevel, true, &refItem) << "<br/>" << endl;
206                        }
207
208                        //Fields
209                        strm << "<br/>Include Fields: " << CAREnum::NotifyFieldList(action.fieldIdListType) << "<br/>" << endl;
210                        for(unsigned int i=0; i<action.fieldIdList.numItems; i++)
211                        {
212                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_NOTIFY_FIELDLIST);
213                                arIn->AddFieldReference(schemaInsideId, action.fieldIdList.internalIdList[i], refItem);
214
215                                strm << arIn->LinkToField(schemaInsideId, action.fieldIdList.internalIdList[i], rootLevel) << "<br/>" << endl;
216                        }
217
218                        //Messages
219                        if(action.notifyAdvanced != NULL)
220                        {
221                                ARFilterActionNotifyAdvanced *adv = action.notifyAdvanced;
222
223                                strm << "<br/><br/>" << endl;
224
225                                if(adv->mailboxName != NULL)
226                                {
227                                        CRefItem refItemMbName(*this->obj, ifElse, nAction, REFM_NOTIFY_MAILBOX);
228                                        strm << "Mailbox Name: " << arIn->TextFindFields(adv->mailboxName, "$", schemaInsideId, rootLevel, true, &refItemMbName) << "<br/>" << endl;
229                                }
230
231                                if(adv->from != NULL)
232                                {
233                                        CRefItem refItemFrom(*this->obj, ifElse, nAction, REFM_NOTIFY_FROM);
234                                        strm << "From: " << arIn->TextFindFields(adv->from, "$", schemaInsideId, rootLevel, true, &refItemFrom) << "<br/>" << endl;
235                                }
236
237                                if(adv->replyTo != NULL)
238                                {
239                                        CRefItem refItemReplTo(*this->obj, ifElse, nAction, REFM_NOTIFY_REPLYTO);
240                                        strm << "Reply To: " << arIn->TextFindFields(adv->replyTo, "$", schemaInsideId, rootLevel, true, &refItemReplTo) << "<br/>" << endl;
241                                }
242
243                                if(adv->cc != NULL)
244                                {
245                                        CRefItem refItemCc(*this->obj, ifElse, nAction, REFM_NOTIFY_CC);
246                                        strm << "CC: " << arIn->TextFindFields(adv->cc, "$", schemaInsideId, rootLevel, true, &refItemCc) << "<br/>" << endl;
247                                }
248
249                                if(adv->bcc != NULL)
250                                {
251                                        CRefItem refItemBcc(*this->obj, ifElse, nAction, REFM_NOTIFY_BCC);
252                                        strm << "BCC: " << arIn->TextFindFields(adv->bcc, "$", schemaInsideId, rootLevel, true, &refItemBcc) << "<br/>" << endl;
253                                }
254
255                                if(adv->organization != NULL)
256                                {
257                                        CRefItem refItemOrg(*this->obj, ifElse, nAction, REFM_NOTIFY_ORG);
258                                        strm << "Organisation: " << arIn->TextFindFields(adv->organization, "$", schemaInsideId, rootLevel, true, &refItemOrg) << "<br/>" << endl;
259                                }
260
261                                if(adv->headerTemplate != NULL)
262                                {
263                                        CRefItem refItemTmplHead(*this->obj, ifElse, nAction, REFM_NOTIFY_TEMPL_HEADER);
264                                        strm << "Header Template: " << arIn->TextFindFields(adv->headerTemplate, "$", schemaInsideId, rootLevel, true, &refItemTmplHead) << "<br/>" << endl;
265                                }
266
267                                if(adv->contentTemplate != NULL)
268                                {
269                                        CRefItem refItemTmplCont(*this->obj, ifElse, nAction, REFM_NOTIFY_TEMPL_CONTENT);
270                                        strm << "Content Template: " << arIn->TextFindFields(adv->contentTemplate, "$", schemaInsideId, rootLevel, true, &refItemTmplCont) << "<br/>" << endl;
271                                }
272
273                                if(adv->footerTemplate != NULL)
274                                {
275                                        CRefItem refItemTmplFooter(*this->obj, ifElse, nAction, REFM_NOTIFY_TEMPL_FOOTER);
276                                        strm << "Footer Template: " << arIn->TextFindFields(adv->footerTemplate, "$", schemaInsideId, rootLevel, true, &refItemTmplFooter) << "<br/>" << endl;
277                                }
278                        }
279                }
280        }
281        catch(exception& e)
282        {
283                cout << "EXCEPTION in FilterActionNotify of '" << this->obj->GetName() << "': " << e.what() << endl;
284        }
285
286        return strm.str();
287}
288
289
290// AR_FILTER_ACTION_MESSAGE
291string CDocFilterActionStruct::FilterActionMessage(ARFilterStatusStruct &action, int nAction)
292{
293        stringstream strm;
294        strm.str("");
295
296        try
297        {
298                strm << "Message Number: " << action.messageNum << "<br/>" << endl;
299                strm << "Message Type: " << CAREnum::MessageType(action.messageType) << "<br/>" << endl;
300
301                if(action.messageText != NULL)
302                {
303                        CRefItem refItemTmp(*this->obj, ifElse, nAction, REFM_MESSAGE);
304                        strm << "Message Text: <br/>" << arIn->TextFindFields(action.messageText, "$", this->schemaInsideId, rootLevel, true, &refItemTmp) << "<br/>" << endl;
305                }
306        }
307        catch(exception& e)
308        {
309                cout << "EXCEPTION in FilterActionMessage of '" << this->obj->GetName() << "': " << e.what() << endl;
310        }
311
312        return strm.str();
313}
314
315// AR_FILTER_ACTION_LOG
316string CDocFilterActionStruct::FilterActionLog(char* action, int nAction)
317{
318        stringstream strm;
319        strm.str("");
320
321        try
322        {
323                if(action != NULL)
324                {
325                        strm << "File Name: " << action << endl; 
326                }
327                else
328                {
329                        strm << "File Name: " << EmptyValue << endl; 
330                }
331        }
332        catch(exception& e)
333        {
334                cout << "EXCEPTION in FilterActionLog of '" << this->obj->GetName() << "': " << e.what() << endl;
335        }
336
337        return strm.str();
338}
339
340// AR_FILTER_ACTION_FIELDS
341string CDocFilterActionStruct::FilterActionSetFields(ARSetFieldsActionStruct &action, int nAction)
342{
343        stringstream strm;
344        strm.str("");
345
346        try
347        {
348                CDocActionSetFieldsHelper setFieldsHelper(*arIn, *obj, schemaName, action, structItemType, ifElse, nAction, rootLevel);
349                setFieldsHelper.ToStream(strm);
350        }
351        catch(exception& e)
352        {
353                cout << "EXCEPTION in FilterActionSetFields of '" << this->obj->GetName() << "': " << e.what() << endl;
354        }
355
356        return strm.str();
357}
358
359// AR_FILTER_ACTION_PROCESS
360string CDocFilterActionStruct::FilterActionProcess(char *action, int nAction)
361{
362        stringstream strm;
363        strm.str("");
364
365        try
366        {
367                if(action != NULL)
368                {
369                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_RUN_PROCESS);
370                        strm << arIn->TextFindFields(action, "$", schemaInsideId, rootLevel, true, &refItem) << endl;
371                }
372                else
373                {
374                        strm << "No Run Process command specified." << endl;
375                }
376        }
377        catch(exception& e)
378        {
379                cout << "EXCEPTION in FilterActionProcess of '" << this->obj->GetName() << "': " << e.what() << endl;
380        }
381
382        return strm.str();
383}
384
385// AR_FILTER_ACTION_FIELDP
386string CDocFilterActionStruct::FilterActionPushFields(ARPushFieldsActionStruct &action, int nAction)
387{
388        stringstream strm;
389        strm.str("");
390
391        try
392        {
393                string pushSchema;
394
395                // target form ******************************************
396                strm << "Push Value To: ";
397                if (action.pushFieldsList.pushFieldsList[0].field.schema[0] == '$' && action.sampleSchema[0] != 0)
398                {
399                        int fieldId = atoi(&action.pushFieldsList.pushFieldsList[0].field.schema[1]);
400
401                        pushSchema = action.sampleSchema;
402                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(schemaInsideId, fieldId, rootLevel)) << "$ (Sample Schema: " << arIn->LinkToSchema(action.sampleSchema, rootLevel) << ")";
403
404                        // create field reference
405                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_PUSHFIELD_FORM);
406                        arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
407                }
408                else
409                {
410                        pushSchema = action.pushFieldsList.pushFieldsList[0].field.schema;
411                        strm << arIn->LinkToSchema(pushSchema, rootLevel);
412                }
413                strm << "<br/>" << endl;
414
415                if (!arIn->appConfig.bOverlaySupport || IsVisibleObject(*obj))
416                {
417                        CARSchema targetSchema(pushSchema);
418                        if (targetSchema.Exists())
419                        {
420                                CRefItem refItem(*this->obj, ifElse, nAction, REFM_PUSHFIELD_TARGET);
421                                targetSchema.AddReference(refItem);
422                        }
423                }
424
425                // push field if **************************************
426                strm << "<br/>Push Field If<br/>" << endl;
427                stringstream strmTmpQual;
428
429                CRefItem refItem(*this->obj, ifElse, nAction, REFM_PUSHFIELD_IF);
430                CARQualification arQual(*arIn);
431                arQual.arsStructItemType = AR_STRUCT_ITEM_XML_FILTER;
432
433                int pFormId = this->arIn->SchemaGetInsideId(schemaName);
434                int sFormId = this->arIn->SchemaGetInsideId(pushSchema);
435
436                arQual.CheckQuery(&action.pushFieldsList.pushFieldsList[0].field.qualifier, refItem, 0, pFormId, sFormId, strmTmpQual, rootLevel);
437
438                if(strmTmpQual.str().length() > 0)
439                {
440                        strm << strmTmpQual.str() << "<br/><br/>" << endl;
441                }
442                else
443                {
444                        strm << EmptyValue << "<br/><br/>" << endl;
445                }
446
447                strm << "If No Requests Match: " << CAREnum::NoMatchRequest(action.pushFieldsList.pushFieldsList[0].field.noMatchOption) << "<br/>" << endl;
448                strm << "If Multiple Requests Match: " << CAREnum::MultiMatchRequest(action.pushFieldsList.pushFieldsList[0].field.multiMatchOption) << "<br/><br/>" << endl;
449
450                // push field mapping *********************************
451                strm << "Field Mapping:";
452                if(action.pushFieldsList.pushFieldsList[0].field.tag == AR_FIELD && action.pushFieldsList.pushFieldsList[0].field.u.fieldId == AR_LIKE_ID)
453                {
454                        strm << " All Matching Ids<br/>" << endl;
455                        CDocAllMatchingIdsTable allMatchingFieldsTbl(pushSchema, schemaName, *obj, CDocAllMatchingIdsTable::AMM_PUSHFIELDS, nAction, ifElse, rootLevel);
456                        allMatchingFieldsTbl.ToStream(strm);
457                }
458                else
459                {
460                        strm << "<br/>" << endl;
461
462                        CARAssignHelper assignHelper(*arIn, rootLevel, *this->obj, schemaName, pushSchema);
463                        strm << assignHelper.PushFieldsAssignment(action, nAction, ifElse);
464                }
465        }
466        catch(exception& e)
467        {
468                cout << "EXCEPTION in FilterActionPushFields of '" << this->obj->GetName() << "': " << e.what() << endl;
469        }
470
471        return strm.str();
472}
473
474// AR_FILTER_ACTION_SQL
475string CDocFilterActionStruct::FilterActionSql(ARSQLStruct &action, int nAction)
476{
477        stringstream strm;
478        strm.str("");
479
480        try
481        {
482                if(action.server != NULL)
483                        strm << "Server: " << arIn->LinkToServerInfo(action.server, rootLevel) << "<br/>" << endl;
484
485                if(action.command != NULL)
486                {
487                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_DIRECTSQL);
488                        strm << "SQL command: <br/>" << arIn->TextFindFields(action.command, "$", schemaInsideId, rootLevel, true, &refItem) << endl;
489                }
490               
491        }
492        catch(exception& e)
493        {
494                cout << "EXCEPTION in FilterActionSql of '" << this->obj->GetName() << "': " << e.what() << endl;
495        }
496
497        return strm.str();
498}
499
500// AR_FILTER_ACTION_GOTOACTION
501string CDocFilterActionStruct::FilterActionGotoAction(ARGotoActionStruct &action, int nAction)
502{
503        stringstream strm;
504        strm.str("");
505
506        try
507        {
508                strm << "FieldId or Value: ";
509                switch (action.tag)
510                {
511                case AR_GOTO_FIELD_XREF:
512                        {
513                        // add new reference item to the field
514                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_GOTO);
515                        arIn->AddFieldReference(schemaInsideId, action.fieldIdOrValue, refItem);
516
517                        // link to field in current page
518                        strm << arIn->LinkToField(schemaName, action.fieldIdOrValue, rootLevel) << endl;
519                        break;
520                        }
521                case AR_GOTO_ABSOLUTE_ORDER:
522                        strm << action.fieldIdOrValue;
523                        break;
524                case AR_GOTO_OFFSET_FORWARD:
525                        strm << "+" << action.fieldIdOrValue;
526                        break;
527                case AR_GOTO_OFFSET_BACKWARD:
528                        strm << "-" << action.fieldIdOrValue;
529                        break;
530                }
531        }
532        catch(exception& e)
533        {
534                cout << "EXCEPTION in FilterActionGotoAction of '" << this->obj->GetName() << "': " << e.what() << endl;
535        }
536
537        return strm.str();
538}
539
540// AR_FILTER_ACTION_CALLGUIDE
541string CDocFilterActionStruct::FilterActionCallGuide(ARCallGuideStruct &action, int nAction)
542{
543        stringstream strm;
544        strm.str("");
545
546        try
547        {
548                //if(action.serverName != NULL)
549                //      strm << "Server: " << arIn->LinkToServerInfo(action.serverName, rootLevel) << "<br/>" << endl;
550       
551                if (action.guideName[0] == '$' /*&& action.sampleGuide[0] != 0*/)
552                {
553                        int fieldId = atoi(&action.guideName[1]);
554                        strm << "Guide: $" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(this->schemaName, fieldId, rootLevel)) << "$<br/>" << endl;
555
556                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_CALLGUIDE_NAME);
557                        arIn->AddFieldReference(this->schemaInsideId, fieldId, refItem);
558                }
559                else 
560                {
561                        strm << "Guide: " << arIn->LinkToContainer(action.guideName, rootLevel) << "<br/>" << endl;
562                }
563
564                if(action.guideTableId > 0)
565                {
566                        strm << "Table Loop: " << arIn->LinkToField(schemaInsideId, action.guideTableId, rootLevel) << "<br/>" << endl;
567
568                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_CALLGUIDE_TABLELOOP);
569                        arIn->AddFieldReference(schemaInsideId, action.guideTableId, refItem);
570                }
571        }
572        catch(exception& e)
573        {
574                cout << "EXCEPTION in FilterActionCallGuide of '" << this->obj->GetName() << "': " << e.what() << endl;
575        }
576
577        return strm.str();
578}
579
580// AR_FILTER_ACTION_EXITGUIDE
581string CDocFilterActionStruct::FilterActionExitGuide(ARExitGuideStruct &action, int nAction)
582{
583        stringstream strm;
584        strm.str("");
585
586        try
587        {
588                if(action.closeAll == TRUE)
589                        strm << "<input type=\"checkbox\" name=\"exitGuide\" value=\"exitGuideCloseAll\" checked>Close all guides on exit" << endl;
590                else
591                        strm << "<input type=\"checkbox\" name=\"exitGuide\" value=\"exitGuideCloseAll\">Close all guides on exit" << endl;
592        }
593        catch(exception& e)
594        {
595                cout << "EXCEPTION in FilterActionExitGuide of '" << this->obj->GetName() << "': " << e.what() << endl;
596        }
597
598        return strm.str();
599}
600
601// AR_FILTER_ACTION_GOTOGUIDELABEL
602string CDocFilterActionStruct::FilterActionGotoGuideLabel(ARGotoGuideLabelStruct &action, int nAction)
603{
604        stringstream strm;
605        strm.str("");
606
607        try
608        {
609                if(action.label != NULL)
610                {
611                        strm << "Guide Label: " << action.label << endl;
612                }
613                else
614                {
615                        strm << "Guide Label: " << EmptyValue << endl;
616                }
617        }
618        catch(exception& e)
619        {
620                cout << "EXCEPTION in FilterActionGotoGuideLabel of '" << this->obj->GetName() << "': " << e.what() << endl;
621        }
622
623        return strm.str();
624}
625
626#if AR_CURRENT_API_VERSION >= AR_API_VERSION_750
627// AR_FILTER_ACTION_SERVICE
628string CDocFilterActionStruct::FilterActionService(ARSvcActionStruct &action, int nAction)
629{
630        stringstream strm;
631        strm.str("");
632
633        try
634        {
635                strm << "<p>";
636                // check for SAMPLE DATA
637                string serviceSchema;
638                if (action.serviceSchema[0] == '$' && action.sampleSchema[0] != 0)
639                {
640                        int fieldId = atoi(&action.serviceSchema[1]);
641                        serviceSchema = action.sampleSchema;
642                        strm << "Service Form: " << "$" << arIn->LinkToField(this->schemaName, fieldId, rootLevel) << "$ (Sample Form: " << arIn->LinkToSchema(serviceSchema, rootLevel) << ")<br/>" << endl;
643
644                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_SERVICE_FORM);
645                        arIn->AddFieldReference(schemaInsideId, fieldId, refItem);
646                }
647                else
648                {
649                        serviceSchema = action.serviceSchema;
650                        strm << "Service Form: " << arIn->LinkToSchema(action.serviceSchema, rootLevel) << "<br/>" << endl;
651                }
652
653                CARSchema schemaToCall(serviceSchema);
654                if (schemaToCall.Exists() && (!arIn->appConfig.bOverlaySupport || IsVisibleObject(*obj)))
655                {
656                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_SERVICE_CALL);
657                        schemaToCall.AddReference(refItem);
658                }
659
660                strm << "Request Id: ";
661                if (action.requestIdMap != 0)
662                {
663                        strm << arIn->LinkToField(schemaName, action.requestIdMap, rootLevel);
664
665                        CRefItem refItem(*this->obj, ifElse, nAction, REFM_SERVICE_REQUESTID);
666                        arIn->AddFieldReference(schemaInsideId, action.requestIdMap, refItem);
667                }
668                strm << "</p>" << endl;
669
670
671                // input mapping
672                strm << "Input Mapping: "; if (action.inputFieldMapping.numItems == 0) strm << "None"; strm << "<br/>" << endl;
673                if (action.inputFieldMapping.numItems > 0)
674                {
675                        CARAssignHelper assignHelper(*arIn, rootLevel, *this->obj, serviceSchema, schemaName);
676                        strm << assignHelper.ServiceAssignment(action.inputFieldMapping, nAction, ifElse, SMM_INPUT);
677                }
678
679                // output mapping
680                strm << "Output Mapping: "; if (action.outputFieldMapping.numItems == 0) strm << "None"; strm << "<br/>" << endl;
681                if (action.outputFieldMapping.numItems > 0)
682                {
683                        CARAssignHelper assignHelper(*arIn, rootLevel, *this->obj, schemaName, serviceSchema);
684                        strm << assignHelper.ServiceAssignment(action.outputFieldMapping, nAction, ifElse, SMM_OUTPUT);
685                }
686        }
687        catch (...)
688        {
689                cout << "EXCEPTION in FilterActionService: " << this->obj->GetName() << endl;
690        }
691
692        return strm.str();
693}
694#endif
Note: See TracBrowser for help on using the repository browser.