Exemplo n.º 1
0
 /// <summary>
 /// Sybase internal use only.
 /// <summary>
 public void RbsReplayInternal(YPF.Comercial.RRCC.SUP.Motivo entity)
 {
     
     YPF.Comercial.RRCC.SUP.intrnl.OperationReplay _replay = new YPF.Comercial.RRCC.SUP.intrnl.OperationReplay();
     _replay.RemoteId =(".");
     _replay.Component =("CRMMobileDesa.Motivo_rs");
     _replay.EntityKey =(entity.KeyToString());
     _replay.Operation =(entity.LastOperation);
     bool _includeBig = !("delete").Equals(_replay.Operation);
     com.sybase.afx.json.JsonObject _parameters = new com.sybase.afx.json.JsonObject();
     _parameters.Put("entity", YPF.Comercial.RRCC.SUP.Motivo.__toJSON(entity, _includeBig));
     //_replay.Parameters =(_parameters.ToString());
     //lock(typeof(YPF.Comercial.RRCC.SUP.CRMMobileDesaDB))
     //{
         Sybase.Persistence.ConnectionWrapper _conn = YPF.Comercial.RRCC.SUP.CRMMobileDesaDB.AcquireDBWriteConnection();
         Sybase.Persistence.LocalTransaction _tran = null;
         try
         {
             _tran = _conn.BeginTransaction();
         
             com.sybase.afx.json.JsonObject _json = new com.sybase.afx.json.JsonObject();
             _replay.Attributes =(_json.ToString());
             _replay.Save();
             _replay.SaveParameter(_parameters);
             _tran.Commit();
         }
         catch (Sybase.Persistence.PersistenceException pe)
         {   
             _tran.Rollback();     
             throw pe;
         }
         catch (System.ApplicationException e)
         {
             _tran.Rollback();
             throw e;
         }
     //}
 }
        /// <summary>
        /// Sybase internal use only.
        /// <summary>
        public void RbsReplayInternal(YPF.Comercial.RRCC.SUP.RelevamientoProducto entity)
        {
            YPF.Comercial.RRCC.SUP.intrnl.OperationReplay _replay = new YPF.Comercial.RRCC.SUP.intrnl.OperationReplay();
            _replay.RemoteId  = (".");
            _replay.Component = ("CRMMobileDesa.RelevamientoProducto_rs");
            _replay.EntityKey = (entity.KeyToString());
            _replay.Operation = (entity.LastOperation);
            bool _includeBig = !("delete").Equals(_replay.Operation);

            com.sybase.afx.json.JsonObject _parameters = new com.sybase.afx.json.JsonObject();
            _parameters.Put("entity", YPF.Comercial.RRCC.SUP.RelevamientoProducto.__toJSON(entity, _includeBig));
            //_replay.Parameters =(_parameters.ToString());
            //lock(typeof(YPF.Comercial.RRCC.SUP.CRMMobileDesaDB))
            //{
            Sybase.Persistence.ConnectionWrapper _conn = YPF.Comercial.RRCC.SUP.CRMMobileDesaDB.AcquireDBWriteConnection();
            Sybase.Persistence.LocalTransaction  _tran = null;
            try
            {
                _tran = _conn.BeginTransaction();

                com.sybase.afx.json.JsonObject _json = new com.sybase.afx.json.JsonObject();
                _replay.Attributes = (_json.ToString());
                _replay.Save();
                _replay.SaveParameter(_parameters);
                _tran.Commit();
            }
            catch (Sybase.Persistence.PersistenceException pe)
            {
                _tran.Rollback();
                throw pe;
            }
            catch (System.ApplicationException e)
            {
                _tran.Rollback();
                throw e;
            }
            //}
        }
