Recuperación de Lista de Solicitudes de Descarga Masiva Registradas Previamente

Recuperación de Lista de Solicitudes de Descarga Masiva Registradas Previamente

Esta transacción permite recuperar la lista (paginada y que cumplan criterios de filtrado establecidos, así como un ordenamiento indicado), con los metadatos asociados a Solicitudes de Descarga Masiva registradas previamente.

La respuesta es una mezcla de una lista (un registro por cada solicitud que cumple con los criterios de filtrado y que pertenecen a la página indicada), así como información de dicha lista (tamaño de página, cantidad de líneas totales y cantidad de páginas totales), y se entregará en dos tipos de formato diferente, en dependencia de lo especificado en los parámetros de entrada.

OBTENER_LISTA_SOLICITUDES_DM_SAT_HTML

El valor suministrado en el parámetro jsonData es la serialización (formato java), de una clase que contenga las propiedades page, pageSize, responseFormat, oper, order y filters (las dos primeras de tipo int y el resto de tipo string).

Definición de propiedades:

page: Indica la página que se quiere recuperar; obligatorio si oper tiene valor LINES o BOTH.

pageSize: Indica la cantidad de líneas por página; obligatorio si oper tiene valor LINES o BOTH.

responseFormat: Indica el formato que se desea como respuesta (valores posibles: JSON y XML); obligatorio.

oper: Indica el tipo de operación que se realizará (valores posibles: LINES, COUNT y BOTH); opcional, en caso de no especificarse se asume valor BOTH.

order: Indica el ordenamiento que se desea en el listado. El formato es tipo BD (MySql, MsSql, PlSql, etc.). Los campos que se pueden utilizar (de manera única o combinados, separados por coma) son: Servicio, TipoSolicitud, FechaInicial, FechaFinal, EstadoSolicitud y FechaRegistro; cada campo utilizado puede tener asociado el modificador ASC o DESC. Parámetro opcional, en caso de no especificarse se asume FechaRegistro DESC (los mas recientes primero).

filters: Indica los criterios de filtrado que tienen que cumplir los registros recuperados (se especifica codificado Base64); opcional. La mejor forma de explicar el formato de este parámetro es con un ejemplo.

Ejemplo de valor para el parámetro jsonData (se muestra en varias líneas para que se entienda mejor, debe especificarse en una sola):
  1. {
      "page": 1,
      "pageSize": 5,
      "responseFormat": "JSON",
      "oper": "BOTH",
      "order": "TipoSolicitud ASC, FechaRegistro DESC",
      "filters": "Base 64 de XML Filters"
    }

Como se había aclarado previamente, el valor de la propiedad filters se especifica codificado en Base64. El valor de la propiedad filters de ejemplo, decodificado, es este (se muestra en varias líneas, para que se entienda mejor):
  1. <Filters>
      <Filter Name="Servicio" Oper="=" Value1="RETENCIONES" Value2=""/>
      <Filter Name="TipoSolicitud" Oper="=" Value1="Metadata" Value2=""/>
    </Filters>

Pueden existir 6 criterios de filtrado; a continuación los enumero así como el valor a especificar en el atributo Name para cada uno de ellos:

Servicio: Especificar el valor Servicio en el atributo Name (no es case sensitive).

Tipo de Solicitud: Especificar el valor TipoSolicitud en el atributo Name (no es case sensitive).

Fecha Inicial: Especificar el valor FechaInicial en el atributo Name (no es case sensitive).

Fecha Final: Especificar el valor FechaFinal en el atributo Name (no es case sensitive).

Fecha de Registro en MYSuite: Especificar el valor FechaRegistro en el atributo Name (no es case sensitive).

Estado de la Solicitud: Especificar el valor EstadoSolicitud en el atributo Name (no es case sensitive).

El significado de cada criterio (excepto FechaRegistro que corresponde al campo EnrolledTimeStamp), son los mismos que los ya explicados en artículo anterior (para los campos de la respuesta entregada por la transacción OBTENER_SOLICITUD_DM_SAT_HTML en el DataTable Info).

Los valores posibles para el atributo Oper son (no es case sensitive):< =, <   >, > =, =, BETWEEN y LIKE; en formato xml los caracteres < y > son especiales y deben ser sustituidos (< por &lt;  y > por &gt;).

Evidentemente todos los operadores no pueden ser utilizados en cualquier filtro; por ejemplo, LIKE sólo tiene sentido si el campo que se está filtrando es de tipo cadena de caracteres.

