84. EPMO Open Source Coordination Office Redaction File Detail Report

Produced by Araxis Merge on 12/4/2017 8:32:38 AM Central Standard Time. See www.araxis.com for information about Merge. This report uses XHTML and CSS2, and is best viewed with a modern standards-compliant browser. For optimum results when printing this report, use landscape orientation and enable printing of background images and colours in your browser.

84.1 Files compared

# Location File Last Modified
1 VCCM.zip\VCCM\CRM_solutions\VCCMResources\VCCMResources_1_0_0_6.zip\WebResources ftp_ProgressNoteSignerSearchjsProgressNoteSignerSe15D67D37-6253-E611-943F-0050568D743D Thu Mar 23 13:44:30 2017 UTC
2 VCCM.zip\VCCM\CRM_solutions\VCCMResources\VCCMResources_1_0_0_6.zip\WebResources ftp_ProgressNoteSignerSearchjsProgressNoteSignerSe15D67D37-6253-E611-943F-0050568D743D Thu Nov 30 17:20:55 2017 UTC

84.2 Comparison summary

Description Between
Files 1 and 2
Text Blocks Lines
Unchanged 2 1812
Changed 1 2
Inserted 0 0
Removed 0 0

84.3 Comparison options

Whitespace
Character case Differences in character case are significant
Line endings Differences in line endings (CR and LF characters) are ignored
CR/LF characters Not shown in the comparison detail

84.4 Active regular expressions

No regular expressions were active.

