public PXGenericInqGrph GetGIGraph(Guid gi) { GIDesign giDesign = PXSelect <GIDesign, Where <GIDesign.designID, Equal <Required <GIDesign.designID> > > > .Select(Base, new object[] { gi }); return(PXGenericInqGrph.CreateInstance(giDesign.DesignID.Value.ToString(), giDesign.Name, parameters: new Dictionary <string, string>())); }
//Función que crea la esturcuta de una tabla (Columnas) public static DataTable CreateTableStructure(GIDesign genericInq) { //Crea la instancia al graph de las consultas genericas PXGenericInqGrph graphGetColumns = PXGenericInqGrph.CreateInstance(genericInq.DesignID.Value); //Inicializa el listado de columnas List <string> listColumns = new List <string>(); //Recorre, acomoda y agrega las columnas a la lista en orden foreach (GIResult resultMap in PXSelectReadonly <GIResult, Where <GIResult.designID, Equal <Required <GIResult.designID> > >, OrderBy <Asc <GIResult.lineNbr> > > .Select(graphGetColumns, new object[] { genericInq.DesignID.Value })) { // Solo agregamos si no está vacío if (!string.IsNullOrWhiteSpace(resultMap?.Caption)) { listColumns.Add(resultMap.Caption.ToString()); } } //Crea una nueva Tabla DataTable. System.Data.DataTable table = new DataTable("Result"); // Define las filas y columnas DataColumn column; // Crea la primera columna (autonumerable) column = new DataColumn(); column.DataType = System.Type.GetType("System.Int32"); column.ColumnName = "_id"; column.AutoIncrement = true; // Agrega la columna a la tabla table.Columns.Add(column); //Genera las columnas de acuerdo a la consulta genérica foreach (var itemColumn in listColumns) { // Crea la segunda columna column = new DataColumn(); column.DataType = System.Type.GetType("System.String"); column.ColumnName = itemColumn; column.AutoIncrement = false; // Agrega la columna a la tabla table.Columns.Add(column); } // Vuelve la columna "_id" PrimaryKey DataColumn[] PrimaryKeyColumns = new DataColumn[1]; PrimaryKeyColumns[0] = table.Columns["_id"]; table.PrimaryKey = PrimaryKeyColumns; //Regresa el esquema base de la tabla (columnas) return(table); }
public void GITable_RowDeleted(PXCache sender, PXRowDeletedEventArgs e) { GenericInquiryDesigner graph = (GenericInquiryDesigner)sender.Graph; GIDesign CurrentGI = graph.Designs.Current; if (CurrentGI == null) { return; } GIDesignExt CurrentGIExt = CurrentGI.GetExtension <GIDesignExt>(); if (CurrentGIExt.UsrESIsDynamicRole != true) { return; } else { object NewValue = CurrentGIExt.UsrESIsDynamicRole; sender.RaiseFieldVerifying <GIDesignExt.usrESIsDynamicRole>(CurrentGI, ref NewValue); } }
public virtual IEnumerable uploadData(PXAdapter adapter) { //Rastrea la consulta genérica, si existe forma la estrucutra de la tabla GIDesign design = PXSelectReadonly <GIDesign, Where <GIDesign.designID, Equal <Required <GIDesign.designID> > > > .Select(this, Filter.Current.GenericInq); if (design != null) { var start = Filter.Current.StartDate; var end = Filter.Current.EndDate; string name = design.Name + ".csv";// "orders.csv"; PXLongOperation.StartOperation(this, delegate() { //Obtiene la estructura de la tabla DataTable tableGI = CreateTableStructure(design); //Si existe más de una columna significa que recupero la estructura de la consulta generica if (tableGI.Columns.Count > 1) { //Llena la columna con los registros de la consulta generica Dictionary <string, DateTime?> parameters = new Dictionary <string, DateTime?>() { { "StartDate", Filter.Current.StartDate }, { "EndDate", Filter.Current.EndDate } }; tableGI = LoadRowsToTable(design, tableGI, parameters); } //Obtiene el csv SendData(DatatableToCsv(tableGI), name); }); } return(adapter.Get()); }
private void CreatePN(SyncType syncType) { var pnName = KCMSMQQueueHelper.GetSyncName(syncType); PushNotificationsHook notification = PushNotifications.SelectSingle(pnName); if (notification != null) { PushNotifications.Delete(notification); PushNotifications.Cache.PersistDeleted(notification); foreach (var item in PushNotifocationSource.Select(notification.HookId)) { var obj = item.GetItem <PushNotificationsSource>(); PushNotifocationSource.Delete(obj); PushNotifocationSource.Cache.PersistDeleted(obj); } foreach (var item in PushNotifocationErrors.Select(notification.HookId)) { var obj = item.GetItem <PushNotificationsErrors>(); PushNotifocationErrors.Delete(obj); PushNotifocationErrors.Cache.PersistDeleted(obj); } foreach (var item in PushNotifocationFailed.Select(notification.HookId)) { var obj = item.GetItem <PushNotificationsFailedToSend>(); PushNotifocationFailed.Delete(obj); PushNotifocationFailed.Cache.PersistDeleted(obj); } Persist(); } notification = new PushNotificationsHook { Name = pnName, Type = "KCMQ", Active = true, Address = Environment.MachineName + @"\private$\" + KCMSMQQueueHelper.GetSyncQueueName(syncType), HookId = Guid.NewGuid() }; PushNotifications.Insert(notification); GIDesign design = Design.SelectSingle(pnName); PushNotificationsSource source = new PushNotificationsSource { HookId = notification.HookId, DesignID = design.DesignID, SourceType = "GI" }; PushNotifocationSource.Insert(source); InsertInitializationActivity(KCMSMQConstants.createPN(pnName), KCMSMQConstants.createPNSuccess(pnName)); Persist(); }
public static DataTable LoadRowsToTable(GIDesign genericInq, DataTable structureTable, Dictionary <string, DateTime?> parameters) { //Define la fila que se generará y la variable de autoincremento DataRow row; int i = 0; //Crea la instancia al graph de las consultas genericas PXGenericInqGrph graphGetRows = PXGenericInqGrph.CreateInstance(genericInq.DesignID.Value); //Define los parametros del filtro de la consulta genérica foreach (var itemParameters in parameters) { graphGetRows.Caches[typeof(GenericFilter)].SetValueExt(graphGetRows.Filter.Current, itemParameters.Key, itemParameters.Value); } //Recorre los renglones recuperados foreach (GenericResult resultRow in graphGetRows.Views["Results"].SelectMulti()) { //Genera las filas de la tabla row = structureTable.NewRow(); row["_id"] = i++; //Recorre las llaves del renglon (DAC's de los que se componen los renglones) foreach (string key in resultRow.Values.Keys) { //Determina si son DAC's mapeados y genericos(formulas) if (key != "GenericResult") { //Si son DAC´s nativos, recorre las columnas definidas en la consulta genérica foreach (GIResult resultMap in PXSelectReadonly <GIResult, Where <GIResult.designID, Equal <Required <GIResult.designID> >, And <GIResult.objectName, Equal <Required <GIResult.objectName> > > > > .Select(graphGetRows, new object[] { genericInq.DesignID.Value, key })) { //Inicializa la variable result var result = new object(); //Inicializa el campo como vacío string fieldValue = string.Empty; //Recupera el valor de esa columna en el renglón vigente if (resultMap.Field.Contains("Attributes")) { //Recupera el NoteID del registro result = graphGetRows.Caches[resultRow.Values[key].GetType()].GetValue(resultRow.Values[key], "NoteID"); Guid dresult = (Guid)result; //Descompone la columna del atributo y recupera el nombre (llave) string[] values = resultMap.Field.Split('_'); string attributeName = values[0]; //Rastrea el valor del atributo CSAnswers resultAttribute = PXSelectReadonly <CSAnswers, Where <CSAnswers.refNoteID, Equal <Required <CSAnswers.refNoteID> >, And <CSAnswers.attributeID, Equal <Required <CSAnswers.attributeID> > > > > .Select(graphGetRows, new object[] { dresult, attributeName }); //Coloca la descripción del atributo en el valor del campo if (resultAttribute != null) { fieldValue = resultAttribute.Value; } } else { result = graphGetRows.Caches[resultRow.Values[key].GetType()].GetValue(resultRow.Values[key], resultMap.Field); //Si el resultado es diferente de nulo permite la conversión a texto if (result != null) { //Realiza la conversión del valor recuperado fieldValue = result.ToString(); //Determina si es tipo Fecha if (graphGetRows.Caches[resultRow.Values[key].GetType()].GetValue(resultRow.Values[key], resultMap.Field).GetType() == typeof(DateTime)) { fieldValue = ((DateTime)result).ToString("yyyy-MM-dd"); } //Determina si es tipo decimal if (graphGetRows.Caches[resultRow.Values[key].GetType()].GetValue(resultRow.Values[key], resultMap.Field).GetType() == typeof(Decimal)) { fieldValue = ((Decimal)result).ToString("0.00"); } } } // Agrega el valor de la fila a la columna definida por el número de línea en la definición de la tabla // pero solo agregamos si el titulo no está vacío if (!string.IsNullOrWhiteSpace(resultMap?.Caption)) { row[resultMap.Caption.ToString()] = fieldValue; } } } else { //Recupera los registros dinámicos (fórmulas) Dictionary <string, object> resGI = (Dictionary <string, object>)resultRow.Values[key]; //Recorre todos esos campos calculados foreach (var entry in resGI) { //Obtiene llave y valor de cada fórmula string keyGI = entry.Key; var valueGI = entry.Value; //La llave es un valor compuesto, se separa e identifica el RowID para saber a que columna le corresponde y lo convierte en su respectivo RowID string[] words = keyGI.Split('_'); string objectName = words[0]; string rowId = words[1]; rowId = rowId.Replace("Formula", ""); Guid createRowId = Guid.ParseExact(rowId, "N"); //Rastrea la línea (posición de la columna) GIResult resultMapRowId = PXSelectReadonly <GIResult, Where <GIResult.designID, Equal <Required <GIResult.designID> >, And <GIResult.rowID, Equal <Required <GIResult.rowID> > > > > .Select(graphGetRows, new object[] { genericInq.DesignID.Value, createRowId }); string fieldValueRowId = string.Empty; if (fieldValueRowId != null) { fieldValueRowId = valueGI.ToString(); } //Agrega el valor de la fila a la columna definida por el número de línea en la definición de la tabla // pero solo agregamos si el titulo no está vacío if (!string.IsNullOrWhiteSpace(resultMapRowId?.Caption)) { row[resultMapRowId.Caption.ToString()] = fieldValueRowId; } } } } //Agrega el renglon completo a la tabla structureTable.Rows.Add(row); } //Regresa la estructura completa de la tabla return(structureTable); }