Пример #1
0
        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>()));
        }
Пример #2
0
        //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);
            }
        }
Пример #4
0
        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());
        }
Пример #5
0
        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();
        }
Пример #6
0
        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);
        }