84.5 Comparison detail

  1   /// <refer ence path= '../../tri ipcrm_/TR_ KU_V2015_2 _902/js/jq uery.min.j s' />
  2   /// <refer ence path= '../../tri ipcrm_/TR_ KU_V2015_2 _902/js/ke ndo.all.mi n.js' />
  3  
  4   //Progress NoteSigner SearchScri ptLib.js
  5   //Contains  variables  and funct ions used  by the Pro gressNoteS ignerSearc h.html pag e
  6  
  7   //Static V ariables
  8   var pnss_c rmOdataEnd Point = '/ XRMService s/2011/Org anizationD ata.svc';
  9   var pnss_c ontext = G etGlobalCo ntext();
  10   var pnss_s erverUrl =  pnss_cont ext.getCli entUrl();
  11  
  12   //var pnss _VistaUser sURLbase =  'https:// qacrmdac.n p.crm.vrm. vba. DNS     /WebParts/ DEV/api/Vi staUsers/1 .0/json/ft pCRM/john/ smith/1234 ?noFilter= true';    //OLD MANU AL DEV URL
  13   var pnss_V istaUsersU RLbase = ' ';
  14  
  15   //Get user  data
  16   var pnss_c rmUserId =  pnss_cont ext.getUse rId();
  17   var pnss_u serSiteId  = '';
  18   var pnss_u serData =  pnss_getSi ngleEntity DataSync(' SystemUser Set', 'ftp _FacilityS iteId', pn ss_crmUser Id);
  19   if (pnss_u serData !=  null) {
  20       if (pn ss_userDat a.d.ftp_Fa cilitySite Id != null ) { pnss_u serSiteId  = pnss_use rData.d.ft p_Facility SiteId.Id;  }
  21   }
  22  
  23   function p nss_Settin gsWebServi ceURL_resp onse(pnss_ settingDat a, pnss_la stSkip) {
  24       try {
  25           // pnss_lastS kip is the  starting  point in t he result  (use if mo re than 50  records)  //Not used  in this s cenario
  26           va r pnss_Dac Url = null ;
  27           va r pnss_Vis taUserApiU rl = null;
  28  
  29           fo r (var i =  0; i <= p nss_settin gData.d.re sults.leng th - 1; i+ +) {
  30                //Get in fo
  31                if (pnss _settingDa ta.d.resul ts[i].ftp_ DACURL !=  null) { pn ss_DacUrl  = pnss_set tingData.d .results[i ].ftp_DACU RL; }
  32                if (pnss _settingDa ta.d.resul ts[i].ftp_ VistaUsers APIURL !=  null) { pn ss_VistaUs erApiUrl =  pnss_sett ingData.d. results[i] .ftp_Vista UsersAPIUR L; }
  33                break;
  34           }
  35           if  (pnss_Dac Url != nul l && pnss_ VistaUserA piUrl != n ull) {
  36                //Constr uct full w eb service  URL
  37                pnss_Vis taUsersURL base = pns s_DacUrl +  pnss_Vist aUserApiUr l;
  38           }
  39           el se {
  40                Xrm.Page .ui.setFor mNotificat ion("ERROR : THE VIST A USERS SE RVICE URL  IS MISSING , PLEASE C ONTACT TEC HNICAL SUP PORT!", "E RROR", "VI STASERVICE ");
  41           }
  42       }
  43       catch  (err) {
  44           al ert('Progr ess Note S igner Sear ch Web Res ource Func tion Error (pnss_Sett ingsWebSer viceURL_re sponse): '  + err.mes sage);
  45       }
  46   }
  47  
  48   function p nss_formLo ad() {
  49       try {
  50           // Proceed to  grid data  load....
  51           pn ss_createL ookupContr ol();
  52           pn ss_createV istaContro l();
  53           pn ss_createS electedCon trol();
  54  
  55           // Set focus  to cancel  button if  Tab_Additi onalSigner s is Visib le
  56           if  (parent.X rm.Page.ui .tabs.get( 'Tab_Addit ionalSigne rs').getVi sible() ==  true) {
  57                document .getElemen tById('btn Cancel').f ocus();
  58           }
  59  
  60           // GET CRM SE TTINGS WEB  SERVICE U RLS
  61           va r pnss_con ditionalFi lter = "(m cs_name eq  'Active S ettings')" ;
  62           pn ss_getMult ipleEntity DataAsync( 'mcs_setti ngSet', 'f tp_DACURL,  ftp_Vista UsersAPIUR L', pnss_c onditional Filter, 'm cs_name',  'asc', 0,  pnss_Setti ngsWebServ iceURL_res ponse, '') ;
  63       }
  64       catch  (err) {
  65           al ert('Progr ess Note S igner Sear ch Web Res ource Func tion Error (pnss_form Load): ' +  err.messa ge);
  66       }
  67   }
  68  
  69   function p nss_getVis taUsersDat a(pnss_use rFirstName , pnss_use rLastName,  pnss_user SiteNo, pn ss_noFilte r) {
  70       try {
  71           va r pnss_jso nData = nu ll;
  72           $. ajax({
  73                type: "G ET",
  74                url: pns s_VistaUse rsURLbase  + pnss_use rFirstName  + "/" + p nss_userLa stName + " /" + pnss_ userSiteNo  + "?noFil ter=" + pn ss_noFilte r,
  75                contentT ype: "appl ication/js on; charse t=utf-8",
  76                dataType : "json",
  77                success:  function  (data) {
  78                    pnss _jsonData  = data;
  79                },
  80                error: f unction (j qXHR, text Status, er rorThrown)  {
  81                    //Sy stem Error
  82                    pnss _jsonData  = null;
  83                },
  84                async: f alse,
  85                cache: f alse
  86           }) ;
  87           re turn pnss_ jsonData;
  88       }
  89       catch  (err) {
  90           al ert('Progr ess Note S igner Sear ch Web Res ource Func tion Error (pnss_getV istaUsersD ata): ' +  err.messag e);
  91           re turn null;
  92       }
  93   }
  94  
  95   function p nss_select AddGridRow (arg) {
  96       try {
  97           va r pnss_sel ectedRows  = this.sel ect();
  98           va r pnss_sel ectedDataI tems = [];
  99           va r pnss_rec ordID = nu ll;
  100           va r pnss_rec ordType =  null;
  101           va r pnss_rec ordIconURL  = null;
  102           va r pnss_rec ordName =  null;
  103           va r pnss_rec ordFirstNa me = null;
  104           va r pnss_rec ordLastNam e = null;
  105           va r pnss_rec ordSiteNo  = null;
  106           fo r (var i =  0; i < pn ss_selecte dRows.leng th; i++) {
  107                pnss_gri dDataItem  = this.dat aItem(pnss _selectedR ows[i]);
  108                pnss_rec ordID = pn ss_gridDat aItem.ID
  109                pnss_rec ordType =  pnss_gridD ataItem.Ty pe;
  110                pnss_rec ordIconURL  = pnss_gr idDataItem .IconURL;
  111                pnss_rec ordName =  pnss_gridD ataItem.Na me;
  112                pnss_rec ordFirstNa me = pnss_ gridDataIt em.FirstNa me;
  113                pnss_rec ordLastNam e = pnss_g ridDataIte m.LastName ;
  114                pnss_rec ordSiteNo  = pnss_gri dDataItem. SiteNo;
  115           }
  116  
  117           va r pnss_ent itySearchG rid = $('# ku_lookupg rid').data ('kendoGri d');
  118           va r pnss_ent ityVistaGr id = $('#k u_vistagri d').data(' kendoGrid' );
  119           va r pnss_ent itySelecte dGrid = $( '#ku_selec tedgrid'). data('kend oGrid');
  120  
  121           if  (pnss_rec ordID != n ull) {
  122                //Clear  existing V ista grid  records
  123                pnss_ent ityVistaGr id.dataSou rce.data([ ]);
  124  
  125                //Get Ma tching Vis ta user da ta
  126                var pnss _vistauser sData = pn ss_getVist aUsersData (pnss_reco rdFirstNam e, pnss_re cordLastNa me, pnss_r ecordSiteN o, false);
  127  
  128                //Check  vista user s data con tent
  129                if (pnss _vistauser sData == n ull || pns s_vistause rsData.Dat a == null  || pnss_vi stausersDa ta.Data.le ngth == nu ll || pnss _vistauser sData.Data .length ==  0) {
  130                    //Ab ort proces s, missing  info
  131                    aler t('Unable  to obtain  a matching  Vista Use r record.  This user  cannot be  selected a s a signer !');
  132                    retu rn false;
  133                }
  134  
  135                for (var  i = 0; i  <= pnss_vi stausersDa ta.Data.le ngth - 1;  i++) {
  136                    var  pnss_selec tedUserDis playName =  '';
  137                    var  pnss_selec tedUserTit le = '';
  138                    var  pnss_selec tedUserIEN  = '';
  139  
  140                    if ( pnss_vista usersData. Data[i].Di splayName  != null) {  pnss_sele ctedUserDi splayName  = pnss_vis tausersDat a.Data[i]. DisplayNam e; }
  141                    if ( pnss_vista usersData. Data[i].Ti tle != nul l) { pnss_ selectedUs erTitle =  pnss_vista usersData. Data[i].Ti tle; }
  142                    if ( pnss_vista usersData. Data[i].Ie n != null)  { pnss_se lectedUser IEN = pnss _vistauser sData.Data [i].Ien.to String();  }
  143                    if ( pnss_selec tedUserDis playName ! = '' && pn ss_selecte dUserTitle  != '') {
  144                         pnss_selec tedUserDis playName =  pnss_sele ctedUserDi splayName  + ", (" +  pnss_selec tedUserTit le + ")";
  145                    }
  146  
  147                    //Ad d Row to G rid
  148                    pnss _entityVis taGrid.dat aSource.pu shCreate({
  149                         ID: pnss_r ecordID,
  150                         Type: pnss _recordTyp e,
  151                         IconURL: p nss_record IconURL,
  152                         Name: pnss _selectedU serDisplay Name,
  153                         IEN: pnss_ selectedUs erIEN
  154                    });
  155                }
  156  
  157                //Remove  row from  lookup gri d
  158                pnss_ent itySearchG rid.dataSo urce.remov e(pnss_gri dDataItem) ;
  159           }
  160       }
  161       catch  (err) {
  162           al ert('Progr ess Note S igner Sear ch Script  Failure: F unction(pn ss_selectA ddGridRow) : ' + err. message);
  163       }
  164   }
  165  
  166   function p nss_select RemoveGrid Row(arg) {
  167       try {
  168           // Disable se lect if di sabled
  169           if  (document .getElemen tById('btn Select').d isabled ==  true) { r eturn fals e; }
  170  
  171           va r pnss_sel ectedRows  = this.sel ect();
  172           va r pnss_sel ectedDataI tems = [];
  173           va r pnss_rec ordID = nu ll;
  174           va r pnss_rec ordType =  null;
  175           va r pnss_rec ordIconURL  = null;
  176           va r pnss_rec ordName =  null;
  177           fo r (var i =  0; i < pn ss_selecte dRows.leng th; i++) {
  178                pnss_gri dDataItem  = this.dat aItem(pnss _selectedR ows[i]);
  179                pnss_rec ordID = pn ss_gridDat aItem.ID
  180                pnss_rec ordType =  pnss_gridD ataItem.Ty pe;
  181                pnss_rec ordIconURL  = pnss_gr idDataItem .IconURL;
  182                pnss_rec ordName =  pnss_gridD ataItem.Na me;
  183           }
  184  
  185           va r pnss_ent itySearchG rid = $('# ku_lookupg rid').data ('kendoGri d');
  186           va r pnss_ent itySelecte dGrid = $( '#ku_selec tedgrid'). data('kend oGrid');
  187  
  188           if  (pnss_rec ordID != n ull) {
  189                //Add to  lookup gr id
  190                //Determ ine if it  already ex ist in loo kup grid,  if so remo ve from se lected but  don't add  to lookup
  191                /*
  192                if (pnss _entitySea rchGrid.da taSource.g et(pnss_re cordID) ==  null) {
  193                    pnss _entitySea rchGrid.da taSource.p ushCreate( {
  194                         ID: pnss_r ecordID,
  195                         Type: pnss _recordTyp e,
  196                         IconURL: p nss_record IconURL,
  197                         Name: pnss _recordNam e
  198                    });
  199                }
  200                */
  201  
  202                //Remove  row from  selected g rid
  203                pnss_ent itySelecte dGrid.data Source.rem ove(pnss_g ridDataIte m);
  204           }
  205       }
  206       catch  (err) {
  207           al ert('Progr ess Note S igner Sear ch Script  Failure: F unction(pn ss_selectR emoveGridR ow): ' + e rr.message );
  208       }
  209   }
  210  
  211   function p nss_select VistaGridR ow(arg) {
  212       try {
  213           va r pnss_sel ectedRows  = this.sel ect();
  214           va r pnss_sel ectedDataI tems = [];
  215           va r pnss_rec ordID = nu ll;
  216           va r pnss_rec ordType =  null;
  217           va r pnss_rec ordIconURL  = null;
  218           va r pnss_rec ordName =  null;
  219           va r pnss_rec ordIEN = n ull;
  220           fo r (var i =  0; i < pn ss_selecte dRows.leng th; i++) {
  221                pnss_gri dDataItem  = this.dat aItem(pnss _selectedR ows[i]);
  222                pnss_rec ordID = pn ss_gridDat aItem.ID
  223                pnss_rec ordType =  pnss_gridD ataItem.Ty pe;
  224                pnss_rec ordIconURL  = pnss_gr idDataItem .IconURL;
  225                pnss_rec ordName =  pnss_gridD ataItem.Na me;
  226                pnss_rec ordIEN = p nss_gridDa taItem.IEN ;
  227           }
  228  
  229           // var pnss_e ntitySearc hGrid = $( '#ku_looku pgrid').da ta('kendoG rid');
  230           va r pnss_ent ityVistaGr id = $('#k u_vistagri d').data(' kendoGrid' );
  231           va r pnss_ent itySelecte dGrid = $( '#ku_selec tedgrid'). data('kend oGrid');
  232         
  233           if  (pnss_rec ordID != n ull) {
  234                //Remove  any exist ing record  with the  same id
  235                if (pnss _entitySel ectedGrid. dataSource .get(pnss_ recordID)  != null) {
  236                    pnss _entitySel ectedGrid. dataSource .remove(pn ss_entityS electedGri d.dataSour ce.get(pns s_recordID ));
  237                }
  238                //Add to  selected  grid
  239                if (pnss _entitySel ectedGrid. dataSource .get(pnss_ recordID)  == null) {
  240                    pnss _entitySel ectedGrid. dataSource .pushCreat e({
  241                         ID: pnss_r ecordID,
  242                         Type: pnss _recordTyp e,
  243                         IconURL: p nss_record IconURL,
  244                         Name: pnss _recordNam e,
  245                         IEN: pnss_ recordIEN
  246                    });
  247                    //Re move all r ows from v ista grid
  248                    pnss _entityVis taGrid.dat aSource.da ta([]);
  249                }
  250           }
  251       }
  252       catch  (err) {
  253           al ert('Progr ess Note S igner Sear ch Script  Failure: F unction(pn ss_selectV istaGridRo w): ' + er r.message) ;
  254       }
  255  
  256   }
  257  
  258   function p nss_clickA ddGridRow( e) {
  259       try {
  260           va r pnss_gri dDataItem  = this.dat aItem($(e. currentTar get).close st('tr'));
  261           va r pnss_rec ordID = pn ss_gridDat aItem.ID;
  262           va r pnss_rec ordType =  pnss_gridD ataItem.Ty pe;
  263           va r pnss_rec ordIconURL  = pnss_gr idDataItem .IconURL;
  264           va r pnss_rec ordName =  pnss_gridD ataItem.Na me;
  265           va r pnss_rec ordFirstNa me = pnss_ gridDataIt em.FirstNa me;
  266           va r pnss_rec ordLastNam e = pnss_g ridDataIte m.LastName ;
  267           va r pnss_rec ordSiteNo  = pnss_gri dDataItem. SiteNo;
  268  
  269           va r pnss_ent itySearchG rid = $('# ku_lookupg rid').data ('kendoGri d');
  270           va r pnss_ent ityVistaGr id = $('#k u_vistagri d').data(' kendoGrid' );
  271           va r pnss_ent itySelecte dGrid = $( '#ku_selec tedgrid'). data('kend oGrid');
  272  
  273           if  (pnss_rec ordID != n ull) {
  274                //Clear  existing V ista grid  records
  275                pnss_ent ityVistaGr id.dataSou rce.data([ ]);
  276  
  277                //Get Ma tching Vis ta user da ta
  278                var pnss _vistauser sData = pn ss_getVist aUsersData (pnss_reco rdFirstNam e, pnss_re cordLastNa me, pnss_r ecordSiteN o, false);
  279  
  280                //Check  vista user s data con tent
  281                if (pnss _vistauser sData == n ull || pns s_vistause rsData.Dat a == null  || pnss_vi stausersDa ta.Data.le ngth == nu ll || pnss _vistauser sData.Data .length ==  0) {
  282                    //Ab ort proces s, missing  info
  283                    aler t('Unable  to obtain  a matching  Vista Use r record.  This user  cannot be  selected a s a signer !');
  284                    retu rn false;
  285                }
  286  
  287                for (var  i = 0; i  <= pnss_vi stausersDa ta.Data.le ngth - 1;  i++) {
  288                    var  pnss_selec tedUserDis playName =  '';
  289                    var  pnss_selec tedUserTit le = '';
  290                    var  pnss_selec tedUserIEN  = '';
  291  
  292                    if ( pnss_vista usersData. Data[i].Di splayName  != null) {  pnss_sele ctedUserDi splayName  = pnss_vis tausersDat a.Data[i]. DisplayNam e; }
  293                    if ( pnss_vista usersData. Data[i].Ti tle != nul l) { pnss_ selectedUs erTitle =  pnss_vista usersData. Data[i].Ti tle; }
  294                    if ( pnss_vista usersData. Data[i].Ie n != null)  { pnss_se lectedUser IEN = pnss _vistauser sData.Data [i].Ien.to String();  }
  295                    if ( pnss_selec tedUserDis playName ! = '' && pn ss_selecte dUserTitle  != '') {
  296                         pnss_selec tedUserDis playName =  pnss_sele ctedUserDi splayName  + ", (" +  pnss_selec tedUserTit le + ")";
  297                    }
  298  
  299                    //Ad d Row to G rid
  300                    pnss _entityVis taGrid.dat aSource.pu shCreate({
  301                         ID: pnss_r ecordID,
  302                         Type: pnss _recordTyp e,
  303                         IconURL: p nss_record IconURL,
  304                         Name: pnss _selectedU serDisplay Name,
  305                         IEN: pnss_ selectedUs erIEN
  306                    });
  307                }
  308  
  309                //Remove  row from  lookup gri d
  310                pnss_ent itySearchG rid.dataSo urce.remov e(pnss_gri dDataItem) ;
  311           }
  312       }
  313       catch  (err) {
  314           al ert('Progr ess Note S igner Sear ch Script  Failure: F unction(pn ss_clickAd dGridRow):  ' + err.m essage);
  315       }
  316   }
  317  
  318   function p nss_clickR emoveGridR ow(e) {
  319       try {
  320           // Disable se lect if di sabled
  321           if  (document .getElemen tById('btn Select').d isabled ==  true) { r eturn fals e; }
  322  
  323           va r pnss_gri dDataItem  = this.dat aItem($(e. currentTar get).close st('tr'));
  324           va r pnss_rec ordID = pn ss_gridDat aItem.ID;
  325           va r pnss_rec ordType =  pnss_gridD ataItem.Ty pe;
  326           va r pnss_rec ordIconURL  = pnss_gr idDataItem .IconURL;
  327           va r pnss_rec ordName =  pnss_gridD ataItem.Na me;
  328  
  329           va r pnss_ent itySearchG rid = $('# ku_lookupg rid').data ('kendoGri d');
  330           va r pnss_ent itySelecte dGrid = $( '#ku_selec tedgrid'). data('kend oGrid');
  331  
  332           if  (pnss_rec ordID != n ull) {
  333                //Add to  lookup gr id
  334                //Determ ine if it  already ex ist in loo kup grid,  if so remo ve from se lected but  don't add  to lookup
  335                /*
  336                if (pnss _entitySea rchGrid.da taSource.g et(pnss_re cordID) ==  null) {
  337                    pnss _entitySea rchGrid.da taSource.p ushCreate( {
  338                         ID: pnss_r ecordID,
  339                         Type: pnss _recordTyp e,
  340                         IconURL: p nss_record IconURL,
  341                         Name: pnss _recordNam e
  342                    });
  343                }
  344                */
  345  
  346                //Remove  row from  selected g rid
  347                pnss_ent itySelecte dGrid.data Source.rem ove(pnss_g ridDataIte m);
  348           }
  349       }
  350       catch  (err) {
  351           al ert('Progr ess Note S igner Sear ch Script  Failure: F unction(pn ss_clickRe moveGridRo w): ' + er r.message) ;
  352       }
  353   }
  354  
  355   function p nss_clickV istaGridRo w(e) {
  356       try {
  357           va r pnss_gri dDataItem  = this.dat aItem($(e. currentTar get).close st('tr'));
  358           va r pnss_rec ordID = pn ss_gridDat aItem.ID;
  359           va r pnss_rec ordType =  pnss_gridD ataItem.Ty pe;
  360           va r pnss_rec ordIconURL  = pnss_gr idDataItem .IconURL;
  361           va r pnss_rec ordName =  pnss_gridD ataItem.Na me;
  362           va r pnss_rec ordIEN = p nss_gridDa taItem.IEN ;
  363  
  364           // var pnss_e ntitySearc hGrid = $( '#ku_looku pgrid').da ta('kendoG rid');
  365           va r pnss_ent ityVistaGr id = $('#k u_vistagri d').data(' kendoGrid' );
  366           va r pnss_ent itySelecte dGrid = $( '#ku_selec tedgrid'). data('kend oGrid');
  367  
  368           if  (pnss_rec ordID != n ull) {
  369                //Remove  any exist ing record  with the  same id
  370                if (pnss _entitySel ectedGrid. dataSource .get(pnss_ recordID)  != null) {
  371                    pnss _entitySel ectedGrid. dataSource .remove(pn ss_entityS electedGri d.dataSour ce.get(pns s_recordID ));
  372                }
  373                //Add to  selected  grid
  374                if (pnss _entitySel ectedGrid. dataSource .get(pnss_ recordID)  == null) {
  375                    pnss _entitySel ectedGrid. dataSource .pushCreat e({
  376                         ID: pnss_r ecordID,
  377                         Type: pnss _recordTyp e,
  378                         IconURL: p nss_record IconURL,
  379                         Name: pnss _recordNam e,
  380                         IEN: pnss_ recordIEN
  381                    });
  382                    //Re move all r ows from v ista grid
  383                    pnss _entityVis taGrid.dat aSource.da ta([]);
  384                }
  385           }
  386       }
  387       catch  (err) {
  388           al ert('Progr ess Note S igner Sear ch Script  Failure: F unction(pn ss_clickVi staGridRow ): ' + err .message);
  389       }
  390   }
  391  
  392   function p nss_create LookupCont rol() {
  393       try {
  394           va r pnss_add ButtonText  = " Add " ;
  395           $( '#ku_looku pgrid').ke ndoGrid({
  396                columns:  [
  397                    { fi eld: 'ID',  type: 'st ring', hid den: true  },
  398                    { fi eld: 'Firs tName', ty pe: 'strin g', hidden : true },
  399                    { fi eld: 'Last Name', typ e: 'string ', hidden:  true },
  400                    { fi eld: 'Site No', type:  'string',  hidden: t rue },
  401                    { fi eld: 'Type ', type: ' string', h idden: tru e },
  402                    { fi eld: 'Icon URL', type : 'string' , hidden:  true },
  403                    {
  404                         template:  "<div clas s='entity- icon'" +
  405                               "sty le='backgr ound-image : url(#:da ta.IconURL #);' title ='#: Type  # - #: Nam e #'></div >" +
  406                               "<di v title='# : Type # -  #: Name # ' class='e ntity-labe l'>#: Name  #</div>",
  407                         field: 'Na me', title : 'Name',  type: 'str ing'
  408                    },
  409                    { co mmand: { t ext: pnss_ addButtonT ext, click : pnss_cli ckAddGridR ow }, titl e: ' ', wi dth: '110p x' }
  410                ],
  411                dataSour ce: {
  412                    sche ma: {
  413                         model: {
  414                             id: 'I D'
  415                         }
  416                    }
  417                },
  418                groupabl e: false,
  419                sortable : false,
  420                editable : false,
  421                height:  300,
  422                resizabl e: true,
  423                navigata ble: true,
  424                selectab le: "row",
  425                noRecord s: true,
  426                change:  pnss_selec tAddGridRo w
  427           }) ;
  428       }
  429       catch  (err) {
  430           al ert('Progr ess Note S igner Sear ch Script  Failure: F unction(pn ss_createL ookupContr ol) Error  Detail: '  + err.mess age);
  431           re turn null;
  432       }
  433   }
  434  
  435   function p nss_create VistaContr ol() {
  436       try {
  437           va r pnss_vis taButtonTe xt = " Sel ect ";
  438           $( '#ku_vista grid').ken doGrid({
  439                columns:  [
  440                    { fi eld: 'ID',  type: 'st ring', hid den: true  },
  441                    { fi eld: 'Type ', type: ' string', h idden: tru e },
  442                    { fi eld: 'Icon URL', type : 'string' , hidden:  true },
  443                    {
  444                         template:  "<div clas s='entity- icon'" +
  445                               "sty le='backgr ound-image : url(#:da ta.IconURL #);' title ='#: Type  # - #: Nam e #'></div >" +
  446                               "<di v title='# : Type # -  #: Name # ' class='e ntity-labe l'>#: Name  #</div>",
  447                         field: 'Na me', title : 'Name',  type: 'str ing'
  448                    },
  449                    { fi eld: 'IEN' , type: 's tring', hi dden: true  },
  450                    { co mmand: { t ext: pnss_ vistaButto nText, cli ck: pnss_c lickVistaG ridRow },  title: ' ' , width: ' 110px' }
  451                ],
  452                dataSour ce: {
  453                    sche ma: {
  454                         model: {
  455                             id: 'I D'
  456                         }
  457                    }
  458                },
  459                groupabl e: false,
  460                sortable : false,
  461                editable : false,
  462                height:  300,
  463                resizabl e: true,
  464                navigata ble: true,
  465                selectab le: "row",
  466                noRecord s: true,
  467                change:  pnss_selec tVistaGrid Row
  468           }) ;
  469       }
  470       catch  (err) {
  471           al ert('Progr ess Note S igner Sear ch Script  Failure: F unction(pn ss_createV istaContro l) Error D etail: ' +  err.messa ge);
  472           re turn null;
  473       }
  474   }
  475  
  476   function p nss_create SelectedCo ntrol() {
  477       try {
  478           va r pnss_rem oveButtonT ext = " Re move ";
  479           $( '#ku_selec tedgrid'). kendoGrid( {
  480                columns:  [
  481                    { fi eld: 'ID',  type: 'st ring', hid den: true  },
  482                    { fi eld: 'Type ', type: ' string', h idden: tru e },
  483                    { fi eld: 'Icon URL', type : 'string' , hidden:  true },
  484                    {
  485                         template:  "<div clas s='entity- icon'" +
  486                               "sty le='backgr ound-image : url(#:da ta.IconURL #);' title ='#: Type  # - #: Nam e #'></div >" +
  487                               "<di v title='# : Type # -  #: Name # ' class='e ntity-labe l'>#: Name  #</div>",
  488                         field: 'Na me', title : 'Name',  type: 'str ing'
  489                    },
  490                    { fi eld: 'IEN' , type: 's tring', hi dden: true  },
  491                    { co mmand: { t ext: pnss_ removeButt onText, cl ick: pnss_ clickRemov eGridRow } , title: '  ', width:  '110px' }
  492                ],
  493                dataSour ce: {
  494                    sche ma: {
  495                         model: {
  496                             id: 'I D'
  497                         }
  498                    }
  499                },
  500                groupabl e: false,
  501                sortable : false,
  502                editable : false,
  503                height:  300,
  504                resizabl e: true,
  505                navigata ble: true,
  506                selectab le: "row",
  507                noRecord s: true,
  508                change:  pnss_selec tRemoveGri dRow
  509           }) ;
  510  
  511           // Initalize  the select ed control  with valu es from CR M if they  exist
  512           va r pnss_sel ectedSigne rs = paren t.Xrm.Page .getAttrib ute('ftp_s electedsig ners').get Value();
  513           if  (pnss_sel ectedSigne rs != null  && pnss_s electedSig ners != '' ) {
  514                pnss_pop ulateSelec tedGrid(pn ss_selecte dSigners);
  515           }
  516       }
  517       catch  (err) {
  518           al ert('Progr ess Note S igner Sear ch Script  Failure: F unction(pn ss_createS electedCon trol) Erro r Detail:  ' + err.me ssage);
  519           re turn null;
  520       }
  521   }
  522  
  523   function p nss_popula teSelected Grid(pnss_ selectedSi gners) {
  524       try {
  525           va r pnss_sel ectedArray  = pnss_se lectedSign ers.split( '~~~');
  526           va r pnss_sel ectedArray RecordCoun t = pnss_s electedArr ay.length;
  527           va r pnss_ent itySelecte dGrid = $( '#ku_selec tedgrid'). data('kend oGrid');
  528  
  529           va r pnss_sel ectedIENAr ray = '';
  530           va r pnss_sel ectedIENAr rayRecordC ount = 0;
  531           va r pnss_pro gressNoteI d = parent .Xrm.Page. data.entit y.getId();
  532  
  533           va r pnss_arr ayMismatch  = false;
  534  
  535           // Determine  if NEW or  INT status  of array.  (NEW - no t processe d, INT - I NT is inte grated not e)
  536           if  (pnss_sel ectedArray [0] == 'IN T') {
  537                //Disabl e controls  when not  NEW
  538                document .getElemen tById('myf acilityuse rs').disab led = true ;
  539                document .getElemen tById('sea rchtext'). disabled =  true;
  540                document .getElemen tById('sea rchbuttoni d').disabl ed = true;
  541                document .getElemen tById('btn Select').d isabled =  true;
  542                //Change  title of  the cancel  button
  543                document .getElemen tById('btn Cancel').v alue = 'Cl ose Search ';
  544                document .getElemen tById('btn Cancel').t itle = 'Cl ick here t o close th e search f orm.';
  545                //Hide t he grid's  remove but ton column
  546                pnss_ent itySelecte dGrid.hide Column(4);
  547           }
  548  
  549           // Get Note's  Browser L ocal Stora ge Values
  550           if  (pnss_pro gressNoteI d != null  && pnss_pr ogressNote Id != '')  {
  551                var pnss _localStor ageVarName  = "PN" +  pnss_progr essNoteId;
  552                var pnss _localStor ageStringV alue = loc alStorage. getItem(pn ss_localSt orageVarNa me);
  553                if (pnss _localStor ageStringV alue != nu ll && pnss _localStor ageStringV alue != '' ) {
  554                    //al ert("local  storage v alue: " +  pnss_local StorageStr ingValue);
  555                    pnss _selectedI ENArray =  pnss_local StorageStr ingValue.s plit('~~~' );
  556                    pnss _selectedI ENArrayRec ordCount =  pnss_sele ctedIENArr ay.length;
  557                    //al ert("Local StorageArr ayLength:  " + pnss_s electedIEN ArrayRecor dCount);
  558                }
  559           }
  560  
  561           // Compare CR M signer a rray lengt h with Loc alStorage  array leng th
  562           if  (pnss_sel ectedArray RecordCoun t != pnss_ selectedIE NArrayReco rdCount) {  pnss_arra yMismatch  = true; }
  563  
  564           // *****TESTI NG****
  565           if  (pnss_arr ayMismatch  == true)  {
  566                //alert( "TEST MESS AGE: IEN/C RM, select ed signers  mismatch" );
  567           }
  568           el se {
  569                //alert( "TEST MESS AGE: IEN/C RM, select ed signers  MATCH!");
  570           }
  571           // ********** ******
  572  
  573  
  574           // Add previo usly selec ted users
  575           fo r (var i =  1; i < pn ss_selecte dArrayReco rdCount; i ++) {
  576                //***SPL IT ID & NA ME***
  577                var pnss _recordIdN ame = (pns s_selected Array[i]). split('___ ');
  578                //var pn ss_recordI D = (pnss_ selectedAr ray[i]).su bstring(4) ;
  579                var pnss _recordID  = (pnss_re cordIdName [0]).subst ring(4);
  580                //var pn ss_recordT ype = (pns s_selected Array[i]). substring( 0, 4);
  581                var pnss _recordTyp e = (pnss_ recordIdNa me[0]).sub string(0,  4);
  582  
  583                var pnss _recordNam e = pnss_r ecordIdNam e[1];
  584                //alert( pnss_recor dName);
  585  
  586                if (pnss _arrayMism atch != tr ue) {
  587                    var  pnss_recor dIEN = pns s_selected IENArray[i ];
  588                }
  589                else {
  590                    var  pnss_recor dIEN = '0' ;
  591                }
  592  
  593                var pnss _recordIco nURL = '';
  594                if (pnss _recordTyp e == 'USER ') { pnss_ recordIcon URL = 'img /ico_user. gif'; }
  595                //Insert  in select ed grid
  596                pnss_ent itySelecte dGrid.data Source.pus hCreate({
  597                    ID:  pnss_recor dID,
  598                    Type : pnss_rec ordType,
  599                    Icon URL: pnss_ recordIcon URL,
  600                    Name : pnss_rec ordName,
  601                    IEN:  pnss_reco rdIEN
  602                });
  603           }
  604  
  605       }
  606       catch  (err) {
  607           al ert('Progr ess Note S igner Sear ch Script  Failure: F unction(pn ss_populat eSelectedG rid) Error  Detail: '  + err.mes sage);
  608           re turn null;
  609       }
  610   }
  611  
  612   function p nss_search LookupEnti ty() {
  613       try {
  614           // Populate S ystemUser  Lookup Gri d
  615           va r pnss_ent itySearchG rid = $('# ku_lookupg rid').data ('kendoGri d');
  616           pn ss_getCrmS ystemUserD ata(0, pns s_entitySe archGrid);
  617       }
  618       catch  (err) {
  619           // Display Er ror
  620           al ert('Progr ess Note S igner Sear ch Script  Failure Fu nction(pns s_searchLo okupEntity ) Error De tail: ' +  err);
  621       }
  622   }
  623  
  624   function p nss_getCrm SystemUser Data(pnss_ skipCount,  pnss_syst emuserSele ctorContro l) {
  625       try {
  626           // Stop Proce ssing if m ore than 5 00 Users h ave beeen  retrieved
  627           if  (pnss_ski pCount >=  500) { ret urn false;  }
  628           // Clear grid  content i f pnss_ski pCount is  zero
  629           if  (pnss_ski pCount ==  0) { pnss_ systemuser SelectorCo ntrol.data Source.dat a([]); }
  630  
  631           // Add standa rd conditi ons
  632           va r pnss_con ditionalFi lter = "(I sDisabled  eq false a nd FullNam e ne 'SYST EM' and Fu llName ne  'INTEGRATI ON' and Fu llName ne  'Support U ser')";
  633  
  634           // Add filter ing by fac ility
  635           va r pnss_fac ilityFilte r = '';
  636           va r pnss_myF acilityUse rs = docum ent.getEle mentById(' myfacility users').ch ecked;
  637           if  (pnss_use rSiteId !=  null && p nss_userSi teId != '' ) {
  638                if (pnss _myFacilit yUsers ==  true && pn ss_userSit eId.length  > 25) {
  639                    pnss _facilityF ilter = "  and (ftp_F acilitySit eId/Id eq  guid'" + p nss_userSi teId + "')  ";
  640                }
  641           }
  642           pn ss_conditi onalFilter  = pnss_co nditionalF ilter + pn ss_facilit yFilter;
  643  
  644           // Determine  Search Str ing 
  645           va r pnss_sea rchString  = (documen t.getEleme ntById('se archtext') .value).re place("'",  "''");  / /NOTE, rep lace has t o do with  using sear ch strings  with '  f or example  O'Neill
  646  
  647           if  (pnss_sea rchString. length > 0 ) {
  648                if (pnss _searchStr ing.substr ing(0, 1)  == '*') {
  649                    pnss _searchStr ing = "sub stringof(' " + pnss_s earchStrin g.substrin g(1);
  650                    pnss _condition alFilter =  pnss_cond itionalFil ter + " an d " + "("  + pnss_sea rchString  + "', Inte rnalEMailA ddress) eq  true" +
  651                         " or " + p nss_search String + " ', FirstNa me) eq tru e" +
  652                         " or " + p nss_search String + " ', LastNam e) eq true " +
  653                         " or " + p nss_search String + " ', FullNam e) eq true " +
  654                         ")";
  655                }
  656                else {
  657                    pnss _condition alFilter =  pnss_cond itionalFil ter + " an d " + "(st artswith(I nternalEMa ilAddress,  '" + pnss _searchStr ing + "')  eq true" +
  658                         " or start swith(Firs tName, '"  + pnss_sea rchString  + "') eq t rue" +
  659                         " or start swith(Last Name, '" +  pnss_sear chString +  "') eq tr ue" +
  660                         " or start swith(Full Name, '" +  pnss_sear chString +  "') eq tr ue" +
  661                         ")";
  662                }
  663           }
  664           pn ss_getMult ipleEntity DataAsync( 'SystemUse rSet', 'Sy stemUserId , FullName , FirstNam e, LastNam e, ftp_Fac ilitySiteI d', pnss_c onditional Filter, 'L astName',  'asc', pns s_skipCoun t, pnss_ge tCrmSystem UserData_r esponse, p nss_system userSelect orControl) ;
  665       }
  666       catch  (err) {
  667           al ert('Progr ess Note S igner Sear ch Script  Failure Fu nction(pns s_getCrmSy stemUserDa ta) Error  Detail: '  + err.mess age);
  668           re turn null;
  669       }
  670   }
  671  
  672   function p nss_getCrm SystemUser Data_respo nse(pnss_s ystemuserD ata, pnss_ lastSkip,  pnss_syste muserSelec torControl ) {
  673       try {
  674           // pnss_lastS kip is the  starting  point in t he result  (use if mo re than 50  records)
  675           fo r (var i =  0; i <= p nss_system userData.d .results.l ength - 1;  i++) {
  676                var pnss _systemuse rid = null ;
  677                var pnss _userfulln ame = null ;
  678                var pnss _userfirst name = nul l;
  679                var pnss _userlastn ame = null ;
  680                var pnss _userfacil itysiteid  = null
  681                var pnss _usersiten o = '';
  682  
  683                //Get in fo
  684                if (pnss _systemuse rData.d.re sults[i].S ystemUserI d != null)  { pnss_sy stemuserid  = pnss_sy stemuserDa ta.d.resul ts[i].Syst emUserId;  }
  685                if (pnss _systemuse rData.d.re sults[i].F ullName !=  null) { p nss_userfu llname = p nss_system userData.d .results[i ].FullName ; }
  686                if (pnss _systemuse rData.d.re sults[i].F irstName ! = null) {  pnss_userf irstname =  pnss_syst emuserData .d.results [i].FirstN ame; }
  687                if (pnss _systemuse rData.d.re sults[i].L astName !=  null) { p nss_userla stname = p nss_system userData.d .results[i ].LastName ; }
  688                if (pnss _systemuse rData.d.re sults[i].f tp_Facilit ySiteId !=  null) { p nss_userfa cilitysite id = pnss_ systemuser Data.d.res ults[i].ft p_Facility SiteId.Id;  }
  689  
  690                //Lookup  the Facil ity/Site #
  691                if (pnss _userfacil itysiteid  != null &&  pnss_user facilitysi teid != '' ) {
  692                    var  pnss_facil ityData =  pnss_getSi ngleEntity DataSync(' ftp_facili tySet', 'f tp_facilit ycode', pn ss_userfac ilitysitei d);
  693                    if ( pnss_facil ityData !=  null) {
  694                         if (pnss_f acilityDat a.d.ftp_fa cilitycode  != null)  { pnss_use rsiteno =  pnss_facil ityData.d. ftp_facili tycode.toS tring(); }
  695                    }
  696                }
  697  
  698                //Add to  the grid
  699                pnss_sys temuserSel ectorContr ol.dataSou rce.pushCr eate({
  700                    ID:  pnss_syste muserid,
  701                    Firs tName: pns s_userfirs tname,
  702                    Last Name: pnss _userlastn ame,
  703                    Site No: pnss_u sersiteno,
  704                    Type : 'USER',
  705                    Icon URL: 'img/ ico_user.g if',
  706                    Name : pnss_use rfullname
  707                });
  708           }
  709           if  (pnss_sys temuserDat a.d.__next  != null)  {
  710                pnss_get CrmSystemU serData(pn ss_lastSki p + 50, pn ss_systemu serSelecto rControl);
  711           }
  712  
  713       }
  714       catch  (err) {
  715           al ert('Progr ess Note S igner Sear ch Script  Failure Fu nction(pns s_getCrmSy stemUserDa ta) Error  Detail: '  + err.mess age);
  716           re turn null;
  717       }
  718   }
  719  
  720   function p nss_search KeyPress(e vent) {
  721       try {
  722           // Determine  if 'enter'  key was p ressed if  so initiat e search
  723           va r pnss_key pressed =  event.whic h || event .keyCode;
  724           if  (pnss_key pressed ==  13) { pns s_searchLo okupEntity (); }
  725       }
  726       catch  (err) {
  727           // Display Er ror
  728           al ert('Progr ess Note S igner Sear ch Script  Failure Fu nction(pns s_searchKe yPress) Er ror Detail : ' + err) ;
  729       }
  730   }
  731  
  732   function p nss_applyP rogressNot eSigners()  {
  733       try {
  734           // Write the  selected u ser string ...
  735           va r pnss_sel ectedSigne rs = '';
  736           va r pnss_sel ectedIEN =  '';
  737           va r pnss_ent itySelecte dGrid = $( '#ku_selec tedgrid'). data('kend oGrid');
  738           // Determine  if records  have been  selected
  739           va r pnss_tot alSelected Records =  pnss_entit ySelectedG rid.dataSo urce.total ();
  740           if  (pnss_tot alSelected Records >  0) {
  741                //Add ea ch record  to the sel ected reco rd string  to be stor ed in CRM  (NEW indic ates that  it is an u nprocessed  array)
  742                pnss_sel ectedSigne rs = 'NEW' ;
  743                pnss_sel ectedIEN =  'NEW';
  744                var pnss _gridData  = pnss_ent itySelecte dGrid.data Source.dat a();
  745                var pnss _totalNumG ridRows =  pnss_gridD ata.length ;
  746  
  747                for (var  i = 0; i  < pnss_tot alNumGridR ows; i++)  {
  748                    var  pnss_curre ntGridData Row = pnss _gridData[ i];
  749                    pnss _selectedS igners = p nss_select edSigners  + '~~~' +  pnss_curre ntGridData Row.Type +  pnss_curr entGridDat aRow.ID +  '___' + pn ss_current GridDataRo w.Name;
  750                    pnss _selectedI EN = pnss_ selectedIE N + '~~~'  + pnss_cur rentGridDa taRow.IEN;
  751                }
  752           }
  753  
  754           // Write to C RM field
  755           pa rent.Xrm.P age.getAtt ribute('ft p_selected signers'). setValue(p nss_select edSigners) ;
  756           // Enforce sa ve of valu es in read  only fiel d
  757           pa rent.Xrm.P age.getAtt ribute('ft p_selected signers'). setSubmitM ode('alway s');
  758  
  759           // Write to B rowser Loc alStorage
  760           va r pnss_pro gressNoteI d = parent .Xrm.Page. data.entit y.getId();
  761           if  (pnss_pro gressNoteI d != null)  {
  762                var pnss _localStor ageVarName  = "PN" +  pnss_progr essNoteId;
  763                if (pnss _selectedS igners !=  '') {
  764                    loca lStorage.s etItem(pns s_localSto rageVarNam e, pnss_se lectedIEN) ;
  765                }
  766                else {
  767                    //If  Selected  Signers is  blank, th en remove  LocalStora ge values
  768                    loca lStorage.r emoveItem( pnss_local StorageVar Name);
  769                }
  770           }
  771  
  772           // Set focus  to the mai n top tab  and hide c urrent tab
  773           pa rent.Xrm.P age.ui.tab s.get('Tab _General') .setFocus( );
  774           pa rent.Xrm.P age.ui.tab s.get('Tab _Additiona lSigners') .setVisibl e(false);
  775  
  776           // Save the c urrent CRM  data
  777           pa rent.Xrm.P age.data.e ntity.save ();
  778       }
  779       catch  (err) {
  780           al ert('Progr ess Note S igner Sear ch Script  Failure: F unction(pn ss_applyPr ogressNote Signers) E rror Detai l: ' + err .message);
  781           re turn null;
  782       }
  783   }
  784  
  785   function p nss_cancel ProgressNo teSigners( ) {
  786       try {
  787           // Set focus  to the mai n top tab  and hide c urrent tab
  788           pa rent.Xrm.P age.ui.tab s.get('Tab _General') .setFocus( );
  789           pa rent.Xrm.P age.ui.tab s.get('Tab _Additiona lSigners') .setVisibl e(false);
  790       }
  791       catch  (err) {
  792           al ert('Progr ess Note S igner Sear ch Script  Failure: F unction(pn ss_cancelP rogressNot eSigners)  Error Deta il: ' + er r.message) ;
  793           re turn null;
  794       }
  795   }
  796  
  797   function p nss_execut eCrmOdataG etRequest( pnss_jsonQ uery, pnss _aSync, pn ss_aSyncCa llback, pn ss_skipCou nt, pnss_o ptionArray ) {
  798       //This  function  executes a  CRM Odata  web servi ce call to  retrieve  Crm data
  799       //*pns s_jsonQuer y* - a pro perly form atted CRM  Odata Quer y string ( required)
  800       //*pns s_aSync* -  specify ' true' to e xecute asy nchronousl y otherwis e 'false'  (required)
  801       //*pns s_aSyncCal lback* - s pecify the  name of t he return  function t o call upo n completi on (requir ed if pnss _aSync = t rue.  Othe rwise '')
  802       //*pns s_skipCoun t* - Initi al setting  is always  '0', incr ements by  50 per CRM  SDK Odata  standards  (required )
  803       //*pns s_optionAr ray* - is  an optiona l array or  single va lue, that  contains a dditional  task speci fic variab les that c an be pass ed between  functions  (pass 'nu ll' if not  used)
  804       try {
  805           va r pnss_ent ityData =  null;
  806           $. ajax({
  807                type: 'G ET',
  808                contentT ype: 'appl ication/js on; charse t=utf-8',
  809                datatype : 'json',
  810                url: pns s_jsonQuer y,
  811                beforeSe nd: functi on (XMLHtt pRequest)  {
  812                    XMLH ttpRequest .setReques tHeader('A ccept', 'a pplication /json');
  813                },
  814                success:  function  (data, tex tStatus, X mlHttpRequ est) {
  815                    pnss _entityDat a = data;
  816                    if ( pnss_aSync  == true)  {
  817                         pnss_aSync Callback(p nss_entity Data, pnss _skipCount , pnss_opt ionArray);
  818                    }
  819                },
  820                error: f unction (X MLHttpRequ est, textS tatus, err orThrown)  {
  821                    aler t('Fail: A jax Error  in pnss_ex ecuteCrmOd ataGetRequ est: ' + e rrorThrown  + " Reque st: " + pn ss_jsonQue ry);
  822                },
  823                async: p nss_aSync,
  824                cache: f alse
  825           }) ;
  826           re turn pnss_ entityData ;
  827       }
  828       catch  (err) {
  829           al ert('An er ror occure d in the p nss_execut eCrmOdataG etRequest  function.   Error Det ail Messag e: ' + err );
  830       }
  831   }
  832  
  833   function p nss_execut eCrmOdataP ostRequest (pnss_json Query, pns s_aSync, p nss_jsonEn tityData,  pnss_recor dAction, p nss_crmGui dFieldName ) {
  834       //This  function  executes a  CRM Odata  web servi ce call to  create/up date a Crm  Record
  835       //*pns s_jsonQuer y* - the c omplete qu ery (url)  to be exec uted
  836       //*pns s_aSync* -  specify ' true' to e xecute asy nchronousl y otherwis e 'false'  (required)
  837       //*pns s_jsonEnti tyData* -  the crm en tity data  record to  be created /updated
  838       //*pns s_recordAc tion* - th e action t o be perfo rmed in CA PS 'CREATE ', 'UPDATE , 'DELETE'
  839       //*pns s_crmGuidF ieldName*  - the name  of the un ique ident ifier fiel d that has  the Guid/ Id for the  crm recor d created
  840  
  841       try {
  842           va r pnss_crm EntityId =  'FAIL';
  843  
  844           $. ajax({
  845                type: 'P OST',
  846                contentT ype: 'appl ication/js on; charse t=utf-8',
  847                datatype : 'json',
  848                url: pns s_jsonQuer y,
  849                data: pn ss_jsonEnt ityData,
  850                beforeSe nd: functi on (XMLHtt pRequest)  {
  851                    XMLH ttpRequest .setReques tHeader('A ccept', 'a pplication /json');
  852                    if ( pnss_recor dAction ==  'UPDATE')  { XMLHttp Request.se tRequestHe ader('X-HT TP-Method' , 'MERGE') ; }
  853                    if ( pnss_recor dAction ==  'DELETE')  { XMLHttp Request.se tRequestHe ader('X-HT TP-Method' , 'DELETE' ); }
  854                },
  855                success:  function  (data, tex tStatus, X mlHttpRequ est) {
  856                    if ( pnss_recor dAction ==  'CREATE')  { pnss_cr mEntityId  = data.d[p nss_crmGui dFieldName ].toString (); }
  857                },
  858                error: f unction (X mlHttpRequ est, textS tatus, err orThrown)  {
  859                    aler t('Ajax Er ror in pns s_executeC rmOdataPos tRequest:  ' + errorT hrown);
  860                    pnss _crmEntity Id = 'FAIL ';
  861                },
  862                async: p nss_aSync
  863           }) ;
  864           if  (pnss_rec ordAction  == 'CREATE ') { retur n pnss_crm EntityId;  }
  865       }
  866       catch  (err) {
  867           al ert('An er ror occure d in the p nss_execut eCrmOdataP ostRequest  function.   Error De tail Messa ge: ' + er r);
  868       }
  869   }
  870  
  871   function p nss_getMul tipleEntit yDataAsync (pnss_enti tySetName,  pnss_attr ibuteSet,  pnss_condi tionalFilt er, pnss_s ortAttribu te, pnss_s ortDirecti on, pnss_s kipCount,  pnss_aSync Callback,  pnss_optio nArray) {
  872       //This  function  returns a  CRM JSON d ataset for  all entit y records  matching c riteria pr ovided Asy ncronously
  873       //*pns s_entitySe tName* - i s the name  of the en tity set e .g 'Contac tSet'
  874       //*pns s_attribut eSet* -  i s a string  containin g the Crm  Attributes  to retrie ve e.g. 'F irstName,  LastName,  Telephone1 , EMailAdd ress1'
  875       //*pns s_conditio nalFilter*  - is the  conditiona l filter v alue place d on the d ata values  retrived  e.g. 'Stat eCode/Valu e eq 0'  t o retrieve  active co ntact reco rds only
  876       //*pns s_sortAttr ibute* - i s a string  containin g the name  of the at tribute to  sort the  result set  by e.g. ' LastName'
  877       //*pns s_sortDire ction* - i s a string  specifyin g the sort  as Ascend ing or Des cending e. g. 'asc' o r 'desc'
  878       //*pns s_skipCoun t* - is th e starting  point in  the result  (use if m ore than 5 0), (Put 0  if not us ed)
  879       //*pns s_aSyncCal lback* - i s the name  of the fu nction to  call when  returning  the result
  880       //*pns s_optionAr ray* - is  an optiona l array, t hat contai ns additio nal task s pecific va riables th at can be  passed bet ween funct ions
  881  
  882       try {
  883           va r pnss_jso nQuery = p nss_server Url + pnss _crmOdataE ndPoint +  '/' + pnss _entitySet Name + '?$ select=' +  pnss_attr ibuteSet +  '&$filter =' + pnss_ conditiona lFilter +  '&$orderby =' + pnss_ sortAttrib ute + ' '  + pnss_sor tDirection  + '&$skip =' + pnss_ skipCount;
  884           pn ss_execute CrmOdataGe tRequest(p nss_jsonQu ery, true,  pnss_aSyn cCallback,  pnss_skip Count, pns s_optionAr ray);
  885       }
  886       catch  (err) {
  887           al ert('An er ror occure d in the p nss_getMul tipleEntit yDataAsync  function.   Error De tail Messa ge: ' + er r);
  888       }
  889   }
  890  
  891   function p nss_getSin gleEntityD ataSync(pn ss_entityS etName, pn ss_attribu teSet, pns s_entityId ) {
  892       //This  function  returns a  CRM JSON d ataset for  a single  entity rec ord based  on the ent ity id pro vided Sync ronously
  893       //*pns s_entitySe tName* - i s the name  of the en tity set e .g 'Contac tSet'
  894       //*pns s_attribut eSet* -  i s a string  containin g the Crm  Attributes  to retrie ve e.g. 'F irstName,  LastName,  Telephone1 , EMailAdd ress1'
  895       //*pns s_entityId * - is the  Guid for  the entity  record
  896  
  897       try {
  898           va r pnss_ent ityIdNoBra cket = pns s_entityId .replace(/ ({|})/g, ' ');
  899           va r pnss_sel ectString  = '(guid'  + "'" + pn ss_entityI dNoBracket  + "'" + ' )?$select= ' + pnss_a ttributeSe t;
  900           va r pnss_jso nQuery = p nss_server Url + pnss _crmOdataE ndPoint +  '/' + pnss _entitySet Name + pns s_selectSt ring;
  901           va r pnss_ent ityData =  pnss_execu teCrmOdata GetRequest (pnss_json Query, fal se, '', 0,  null);
  902           re turn pnss_ entityData ;
  903       }
  904       catch  (err) {
  905           al ert('An er ror occure d in the p nss_getSin gleEntityD ataSync fu nction.  E rror Detai l Message:  ' + err);
  906       }
  907   }