Value1 es el valor por el cual se va a comparar, con el operador Oper, el campo especificado en Name; en el caso de Oper con valor LIKE los % deben ser especificados.

Value2 siempre es vacío (pero obligatorio) mientras el valor de Oper no sea < >; en este caso se necesita un segundo valor de comparación tal y como está en el ejemplo para el criterio de filtrado por Fecha de Alta.

Los valores de tipo fecha especificados en Value1 y Value2 tienen que especificarse en formato yyyy-mm-dd (año-mes-día).

SOLICITUD

A continuación se muestra la manera en que debe realizarse la solicitud:
  1. <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ws="http://www.fact.com.mx/schema/ws">
       <soap:Header/>
       <soap:Body>
          <ws:JsonServiceCall>
             <ws:jsonData>{
      "page": 1,
      "pageSize": 5,
      "responseFormat": "JSON",
      "oper": "BOTH",
      "order": "TipoSolicitud ASC, FechaRegistro DESC",
      "filters": "PEZpbHRlcnM+PEZpbHRlciBOYW1lPSJTZXJ2aWNpbyIgT3Blcj0iPSIgVmFsdWUxPSJSRVRFTkNJT0
    5FUyIgVmFsdWUyID0iIiAvPjxGaWx0ZXIgTmFtZT0iVGlwb1NvbGljaXR1ZCIgT3Blcj0iPSIgVmFsdWUxPSJNZXRhZG
    F0YSIgVmFsdWUyID0iIiAvPjwvRmlsdGVycz4="
    }</ws:jsonData>
             <ws:transactionName>OBTENER_LISTA_SOLICITUDES_DM_SAT_HTML</ws:transactionName>
             <ws:token>wA5MXwvO7OepjeLJd/jci7o5wxlQu5r19BZsJOIE+T1P7SOEHU95MWSyE+AMU=</ws:token>
          </ws:JsonServiceCall>
       </soap:Body>
    </soap:Envelope>

RESPUESTA
  1. <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       <soap:Body>
          <JsonServiceCallResponse xmlns="http://www.fact.com.mx/schema/ws">
             <JsonServiceCallResult>
    {"Result":true,
    "Payload":"Respuesta en Base64 del formato indicado en responseFormat",
    "ErrorMsg":"",
    "ErrorCode":0,
    "Token":"wAw8LzeFYnhlw2Qc0/5MXwvO7OepjeLJd/jc1mYOxk/t2S95ZDHVAIAR2Ve31as="}
        </JsonServiceCallResult>
          </JsonServiceCallResponse>
       </soap:Body>
    </soap:Envelope>

El valor devuelto en Payload puede tener dos formatos diferentes (en dependencia de lo especificado en la propiedad responseFormat).

Ejemplo de valor devuelto en Payload, formato JSON (aunque se muestra plano, y en varias líneas, el valor de Payload viene codificado Base64):
  1. {
      "PageSize": 5,
      "LinesCount": 1,
      "PagesCount": 1,
      "Lines": "[{
            \"Id\":10,
            \"TaxID\":\"JES900109Q90\",
            \"Servicio\":\"RETENCIONES\",
            \"FechaInicial\":\"\\/Date(1551420000000)\\/\",
            \"FechaFinal\":\"\\/Date(1551851999000)\\/\",
            \"TipoSolicitud\":\"Metadata\",
            \"TipoTaxID\":\"EMISOR\",
            \"Identificador\":\"364c1262-05f1-45d6-91e9-76ca89403470\",
            \"EnrolledTimeStamp\":\"\\/Date(1556717100000)\\/\",
            \"EstadoSolicitud\":5,
            \"CodigoEstadoSolicitud\":\"5004\",
            \"NumeroCFDIs\":0,
            \"CodEstatus\":\"5000\",
            \"Mensaje\":\"Solicitud Aceptada\"
             }]"
    }

A continuación se describen los atributos que vienen en Payload:

LinesCount y PagesCount solo se devuelven si el parámetro oper tuvo valor COUNT o BOTH.

Lines solo se devuelven si el parámetro oper tuvo valor LINES o BOTH.

PageSize indica la cantidad de registros por páginas que se tuvo en cuenta para el cálculo de PagesCount y también para el tamaño de Lines.

LinesCount indica la cantidad total de registros que cumplieron con los criterios de filtrado especificados.

PagesCount indica la cantidad total de páginas de tamaño PageSize para los registros que cumplieron con los criterios de filtrado especificados.