Exemplo n.º 3
0
 private static void InternalSynchronize (string synchronizationGroup, 
         Sybase.Persistence.SyncStatusListener listener,
         Sybase.Persistence.SynchronizationContext syncContext,
         com.sybase.afx.json.JsonObject syncContextEx)
 {
     string mlServerHost;
     int mlServerPort;
     string syncUsername;
     string syncPassword;
     
     bool isInitialSync = "initialSync".Equals(synchronizationGroup) || KeyGenerator.InitSync();
     YPF.Comercial.RRCC.SUP.PersonalizationParameters _pp = GetPersonalizationParameters();
     _pp.Username =(GetSynchronizationProfile().UserName);
     _pp.Password =(GetSynchronizationProfile().Password);
     _pp.SaveUserNamePassword();
 	
     lock(_synchronizeLock)
     {
         Sybase.Mobile.Application.GetInstance().ApplicationSettings.CheckApplicationSettingsAvailable();
         Sybase.Persistence.ConnectionProfile _interProfile = new Sybase.Persistence.ConnectionProfile();
         _interProfile.DomainName =("default");
         _interProfile.ServerName =("sdbuetmapl28");
         _interProfile.PortNumber =(2480);
         _interProfile.NetworkProtocol =("http,https");
         _interProfile.NetworkStreamParams =("trusted_certificates=;url_suffix=");
         _interProfile.ApplyProperties(Sybase.Mobile.Application.GetInstance().ApplicationSettings);
         _interProfile.ApplyProperties(GetSynchronizationProfile());
 
         mlServerHost = _interProfile.ServerName;
         mlServerPort = _interProfile.PortNumber;
         syncUsername = _interProfile.UserName;
         syncPassword = _interProfile.Password;
         string sysPlatform = _interProfile.GetProperty("os");
         Sybase.Persistence.ConnectionWrapper ulConn = null;
         com.sybase.afx.db.ConnectionSyncParams syncParms = new com.sybase.afx.db.ConnectionSyncParams();
         try
         {
             YPF.Comercial.RRCC.SUP.PersonalizationParameters pp = new YPF.Comercial.RRCC.SUP.PersonalizationParameters();
             syncUsername += ("@" + _interProfile.DomainName);
             com.sybase.afx.json.JsonObject json = new com.sybase.afx.json.JsonObject();
             Sybase.Collections.GenericList<YPF.Comercial.RRCC.SUP.ClientPersonalization> listClientPersonalization = pp.ListClientPK;
             foreach(YPF.Comercial.RRCC.SUP.ClientPersonalization __item in listClientPersonalization)
             {
                 json.Put(__item.Key_name, __item.GetRealValue());
             }
             Sybase.Collections.GenericList<YPF.Comercial.RRCC.SUP.SessionPersonalization> sessionServerPersonalization = pp.ListSessionPK;
             foreach(YPF.Comercial.RRCC.SUP.SessionPersonalization __item in sessionServerPersonalization)
             {
                 json.Put(__item.Key_name, __item.Value);
             }
             json.Put("pv", "" + YPF.Comercial.RRCC.SUP.CRMMobileDesaDB.GetProtocolVersion());
             json.Put("pid", com.sybase.afx.util.PidUtil.GetId());
             json.Put("cle", _interProfile.GetProperty("changeLogEnabled", "false"));
             if(isInitialSync)
             {
                 com.sybase.afx.json.JsonObject jsonMBOMap = new com.sybase.afx.json.JsonObject();
                 jsonMBOMap.Put("DireccionEntrega",231);
                 jsonMBOMap.Put("Interaccion",232);
                 jsonMBOMap.Put("CalendarioInteraccionLocal",233);
                 jsonMBOMap.Put("CategoriaPregunta",234);
                 jsonMBOMap.Put("ClienteCabeceraPedido",235);
                 jsonMBOMap.Put("ClienteDetallePedido",236);
                 jsonMBOMap.Put("ClienteDeuda",237);
                 jsonMBOMap.Put("ClienteFacturacion",238);
                 jsonMBOMap.Put("CustomLocalData",239);
                 jsonMBOMap.Put("Direccion",240);
                 jsonMBOMap.Put("EstadoInteraccion",241);
                 jsonMBOMap.Put("Formulario",242);
                 jsonMBOMap.Put("FormularioMercado",243);
                 jsonMBOMap.Put("FormularioMercadoSegmento",244);
                 jsonMBOMap.Put("FormularioMercadoSubsegmento",245);
                 jsonMBOMap.Put("FormularioMercadoTamano",246);
                 jsonMBOMap.Put("FormularioPrecios",247);
                 jsonMBOMap.Put("FormularioPreciosMercado",248);
                 jsonMBOMap.Put("FormularioPreciosRed",249);
                 jsonMBOMap.Put("FormularioPreciosZonaInspeccion",250);
                 jsonMBOMap.Put("FormularioTransporte",251);
                 jsonMBOMap.Put("Mail",252);
                 jsonMBOMap.Put("Motivo",253);
                 jsonMBOMap.Put("Negocio",254);
                 jsonMBOMap.Put("OpcionRespuesta",255);
                 jsonMBOMap.Put("Parametro",256);
                 jsonMBOMap.Put("Pregunta",257);
                 jsonMBOMap.Put("PreguntaFormulario",258);
                 jsonMBOMap.Put("Provincia",259);
                 jsonMBOMap.Put("RelevamientoPrecios",260);
                 jsonMBOMap.Put("RelevamientoPreciosProducto",261);
                 jsonMBOMap.Put("RelevamientoProducto",262);
                 jsonMBOMap.Put("RelevamientoProductoProducto",263);
                 jsonMBOMap.Put("RelevamientoProductoTipo",264);
                 jsonMBOMap.Put("RelevamientoProveedor",265);
                 jsonMBOMap.Put("RelevamientoProveedorCanal",266);
                 jsonMBOMap.Put("RelevamientoProveedorLogistica",267);
                 jsonMBOMap.Put("RelevamientoTransporte",268);
                 jsonMBOMap.Put("RelevamientoTransporteCompetidor",269);
                 jsonMBOMap.Put("RelevamientoTransporteProducto",270);
                 jsonMBOMap.Put("RepresentanteComercial",271);
                 jsonMBOMap.Put("Respuesta",272);
                 jsonMBOMap.Put("RespuestaInteraccionFormulario",273);
                 jsonMBOMap.Put("Segmento",274);
                 jsonMBOMap.Put("SeleccionFormulario",275);
                 jsonMBOMap.Put("SeleccionTablaRelevamiento",276);
                 jsonMBOMap.Put("TablaRelevamiento",277);
                 jsonMBOMap.Put("Telefono",278);
                 jsonMBOMap.Put("TipoInteraccion",279);
                 jsonMBOMap.Put("LogRecordImpl",281);
                 jsonMBOMap.Put("OperationReplay",282);
                 jsonMBOMap.Put("SISSubscription",285);
                 jsonMBOMap.Put("PackageProperties",286);
                 jsonMBOMap.Put("ChangeLogImpl",288);
                 jsonMBOMap.Put("OfflineAuthentication",289);
                 jsonMBOMap.Put("RepresentanteComercialSynchronizationParameters",290);
                 jsonMBOMap.Put("RepresentanteComercial_pull_pq",291);
                 jsonMBOMap.Put("ClientPersonalization",341);
                 jsonMBOMap.Put("KeyGenerator",346);
                 jsonMBOMap.Put("LocalKeyGenerator",348);
                 json.Put("mboMap", jsonMBOMap);
                 json.Put("publications", synchronizationGroup);
                 json.Put("isInitialSync", isInitialSync.ToString());
             }
             else
             {
                 json.Put("publications", synchronizationGroup);
             }
             bool async = !isInitialSync && _interProfile.GetBoolean("asyncReplay", true);
             if(syncContextEx == null)
             {
                 syncContextEx = new com.sybase.afx.json.JsonObject();
             }
             syncContextEx.Remove("async");
             syncContextEx.Put("async", async + "");
             json.Put("_as", async + "");
             if(async && !IsReplayQueueEmpty())
             {
                 YPF.Comercial.RRCC.SUP.intrnl.OperationReplay rq = new YPF.Comercial.RRCC.SUP.intrnl.OperationReplay();
                 rq.SetComponent("CRMMobileDesaDB");
                 com.sybase.afx.json.JsonObject parameter = new com.sybase.afx.json.JsonObject();
                 if(syncContext != null)
                 {
                     object userContext = syncContext.UserContext;
                     if(userContext != null)
                     {
                         if(userContext is string)
                         {
                             parameter.Put("userContext", userContext);
                         }
                         else
                         {
                             throw new Sybase.Persistence.PersistenceException("user context must be string for async operation replay");
                         }
                     }
                     parameter.Put("synchronizationGroup",synchronizationGroup);
                 }
                 rq.SetParameters(parameter.ToString());
                 rq.SetOperation("batchNotify");
                 rq.Save();
             }
             if(_appName != null)
             {
                 json.Put("app", _appName);
             }
             json.Put("appId", Sybase.Mobile.Application.GetInstance().ApplicationIdentifier);
             if (sysPlatform != null)
             {
                 json.Put("os",  sysPlatform);
             }
             string str = json.ToString();
             byte[] bin = com.sybase.afx.util.StringUtil.ToUTF8(str);
             string authParam = com.sybase.afx.util.BinaryUtil.ToStringBase64(bin);
             bool isHttps = _interProfile.NetworkProtocol.Equals("https", System.StringComparison.OrdinalIgnoreCase);
             int maxLen = 4000;
             int size = (authParam.Length + maxLen - 1) / maxLen;
             if (size > 16)
             {
                 throw new Sybase.Persistence.SynchronizeException("the whole length of personalization parameters exceeds the limit of authenticate parameters and the safe length is 512 bytes");
             }
             string[] authList = new string[16];
             for (int i = 0; i < size; i++)
             {
                 authList[i] = authParam.Substring(i * maxLen, ((i + 1) * maxLen < authParam.Length) ? maxLen : (authParam.Length - i * maxLen));
             }
             for (int i = size; i < 16; i++)
             {
                 authList[i] = "x";//Spacer
             }
             ulConn = AcquireDBWriteConnection();
             syncParms.IsHttps = isHttps;        
             syncParms.Version = _interProfile.DomainName + "_" + "crmmobiledesa.1_0";
             syncParms.UserName = syncUsername;
             if(_interProfile.Certificate != null)
             {
                 syncPassword = null;
             }
             syncParms.Password = syncPassword + ("@" + com.sybase.afx.util.PidUtil.GetId());
             string mlStreamParams = "host=\"" + mlServerHost + "\";port=\"" + mlServerPort + "\"";
             string urlSuffix = com.sybase.afx.util.NetworkStreamParams.ExtractValue("url_suffix", _interProfile.NetworkStreamParams);
             if(urlSuffix != null && urlSuffix.Length != 0)
             {
                 mlStreamParams = "host=\"" + mlServerHost + "\";port=\"" + mlServerPort + "\";url_suffix=\"" + urlSuffix + "\"";
             }
 
             //setting http_userid and http_password if HTTPCredentials are available
             Sybase.Persistence.LoginCredentials lc = Sybase.Mobile.Application.GetInstance().ConnectionProperties.HTTPCredentials;
             if (lc != null)
             {
                 string http_userid = lc.UserName;
                 string http_password = lc.Password;
                 mlStreamParams = mlStreamParams + ";http_userid=\"" + http_userid + "\";http_password=\"" + http_password + "\"";
             }
             string cookie = com.sybase.afx.util.NetworkStreamParams.ExtractValue("set_cookie", _interProfile.NetworkStreamParams);
             Sybase.Collections.StringProperties httpCookies = Sybase.Mobile.Application.GetInstance().ConnectionProperties.HttpCookies;
             if (httpCookies != null)
             {
                 foreach(string key in httpCookies.Keys())
                 {
                     string value = httpCookies.Item(key);
                     if (cookie == null || cookie.Length == 0)
                     {
                         cookie = key + "=" + value;
                     }
                     else
                     {
                         cookie += "," + key + "=" + value;
                     }
                 }
             }
             if (cookie != null && cookie.Length != 0)
             {
                 mlStreamParams = mlStreamParams + ";set_cookie=\"" + cookie +"\"";
             }
             System.Collections.Generic.List<string> headers = com.sybase.afx.util.NetworkStreamParams.ExtractListValue("custom_header", _interProfile.NetworkStreamParams);
             foreach (string header in headers)
             {
                 mlStreamParams = mlStreamParams + ";custom_header=\"" + header +"\"";
             }
             Sybase.Collections.StringProperties httpHeaders = Sybase.Mobile.Application.GetInstance().ConnectionProperties.HttpHeaders;
             if (httpHeaders != null)
             {
                 foreach(string key in httpHeaders.Keys())
                 {
                     string value = httpHeaders.Item(key);
                     mlStreamParams = mlStreamParams + ";custom_header=\"" + key + ":" + value + "\"";
                 }
             }
             string ip = _interProfile.GetString("client_ip");
             if(ip != null && ip.Length != 0)
             {
                 mlStreamParams = mlStreamParams + ";client_ip_addr=\"" + ip + "\"";
             }
             if(isHttps)
             {
                 string ts =  com.sybase.afx.util.NetworkStreamParams.ExtractValue("trusted_certificates", _interProfile.NetworkStreamParams);
                 mlStreamParams += ";trusted_certificates=\"" + ts + "\"";
                 string tls = com.sybase.afx.util.NetworkStreamParams.ExtractValue("tls_type", _interProfile.NetworkStreamParams);
                 if (tls != null)
                 {
                     mlStreamParams += ";tls_type=\"" + tls + "\"";
                 }
             }
             System.Collections.Generic.IList<System.Collections.Generic.KeyValuePair<string, string>> nwParams = com.sybase.afx.util.NetworkStreamParams.Parse(_interProfile.NetworkStreamParams);
             foreach (System.Collections.Generic.KeyValuePair<string, string> entry in nwParams)
             {
                 string v = entry.Key;
                 if (!v.StartsWith("url_suffix") && !v.StartsWith("trusted_certificates") && !v.StartsWith("tls_type") 
                     && !v.StartsWith("http_userid") && !v.StartsWith("http_password") && !v.StartsWith("set_cookie") && !v.StartsWith("custom_header"))
                 {
                     mlStreamParams += ";" + v + "=\"" + entry.Value + "\"";
                 }
             }
                 
             syncParms.StreamParms = mlStreamParams;
             syncParms.Publications = synchronizationGroup;
             syncParms.AuthenticationParms = authList;
             syncParms.UploadOnly = syncContextEx.GetBoolean("uploadOnly");
             com.sybase.afx.db.ConnectionUtil.SetConnectionSyncParams(ulConn, syncParms);
             com.sybase.afx.db.CommandUtil.TraceSynchronize(_profile.GetSyncProfile(), synchronizationGroup, syncContext, GetRemoteId(ulConn));
             if (listener != null)
             {
                 string[] mboNames = com.sybase.afx.DatabaseBase.GetMBONames(synchronizationGroup, GetPublications());
                 System.Collections.Hashtable tableMBOMap = getTableMBOMap();
                 com.sybase.afx.db.ConnectionUtil.Synchronize(ulConn, listener, _interProfile.ToSyncConnection(), mboNames, tableMBOMap);                
             }
             else
             {
                 com.sybase.afx.db.ConnectionUtil.Synchronize(ulConn);                
             }
             
             //check protocol version
             PackageProperties _props = PackageProperties.Find("protocol_version");
             int _pv = 0;
             if (_props != null)
             {
                 _pv = System.Int32.Parse(_props.Value);
             }
             if (!isInitialSync && GetProtocolVersion() > _pv)
             {
                 string _msg = "device's protocol version is incompatible with the server's protocol version. (" + GetProtocolVersion() + " > " + _pv + ")";
                 Sybase.Persistence.ProtocolException _pe = new Sybase.Persistence.ProtocolException(_msg);
                 GetCallbackHandler().OnMessageException(_pe);
                 throw _pe;
             }            
             PackageProperties lastRequestId = PackageProperties.Find("lastRequestId");
             if(lastRequestId == null)
             {
                 lastRequestId = new PackageProperties();
                 lastRequestId.Key = "lastRequestId";
             }
             try
             {
                 lastRequestId.Value = KeyGenerator.GenerateId()+"";
             }
             catch(Sybase.Persistence.SynchronizeRequiredException)
             {
                 lastRequestId = null;
             }
             if(lastRequestId != null)
             {
                 lastRequestId.Save();
             }
             YPF.Comercial.RRCC.SUP.intrnl.OperationReplay.Finish();
         }
         catch(com.sybase.afx.db.SynchronizationException _ex)
         {
             string exMsg = _ex.ToString();
             com.sybase.afx.db.ConnectionImpl connImpl = (com.sybase.afx.db.ConnectionImpl)ulConn;
             iAnywhere.Data.UltraLite.ULConnection ul_conn = (iAnywhere.Data.UltraLite.ULConnection)connImpl.GetConnection();
             if (_ex.NativeError == com.sybase.afx.db.SynchronizationException.SQLE_MOBILINK_COMMUNICATIONS_ERROR)
             {                        
                 string strMessage = ul_conn.SyncResult.StreamErrorParameters;
                 try
                 {
                     int errorCode = System.Convert.ToInt32(strMessage);
                     Sybase.Mobile.Application.GetInstance().ApplicationCallback.OnHttpCommunicationError(errorCode, "", new Sybase.Collections.StringProperties());
                 }
                 catch (System.FormatException)
                 {
                 }
             }
 
             long authValue = ul_conn.SyncResult.AuthValue;
             if ((_ex.NativeError == com.sybase.afx.db.SynchronizationException.SQLE_MOBILINK_AUTHENTICATION_FAILED)
                && (authValue == com.sybase.afx.util.AuthExceptionUtil.FAILURE_CODE_TOKEN_VALIDATION_ERROR
                    || authValue == 4000))
             {
                 GetCallbackHandler().OnLoginFailure();
                 if (syncContext == null)
                 {
                     syncContext = new Sybase.Persistence.SynchronizationContext();
                 }
                 syncContext.ErrorCode = 401;
                 syncContext.ErrorMessage = "authentication failed.";
                 if (authValue == com.sybase.afx.util.AuthExceptionUtil.FAILURE_CODE_TOKEN_VALIDATION_ERROR)
                 {
                     syncContext.ErrorCode = 412;
                 }
             }
             com.sybase.afx.util.AuthExceptionUtil.CheckAuthValueAfterSync(com.sybase.afx.db.ConnectionUtil.GetConnectionSyncAuthValue(ulConn), _ex);
             if (_ex.NativeError == com.sybase.afx.db.SynchronizationException.SQLE_MOBILINK_COMMUNICATIONS_ERROR)
             {
                 exMsg += "Details:\n" + com.sybase.afx.db.ConnectionUtil.GetConnectionSyncDetail(ulConn) + "\n";
             }
             if( !"system".Equals(synchronizationGroup) &&
                     com.sybase.afx.db.SynchronizationException.SQLE_SERVER_SYNCHRONIZATION_ERROR == _ex.NativeError
             )
             {
                 try
                 {
                     YPF.Comercial.RRCC.SUP.CRMMobileDesaDB.Synchronize("system", null);
                 }
                 catch
                 {
                     if (!"initialSync".Equals(synchronizationGroup))
                     {
                         string _msg = "the package is not deployed or device's protocol version may be incompatible with the server's protocol version. (" + GetProtocolVersion() + " > 0)";
                         Sybase.Persistence.ProtocolException _pe = new Sybase.Persistence.ProtocolException(_msg);
                         GetCallbackHandler().OnMessageException(_pe);
                         throw _pe;
                     }
                 }
             }
             
             throw new Sybase.Persistence.SynchronizeException(exMsg,_ex);
         }
         catch(System.Exception _ex)
         {
             throw new Sybase.Persistence.SynchronizeException(_ex.ToString(),_ex);
         }
         finally
         {
             if(ulConn != null)
             {
                 ReleaseDBConnection();;
             }
         }
     }
 }