Lines DataTable con los metadatos de cada registro que cumplió con los criterios de filtrado especificados y que pertenece a la página especificada en el parámetro page de acuerdo con el criterio de ordenamiento especificado en el parámetro order. En el ejemplo hubo un único registro que cumplió con los criterios de filtrado pero pudieran devolverse varios, máximo lo informado en PageSize. La explicación de la información presente en este DataTable es la misma que ya se brindó en artículo anterior (para los campos de la respuesta entregada por la transacción OBTENER_SOLICITUD_DM_SAT_HTML en el DataTable Info).

Si el parámetro responseFormat hubiera tenido valor XML, el valor devuelto en Payload para la misma solicitud previa hubiera sido este (aunque se muestra plano, y en varias líneas, recuerda siempre que el valor de Payload viene codificado Base64):
  1. <?xml version="1.0" encoding="utf-8"?>
    <ListRetrieverResult xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <PageSize>5</PageSize>
      <LinesCount>1</LinesCount>
      <PagesCount>1</PagesCount>
      <Lines>
        <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
          <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
            <xs:complexType>
              <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element name="Table1">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element name="Id" type="xs:int" minOccurs="0"/>
                      <xs:element name="TaxID" type="xs:string" minOccurs="0"/>
                      <xs:element name="Servicio" type="xs:string" minOccurs="0"/>
                      <xs:element name="FechaInicial" type="xs:dateTime" minOccurs="0"/>
                      <xs:element name="FechaFinal" type="xs:dateTime" minOccurs="0"/>
                      <xs:element name="TipoSolicitud" type="xs:string" minOccurs="0"/>
                      <xs:element name="TipoTaxID" type="xs:string" minOccurs="0"/>
                      <xs:element name="Identificador" type="xs:string" minOccurs="0"/>
                      <xs:element name="EnrolledTimeStamp" type="xs:dateTime" minOccurs="0"/>
                      <xs:element name="EstadoSolicitud" type="xs:int" minOccurs="0"/>
                      <xs:element name="CodigoEstadoSolicitud" type="xs:string" minOccurs="0"/>
                      <xs:element name="NumeroCFDIs" type="xs:int" minOccurs="0"/>
                      <xs:element name="CodEstatus" type="xs:string" minOccurs="0"/>
                      <xs:element name="Mensaje" type="xs:string" minOccurs="0"/>
                    </xs:sequence>
                  </xs:complexType>
                </xs:element>
              </xs:choice>
            </xs:complexType>
          </xs:element>
        </xs:schema>
        <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
          <NewDataSet>
            <Table1 diffgr:id="Table11" msdata:rowOrder="0">
              <Id>10</Id>
              <TaxID>JES900109Q90</TaxID>
              <Servicio>RETENCIONES</Servicio>
              <FechaInicial>2019-03-01T00:00:00-06:00</FechaInicial>
              <FechaFinal>2019-03-05T23:59:59-06:00</FechaFinal>
              <TipoSolicitud>Metadata</TipoSolicitud>
              <TipoTaxID>EMISOR</TipoTaxID>
              <Identificador>364c1262-05f1-45d6-91e9-76ca89403470</Identificador>
              <EnrolledTimeStamp>2019-05-01T08:25:00-05:00</EnrolledTimeStamp>
              <EstadoSolicitud>5</EstadoSolicitud>
              <CodigoEstadoSolicitud>5004</CodigoEstadoSolicitud>
              <NumeroCFDIs>0</NumeroCFDIs>
              <CodEstatus>5000</CodEstatus>
              <Mensaje>Solicitud Aceptada</Mensaje>
            </Table1>
          </NewDataSet>
        </diffgr:diffgram>
      </Lines>
    </ListRetrieverResult>

Noten que la información devuelto es la misma que antes; solo en un formato diferente.

Notas para tener en cuenta:

·         A pesar de que existe un parámetro de entrada pageSize que indica la cantidad de registros por página que se desean recuperar la transacción devuelve la información PageSize; esto porque existe un máximo de 500 registros que se pueden devolver, si el valor indicado en el parámetro pageSize es mayor que 500, entonces este se fija en dicho valor, por eso la respuesta aclara con qué tamaño de página fue recuperada toda la información. Siempre que el parámetro pageSize sea menor o igual a 500, lo devuelto en PageSize tendrá el mismo valor.

·         No se permite recuperar solicitudes que pertenecen a un RFC diferente al que realiza la transacción; en otras palabras, todas las solicitudes devueltas en el DataTable Lines pertenecen al RFC que está invocando la transacción.